Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查光线投射目标:gameObject.layer或gameObject.tag?_C#_Unity3d - Fatal编程技术网

C# 如何检查光线投射目标:gameObject.layer或gameObject.tag?

C# 如何检查光线投射目标:gameObject.layer或gameObject.tag?,c#,unity3d,C#,Unity3d,我正在使用raycast检测附近的物体,我必须知道raycast是撞到了障碍物还是另一辆车。我看到了两种方法,但我不知道哪一种更好(更优化)。第一种方法是为障碍物和汽车设置两个层,将它们都设置为光线投射的层遮罩,并在命中后检查对象是哪一层。另一种方法是将它们都放在同一层上,并对一层遮罩进行光线投射,但随后我必须检查标记。为了简单起见,我会说使用标记,但我不知道哪一个更快。在我以前的项目中,我只使用标签,每帧调用这种函数大约450次,我没有注意到任何性能损失(在我的高端电脑和一台糟糕的学校电脑上都

我正在使用raycast检测附近的物体,我必须知道raycast是撞到了障碍物还是另一辆车。我看到了两种方法,但我不知道哪一种更好(更优化)。第一种方法是为障碍物和汽车设置两个层,将它们都设置为光线投射的层遮罩,并在命中后检查对象是哪一层。另一种方法是将它们都放在同一层上,并对一层遮罩进行光线投射,但随后我必须检查标记。

为了简单起见,我会说使用标记,但我不知道哪一个更快。在我以前的项目中,我只使用标签,每帧调用这种函数大约450次,我没有注意到任何性能损失(在我的高端电脑和一台糟糕的学校电脑上都这样做了)


-Mitchell

为了简单起见,我想说使用标签,但我不知道哪一个更快。在我以前的项目中,我只使用标签,每帧调用这种函数大约450次,我没有注意到任何性能损失(在我的高端电脑和一台糟糕的学校电脑上都这样做了)


-Mitchell

我已经运行了两个测试,每个方法一个。光线从旋转对象投射到其他静态和非静态对象上,每个测试都在相同的质量设置下运行,因此我认为该测试非常可靠。我测量了unity渲染30000帧的时间。检查图层需要321秒,检查标签需要320秒。我不认为有什么真正的区别。

我已经运行了两个测试,每个方法一个。光线从旋转对象投射到其他静态和非静态对象上,每个测试都在相同的质量设置下运行,因此我认为该测试非常可靠。我测量了unity渲染30000帧的时间。检查图层需要321秒,检查标签需要320秒。我不认为有什么真正的区别。

这不是关于哪个更快,而是关于他们的目的

你们应该做的是检查一个层的碰撞,然后若你们在同一层下有不同的对象,检查标签。请注意,光线投射的参数名为layer

层只是一个整数,我假设标记使用的是哈希表,所以两者都相当快


结论:你不应该总是从效率的角度考虑问题,而应该首先从目的的角度考虑问题。

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

你们应该做的是检查一个层的碰撞,然后若你们在同一层下有不同的对象,检查标签。请注意,光线投射的参数名为layer

层只是一个整数,我假设标记使用的是哈希表,所以两者都相当快


结论:您不应该总是从效率的角度考虑问题,而应该首先从目的的角度考虑问题。

好的,我正在为手机制作游戏,所以性能差异可能会更明显。我可能会像你一样做一些测试。@faken是的,如果你要做测试,我强烈建议你研究Unity Profiler和c#stopwatch类。好的,我正在为手机制作游戏,所以性能差异可能会更明显。我可能会像你一样做一些测试。@faken是的,如果你要做测试,我强烈建议你研究Unity Profiler和c#stopwatch类。