unity 3d中的射线知识

在u3d中射线这个是比较重要的一个知识点,为什么这样说呢。举个例子,就像我们点击某个按钮然后触发某个事件,它为什么会知道我们点击的是哪个按钮呢,这就是射线的问题了,当我们点击鼠标后,然后就由摄像头发射一条射线到点击的地方,也就是碰撞的那个位置。然后再根据碰撞物体的名字,这样就可以识别我们点击的是哪个按钮了。射线很重要,对于初学者的人来说刚开始稍微有点难以理解。刚开始我也是,看着就有点头晕了。不过多看几遍自然会明白的。下面我们就来做个小实验,新建一个脚本,代码如下:

 

    private Vector3 startPoint;
    private Vector3 endPoint;

    // Update is called once per frame
    void Update()
    {
        //当我们按钮鼠标左键
        if (Input.GetMouseButtonDown(0))
        {
            startPoint = Camera.main.transform.position;
            //从摄像头发射一条射线,到鼠标点击的位置
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //射线碰撞到的地方
            RaycastHit hit;
            //这里不懂的可以查看API。参数依次是表示射线,射线碰撞的位置,射线的距离,检测的层。
            if (Physics.Raycast(ray, out hit, 100, 1 << 8))
            {
                endPoint = hit.point;
                //如果碰撞的是地面
                if (hit.collider.gameObject.name == "Terrain")
                {
                    // hit.point 就是表示点击的碰撞的哪个位置;
                    Debug.Log("我碰撞到了地面");
                }
                else
                {
                    Debug.Log("我碰撞到了其他物体");
                }
            }
        }

        //将射线打印出来
        if (Input.GetMouseButton(0))
        {
            Debug.DrawLine(startPoint, endPoint, Color.green, 0.2f);
        }

    }

 

 注意一点就是了。层---  一定要用位运算,否则是没用的。

 

          以上这些代码也不难理吧,大家就可以根据这个去延伸很多东西的......。就像英雄联盟一样,点击一下地面,人物就移动到那个点击的位置,点击的位置就是hit.point。你还可以在你点击的地方实例化一些点击的效果出来,就像一个光环啊什么的....

 

posted @ 2013-06-04 09:45  与现实冲突  阅读(1755)  评论(0)    收藏  举报