正如标题所提到的,除了明显的事实,即方法返回不同的参数,我收到bool Physics.Raycast(...)
和RayCastHit[] Physics.RaycastAll(...)
的不同结果。 Raycast
返回true,暗示光线至少击中一个目标。 RaycastAll
返回0结果。有趣的是,Raycast
总是在我的短片中返回true,而RaycastAll
总是返回false。
我有一个自定义图层我正在尝试字符串 - 我将其命名为“ClusterGoal”,它位于第9层。
Ray goalRay = new Ray(rayOrigin, agent.destination);
RaycastHit[] hits = Physics.RaycastAll(goalRay, 100f, LayerMask.GetMask("ClusterGoal"), QueryTriggerInteraction.Collide);
bool hit = Physics.Raycast(goalRay, 100f, LayerMask.GetMask("ClusterGoal"), QueryTriggerInteraction.Collide);
上面的行会产生以下日志。
RaycastAll hit 0 target(s) using mask 512 at location on its way from (13.8, 0.1, 11.8) to (1.0, 0.0, 0.3) from distance 8.164141
Raycast hit a target using mask 512 at location on its way from (13.8, 0.1, 11.8) to (1.0, 0.0, 0.3) from distance 8.164141
作为一项实验,我尝试在RaycastAll上反转我的图层蒙版,发现它成功击中了除标记为群集目标的每个对象。
答案 0 :(得分:0)
Raycasting从游戏对象的底部发生。在我的情况下,我试图光线投射的对象漂浮在空中,其变换将其Y轴列为0.出于某种原因,当我调用agent.destination
时,y值为0而不是预期1。
我提出的两个解决方案是将我的光线目标上的对撞机移动到地面,或将游戏物体本身移动到地面。