我有一个空的游戏对象在我的场景与组件盒对撞机2D。
我在这个游戏对象上附加了一个脚本:
void OnMouseDown()
{
Debug.Log("clic");
}
但是当我点击我的游戏对象时,就没有效果了。你有什么想法吗?如何检测到对我的盒对撞机的点击?
发布于 2015-05-17 21:53:53
用射线投射。检查鼠标左键是否按下。如果是,则从鼠标单击发生的位置向发生碰撞的位置抛出不可见的射线。对于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);
}
}
}
https://stackoverflow.com/questions/30291233
复制相似问题