码迷,mamicode.com
首页 > 其他好文 > 详细

CS局域网射击游戏小结

时间:2014-12-25 01:27:06      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:

一、解决由于子弹射击速度过快而无法打到物体的问题

    //方法一:
    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局域网射击游戏小结

标签:

原文地址:http://www.cnblogs.com/MrZivChu/p/CSshoot.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!