首页 > 代码库 > CS局域网射击游戏小结
CS局域网射击游戏小结
一、解决由于子弹射击速度过快而无法打到物体的问题
//方法一: public float Speed = 800; Vector3 originalPos; void Update() { originalPos = transform.position; //获取子弹现在的位置 transform.Translate(Vector3.forward * Speed * Time.deltaTime); //移动子弹,每秒移动800米 Vector3 direction = transform.position - originalPos; //获取子弹移动的方向 float distance = (transform.position - originalPos).magnitude; //获取子弹移动的距离 RaycastHit hit; if (Physics.Raycast(originalPos, direction, out hit, distance)) { //其他逻辑操作。。。 } } //方法二: public float Speed = 100000; Vector3 startPos; Vector3 endPos; void Start() { //给子弹施加一个向前的力 GetComponent<Rigidbody>().AddForce(Vector3.forward * Speed, ForceMode.Force); } void Update() { startPos=endPos; endPos=transform.position; float distance = (startPos - endPos).magnitude; //获取子弹移动的距离 Ray r = Camera.main.ScreenPointToRay(startPos); RaycastHit hit; if (Physics.Raycast(r, out hit, distance)) { //其他逻辑操作。。。 } }
二、解决弹痕的位置问题
因为弹痕是一个贴图,所以当射击到某个点上时,我们要把此贴图贴在此点上面,具体实现代码如下:
GameObject goo = Instantiate(go, hit.point, Quaternion.identity) as GameObject;//实例化一张弹痕贴图 goo.transform.LookAt(hit.point - hit.normal); //使弹痕贴图面向法线上的点 LookAt:旋转物体使z轴指向目标物体。 goo.transform.Translate(Vector3.back * 0.01f); //使弹痕贴图向上移一点,避免贴图与地面重合而造成弹痕贴图显示不正常或无法显示
三、设置弹痕缓慢消失的效果
public float speed = 0.3f; private float lefttime = 0; Material meterial; void Start() { meterial = renderer.material; } void Update() { if (meterial.color.a < 0.005) { Destroy(this.gameObject); } lefttime += Time.deltaTime; if (lefttime > 2f) //弹痕出现2秒后,开始执行逐渐透明效果 { meterial.color = Color.Lerp(meterial.color, Color.clear, speed * Time.deltaTime); // Color.clear 为透明色,设置物体逐渐透明 } }
CS局域网射击游戏小结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。