如何检查raycast目标:gameObject.layer或gameObject.tag?

时间:2016-08-07 18:18:47

标签: c# unity3d

我正在使用光线投射来检测附近的物体,我必须知道光线投射是否会碰到障碍物或其他汽车。我看到两种方法,但我不知道哪一种更好(更优化)。第一种方法是为障碍物和汽车设置两层,将它们设置为用于光线投射的图层蒙版,并在击中检查哪一层是对象之后。另一种方法是将它们放在同一层上并为一个图层蒙版进行光线投射,但之后我必须检查标签。

3 个答案:

答案 0 :(得分:1)

我说使用标签是为了简单,但我不知道哪一个更快。在我之前的项目中,我只是使用了标签,我每帧大约有450次称这种功能,我没有注意到任何性能损失(这在我的高端计算机和可怕的学校计算机上都有)。

-Mitchell

答案 1 :(得分:1)

这不是关于哪个更快,而是关于它们的目的是什么。

您应该做的是检查图层的碰撞,然后如果您在同一图层下有不同的对象,请检查标记。请注意,raycast的参数名为layer。

Layer只是一个整数,我假设tag正在使用哈希表,所以两者都相当快。

结论:你不应该总是考虑效率而是首先考虑目的。

答案 2 :(得分:0)

我已经运行了两个测试,每个测试一个。光线从spining对象转换为其他静态和非静态对象,每个测试都在相同的质量设置下运行,所以我认为测试非常值得信赖。我测量了统一将渲染30 000帧的时间。对于检查图层,它需要321秒并用于检查标签320.我认为没有任何真正的区别。