Unity3D 中是否有碰撞检测的替代方案?
Are There Alternatives to Collision Detection in Unity3D?
所以,我正在开发一款游戏,我已经 运行 解决了这个问题......我正在尝试检测两个物体的碰撞,起初我认为我需要两个对撞机。然后我发现我需要一个刚体,现在我发现两个对象都需要一个刚体,这是很多 cpu 用法,刚体仅用于检测这些碰撞。它极大地限制了我在一个场景中可以拥有多少对象。
我能想到的唯一解决办法是从每一侧投射小光线。是否还有其他更优化的行业标准解决方案?
提前致谢
没有办法完全按照你的意愿去做。由于您没有描述您打算做什么(即使是 2D 或 3D),这里有一个通用的解决方案:
1) 仅将 Rigidbody
附加到其中一个对象(可能发生碰撞的两个对象中)
2) 在 Rigidbody
上勾选 IsKinematic
,这样它就不会对 Physics
产生反应
3) 在另一个对象的 Collider 上勾选 isTrigger
(这样它就不需要 Rigidbody
但当用 非触发 [=41= 击中另一个对象时会触发触发事件](!!!) 对撞机( 和 刚体)
(或在所有 GO 上使用 Rigidbody
,但在所有 GO 上勾选 IsKinematic
)
关于您自己的碰撞检测,请参阅@Hellium 的评论。
我要补充一点,如果您编写自己的碰撞检测代码,那么在一天结束时您很可能会得到一个消耗更多计算量的代码。时间(并且可能至少有点草率)。
仅仅是因为您将使用脚本而不是 C++ 进行编码,并且引擎的碰撞检测是 C++。 (您的 .net 脚本将通过 il2cpp 编译为本机,因此不是本机实现 == 必须比具有类似性质但受引擎支持的代码慢,即用 c++ 编码)
旁注:如果您找到您的应用。 运行宁慢,那不一定是因为碰撞检测。 您的代码并非不可能,当您检测到碰撞时您所做的 运行宁慢。
我强烈建议使用 the profiler 来查看是什么让您的应用程序变慢了。
如果它确实是您的代码,post 一个关于如何使它 运行 更快的问题。
所以,我正在开发一款游戏,我已经 运行 解决了这个问题......我正在尝试检测两个物体的碰撞,起初我认为我需要两个对撞机。然后我发现我需要一个刚体,现在我发现两个对象都需要一个刚体,这是很多 cpu 用法,刚体仅用于检测这些碰撞。它极大地限制了我在一个场景中可以拥有多少对象。
我能想到的唯一解决办法是从每一侧投射小光线。是否还有其他更优化的行业标准解决方案?
提前致谢
没有办法完全按照你的意愿去做。由于您没有描述您打算做什么(即使是 2D 或 3D),这里有一个通用的解决方案:
1) 仅将 Rigidbody
附加到其中一个对象(可能发生碰撞的两个对象中)
2) 在 Rigidbody
上勾选 IsKinematic
,这样它就不会对 Physics
产生反应
3) 在另一个对象的 Collider 上勾选 isTrigger
(这样它就不需要 Rigidbody
但当用 非触发 [=41= 击中另一个对象时会触发触发事件](!!!) 对撞机( 和 刚体)
(或在所有 GO 上使用 Rigidbody
,但在所有 GO 上勾选 IsKinematic
)
关于您自己的碰撞检测,请参阅@Hellium 的评论。
我要补充一点,如果您编写自己的碰撞检测代码,那么在一天结束时您很可能会得到一个消耗更多计算量的代码。时间(并且可能至少有点草率)。
仅仅是因为您将使用脚本而不是 C++ 进行编码,并且引擎的碰撞检测是 C++。 (您的 .net 脚本将通过 il2cpp 编译为本机,因此不是本机实现 == 必须比具有类似性质但受引擎支持的代码慢,即用 c++ 编码)
旁注:如果您找到您的应用。 运行宁慢,那不一定是因为碰撞检测。 您的代码并非不可能,当您检测到碰撞时您所做的 运行宁慢。
我强烈建议使用 the profiler 来查看是什么让您的应用程序变慢了。
如果它确实是您的代码,post 一个关于如何使它 运行 更快的问题。