Unity C#Raycast鼠标单击

时间:2016-05-01 20:59:37

标签: c# unity3d click mouse raycasting

我真的花了一整天的时间研究Unity C#Raycasting的灯光,我没有什么可以展示的。我已经学习了教程,在线资源,堆栈溢出问题,甚至还有单词复制脚本,希望Unity最终能够识别出我实际使用Raycast的所有尝试。以下是使用Raycast的脚本示例,它对我不起作用:

if (mouseDown) {
    print ("mouse is down");
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
    if (Physics.Raycast(ray, out hit)) {
        print ("response???");
    }
}

我觉得这应该有用......但事实并非如此。 mouseDown正常工作,但是当我点击我的对象时,它拒绝从我的鼠标位置向对象确认rayhit。我还要提一下,该项目是二维的。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

1 。如果您尝试检测触摸的对象是Image / Canvas,那么这不是如何执行此操作的。要使用Image / Canvas检测触摸,您必须使用IPointerDownHandlerIPointerClickHandler派生,然后从中实现这些功能。

public class YourClass : MonoBehaviour,IPointerDownHandler,IPointerClickHandler
{
   public void OnPointerClick(PointerEventData eventData)
   {
      Debug.Log("Clicked");
   }

   public void OnPointerDown(PointerEventData eventData)
   {
      Debug.Log("Down");
   }

}

2 。现在,如果要检测触摸的GameObject只是2D纹理或精灵,请使用下面的代码:

if (Input.GetMouseButtonDown(0))
{
    Vector2 cubeRay = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    RaycastHit2D cubeHit = Physics2D.Raycast(cubeRay, Vector2.zero);

    if (cubeHit)
    {
        Debug.Log("We hit " + cubeHit.collider.name);
    }
}

要使其正常工作,您必须将Collider2D附加到2D纹理或精灵。通过重新调整碰撞器的大小,确保碰撞器覆盖2D纹理或精灵。由于这是一款2D游戏,因此您使用的任何collider都必须以 2D 结尾。例如,有一个Box Collider并且有一个Box Collider 2D。您必须附上Box Collider 2D。到精灵/纹理。

3 。如果#2 无效,那么您的项目是以 3D 而非 2D 创建的>。删除项目,创建一个新项目,并确保这次选择2D。 #2 答案现在只要附加了2D collider就可以使用。