Unity在鼠标点击位置生成物体
发表于2018-12-28
先上代码:
if (Input.GetMouseButtonUp (0)) { if (EventSystem.current.IsPointerOverGameObject ()) { Debug.Log ("touch area is UI"); } else{ Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hit; if (Physics.Raycast (ray, out hit)) { Debug.Log (hit.point); GameObject point= GameObject.Instantiate (pointPrefab, hit.point, transform.rotation)as GameObject; } } }
实现的功能是在鼠标点击的位置在场景中生成物体。
这里面有几个坑:
1. 由于我的场景里面有UI空间,当用户点击button时,不应该生成物体,所以添加判断代码:
if (EventSystem.current.IsPointerOverGameObject ());
2. 最早判断鼠标点击时用的判断语句是Input.GetMouseButton(0),结果每点击一次会生成好多个物体,是要鼠标按下就会一直生成,所以就改成了Input.GetMouseButtonUp(0),只有当鼠标左键松开时才会生成物体。
3. 如果直接在mousePosition生成物体,则其实是在屏幕上打点,获取到的坐标是摄像机显示画面的坐标,左下时(0,0),右上是(1,1)。所以使用发射射线的方式,点击的点投射到场景中,获取到他的世界坐标。