【问题标题】:Unity: Raycast Doesn't Hit Child Object's ColliderUnity:Raycast 不会击中子对象的碰撞器
【发布时间】:2017-03-04 15:47:06
【问题描述】:

我有一个基于图块的游戏。我将塔放置为瓷砖的子对象。我希望能够通过光线投射检测塔楼而不是瓷砖上的鼠标点击。瓷砖和塔楼都有 2d 盒对撞机。我可以检测到瓷砖上的点击,但 raycast 不会检测到塔上的点击。我怎么解决这个问题。谢谢。

这是我的光线投射代码:

if (Input.GetMouseButtonDown(0))
        {
            Ray ray = camera.ScreenPointToRay(Input.mousePosition);

            ray.origin = camera.transform.position;

            RaycastHit2D hit = Physics2D.Raycast(camera.transform.position, -Vector2.up, 50, 8);

            if (hit.collider != null && !EventSystem.current.IsPointerOverGameObject())
            {
                Debug.Log(hit.collider.transform.tag);
                //Transform objectHit = hit.transform;

            }
        }
    }

当我掩盖瓷砖(这里是第 8 层)时,我什么也得不到。尽管塔(如瓷砖)也有一个 2d 盒对撞机,但似乎光线从未击中塔。

【问题讨论】:

  • 要检测点击的子对象是哪一层?
  • 它在第 9 层 @Programmer

标签: c# unity3d


【解决方案1】:

只是钓鱼,但您的子对撞机不可能隐藏在父对撞机内吗?然后,Raycast 将只返回第一次命中。您可以尝试RaycastAll,如下所述:

https://docs.unity3d.com/ScriptReference/Physics.RaycastAll.html

并遍历控制台中的所有命中,以了解您是否真的得到了对撞机。

【讨论】:

    【解决方案2】:

    我建议使用 3d 射线而不是 2d 射线。也许 Camera.screenPointToRay 可能会派上用场。另外,我建议您先阅读以下内容:https://forum.unity3d.com/threads/unity-2d-raycast-from-mouse-to-screen.211708/

    【讨论】:

      【解决方案3】:

      只限制特定图层的光线投射

      //get the mask to raycast against either the player or enemy layer
       int layer_mask = LayerMask.GetMask("Player", "Enemy");
       //or this would be just player
       //int layer_mask = LayerMask.GetMask("Player");
      
       //or this would be player, enemy or cows!
       //int layer_mask = LayerMask.GetMask("Player","Enemy","Cows");
      
       //do the raycast specifying the mask
       if (Physics.Raycast (ray, out hit, distance, layer_mask))
       {
      
       } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-20
        • 2015-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-21
        • 1970-01-01
        相关资源
        最近更新 更多