首页 > 代码库 > 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局域网射击游戏小结