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。你还可以在你点击的地方实例化一些点击的效果出来,就像一个光环啊什么的....