使用Physics.Raycast和Physics2D.Raycast检测对象的点击

我的场景中有一个空的游戏对象,带有组件盒对撞机2D。

我将脚本附加到此游戏对象:

void OnMouseDown() { Debug.Log("clic"); } 

但是当我点击我的游戏对象时,没有任何效果。 你有什么想法 ? 如何检测我的盒子对撞机上的点击?

使用光线投射。 检查是否按下了鼠标左键。 如果是这样,则将鼠标单击发生的位置的不可见光线投射到发生碰撞的位置。 对于3D对象,请使用:

3D模型:

 void check3DObjectClicked () { if (Input.GetMouseButtonDown (0)) { Debug.Log ("Mouse is pressed down"); RaycastHit hitInfo = new RaycastHit (); if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hitInfo)) { Debug.Log ("Object Hit is " + hitInfo.collider.gameObject.name); //If you want it to only detect some certain game object it hits, you can do that here if (hitInfo.collider.gameObject.CompareTag ("Dog")) { Debug.Log ("Dog hit"); //do something to dog here } else if (hitInfo.collider.gameObject.CompareTag ("Cat")) { Debug.Log ("Cat hit"); //do something to cat here } } } } 

2D精灵:

上面的解决方案适用于3D。 如果您希望它适用于2D,请将Physics.Raycast替换为Physics2D.Raycast 。 例如:

 void check2DObjectClicked() { if (Input.GetMouseButtonDown(0)) { Debug.Log("Mouse is pressed down"); Camera cam = Camera.main; //Raycast depends on camera projection mode Vector2 origin = Vector2.zero; Vector2 dir = Vector2.zero; if (cam.orthographic) { origin = Camera.main.ScreenToWorldPoint(Input.mousePosition); } else { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); origin = ray.origin; dir = ray.direction; } RaycastHit2D hit = Physics2D.Raycast(origin, dir); //Check if we hit anything if (hit) { Debug.Log("We hit " + hit.collider.name); } } }