我听不懂RaycastCommand

问题描述 投票:-1回答:1

文档(https://docs.unity3d.com/2019.2/Documentation/ScriptReference/RaycastCommand.html)说:

如果maxHits大于命令的实际结果数结果缓冲区将包含一些未命中的无效结果任何东西。第一个无效结果由对撞机识别为空值。第二个及以后的无效结果不会被写入raycast命令,因此不保证其对撞机为null。什么时候遍历结果,当第一个无效时,循环应停止找到结果。

嘘,有

new RaycastCommand(from, direction, 4);
  1. 如何区分结果是否无效?两种情况都具有hit.collider == null。
  2. 如果与多个元素碰撞,而不是返回最接近的碰撞元素,它将什么都不返回?
unity3d raycasting
1个回答
0
投票
由于RaycastHitRaycastHit类型,所以永远不能是struct

如文档所描述的,例如

null

始终创建new RaycastCommand(from, direction, 4);
类型的4元素的缓冲区-始终。


第一个无效结果由对撞机标识为null。

因此,如果没有击中,则>]

RaycastHit


您可以例如使用Linq以便仅获得有效结果,例如

results[0].collider == null

[您还可以进一步将它们分类为“最先放置”,例如]

var validResults = results.Where(r=> r.collider != null).ToList();

© www.soinside.com 2019 - 2024. All rights reserved.