Unity在鼠标点击位置生成物体

发表于2018-12-28
评论0 9.8k浏览
先上代码:
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)。所以使用发射射线的方式,点击的点投射到场景中,获取到他的世界坐标。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引