首页 > 解决方案 > Unity C# 检测上面的所有游戏对象

问题描述

我希望我的玩家检测第 8 层中的所有游戏对象。我找到了一个检测上面所有游戏对象的代码,但它只是在 x=0 线上检测到,就像在这些图中一样,

它能做什么

我想要的是

   RaycastHit[] hitsUp = Physics.RaycastAll(transform.position, transform.up, distance);
   RaycastHit[] hitsDown = Physics.RaycastAll(transform.position, -transform.up, distance);
   foreach (RaycastHit hit in hitsUp)
   {
       if (hit.collider.gameObject.layer == 8)
       {
            Physics.IgnoreCollision(hit.collider, GetComponent<Collider>());
       }
   }
   foreach (RaycastHit hit in hitsDown)
   {
       if (hit.collider.gameObject.layer == 8)
       {
            Physics.IgnoreCollision(hit.collider, GetComponent<Collider>(), false);
       }
   }

我该如何解决这个问题?谢谢您的回复。

标签: c#unity3dphysicscollider

解决方案


只需将图层蒙版滤镜添加到您的 Raycast 中。

int layerMask = 1 << 8; // - detects raycasts only on 8 layer
RaycastHit[] hitsUp = Physics2D.Raycast(transform.position, transform.up, distance, layerMask);
RaycastHit[] hitsDown = Physics.RaycastAll(transform.position, -transform.up, distance, layerMask);

foreach不需要。


推荐阅读