文档(https://docs.unity3d.com/2019.2/Documentation/ScriptReference/RaycastCommand.html)说:
如果maxHits大于命令的实际结果数结果缓冲区将包含一些未命中的无效结果任何东西。第一个无效结果由对撞机识别为空值。第二个及以后的无效结果不会被写入raycast命令,因此不保证其对撞机为null。什么时候遍历结果,当第一个无效时,循环应停止找到结果。
嘘,有
new RaycastCommand(from, direction, 4);
RaycastHit
是RaycastHit
类型,所以永远不能是struct
。如文档所描述的,例如
null
始终创建new RaycastCommand(from, direction, 4);
类型的4
元素的缓冲区-始终。第一个无效结果由对撞机标识为null。因此,如果没有击中,则>]
RaycastHit
您可以例如使用Linq以便仅获得有效结果,例如
results[0].collider == null
[您还可以进一步将它们分类为“最先放置”,例如]
var validResults = results.Where(r=> r.collider != null).ToList();