Unity3D可防止与鼠标事件发生冲突

时间:2017-01-31 03:29:54

标签: c# unity3d

我是Unity3D的新手。我有一个由许多物体组成的场景:

  1. 制作房间的预制件(地板的网格平面,墙壁的4个网格平面)。每个都有一个网格对撞机

  2. 包含多个UI元素的画布

  3. 在预制房间内,我创建了一个桌子,包括一个圆柱体(用于桌面底座),一个用于桌面的立方体,四个立方体,围绕桌面边缘创建墙壁,使其具有唇形在桌面上是一个飞机(这是桌子"感觉"还有一个箱子对撞机和刚体)。这些都有碰撞器。这都是预制件。

  4. 在桌面上我有一些预制立方体(骰子)。它们有一个刚体和对撞机。

  5. 我遇到的问题是鼠标事件没有注册骰子(它们附有脚本)。在Update事件中,我有这段代码:

     if (Input.GetMouseButtonDown(0))
            {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit))
                {
                    Debug.Log("Name = " + hit.collider.name);
                    Debug.Log("Tag = " + hit.collider.tag);
                    Debug.Log("Hit Point = " + hit.point);
                    Debug.Log("Object position = " + hit.collider.gameObject.transform.position);
                    Debug.Log("--------------");
                }
            }
    

    我可以看到,即使我点击骰子,其他物体也会挡住(即房间的墙壁,桌面,桌面等)。

    那么,我该如何过来呢?除了UI元素之外,唯一需要具有鼠标事件的对象是骰子。有没有办法不为其他一切注册鼠标事件?哦,我在C#中写这个,这是一个3D项目。

    感谢

    here you can see the result of clicking on the dice.  It registers the TableBase.  If I move the dice up, away from the table, where the back wall is behind the dice, then the back wall will be registered

1 个答案:

答案 0 :(得分:1)

将骰子放在不同的图层上,并使用您的Raycast使用图层遮罩。 这是sorted