Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
Unity3D中是否有碰撞检测的替代方案?_Unity3d_Collision Detection - Fatal编程技术网

Unity3D中是否有碰撞检测的替代方案?

Unity3D中是否有碰撞检测的替代方案?,unity3d,collision-detection,Unity3d,Collision Detection,所以,我正在做一个游戏,我遇到了一个问题。。我试图检测两个物体的碰撞,起初我假设我需要两个碰撞器。然后我发现我需要一个刚体,现在我发现两个物体都需要一个刚体,这需要大量的cpu使用,而刚体只用于检测这些碰撞。它极大地限制了我在一个场景中可以拥有多少对象 我能想到的唯一解决办法是从每一侧投射出小光线。是否有其他行业标准的解决方案更为优化 提前谢谢你你想做什么就做什么。由于您没有描述计划做什么(即使是2D或3D),这里有一个通用解决方案: 1) 将刚体仅附加到其中一个对象(两个对象中可能发生碰撞的一

所以,我正在做一个游戏,我遇到了一个问题。。我试图检测两个物体的碰撞,起初我假设我需要两个碰撞器。然后我发现我需要一个刚体,现在我发现两个物体都需要一个刚体,这需要大量的cpu使用,而刚体只用于检测这些碰撞。它极大地限制了我在一个场景中可以拥有多少对象

我能想到的唯一解决办法是从每一侧投射出小光线。是否有其他行业标准的解决方案更为优化


提前谢谢你

你想做什么就做什么。由于您没有描述计划做什么(即使是2D或3D),这里有一个通用解决方案:
1) 将
刚体
仅附加到其中一个对象(两个对象中可能发生碰撞的一个)
2) 勾选
刚体上的
iskinetic
,这样它就不会对物理产生反应
3) 在另一个对象的碰撞器上的
isTrigger
中打勾(这样它就不需要
Rigidbody
,但当使用非触发器(!!!)碰撞器(和刚体)碰撞另一个对象时,会触发事件

(或者在所有GO上使用
刚体
,但在所有GO上都勾选
Is运动学



关于您自己的碰撞检测,请参见@Hellium的评论。
我想补充一点,如果你编写自己的碰撞检测代码,那么在一天结束时,你很可能会得到一个消耗更多计算时间的代码(并且可能至少有点马虎)。
简单地说,因为你将在脚本中编码,而不是C++,引擎的碰撞检测是C++。(你的.NET脚本将通过IL2CPP编译成本地的,所以不是一个本机实现= =必须比具有相似性质的代码慢,但是引擎支持的代码,即C++编码)
BR>< 旁注:如果你发现你的应用程序运行缓慢,那不一定是因为碰撞检测。这不是不可能的。这是你的代码,当你检测到碰撞时你所做的事情运行缓慢。
我强烈建议使用来查看应用程序中哪些方面会减慢速度。

如果这确实是您的代码,请发布一个关于如何使其运行更快的问题。

没有办法完全按照您的要求执行。因为您没有描述您计划执行的操作(即使是2D或3D),这里有一个通用解决方案:
1) 将
刚体
仅附加到其中一个对象(两个对象中可能发生碰撞的一个)
2) 勾选
刚体上的
iskinetic
,这样它就不会对物理产生反应
3) 在另一个对象的碰撞器上的
isTrigger
中打勾(这样它就不需要
Rigidbody
,但当使用非触发器(!!!)碰撞器(和刚体)碰撞另一个对象时,会触发事件

(或者在所有GO上使用
刚体
,但在所有GO上都勾选
Is运动学



关于您自己的碰撞检测,请参见@Hellium的评论。
我想补充一点,如果你编写自己的碰撞检测代码,那么在一天结束时,你很可能会得到一个消耗更多计算时间的代码(并且可能至少有点马虎)。
简单地说,因为你将在脚本中编码,而不是C++,引擎的碰撞检测是C++。(你的.NET脚本将通过IL2CPP编译成本地的,所以不是一个本机实现= =必须比具有相似性质的代码慢,但是引擎支持的代码,即C++编码)
BR>< 旁注:如果你发现你的应用程序运行缓慢,那不一定是因为碰撞检测。这不是不可能的。这是你的代码,当你检测到碰撞时你所做的事情运行缓慢。
我强烈建议使用来查看应用程序中哪些方面会减慢速度。

如果这真的是你的代码,就如何让它运行得更快发表一个问题。

我想在你的物体周围投射光线是最糟糕的解决方案。互联网上有很多关于碰撞检测的资源,但是手工实现解决方案会很痛苦。如果不是所有的物体都必须碰撞在一起,你可以使用Unity layers:是的,这也是我能想到的最糟糕的事情:只有当你使用MeshCollider时,你才需要刚体来进行碰撞。如果你使用更简单的碰撞器,就不需要刚体。再看这里:,部分Trigger在你的物体周围投射光线,我想这是最糟糕的解决方案。互联网上有很多关于碰撞检测的资源,但它将是pa如果不是所有的物体都必须碰撞在一起,你可以使用Unity层:是的,这也是我能想到的最糟糕的事情:只有在使用MeshCollider时,你才需要刚体进行碰撞。如果你使用更简单的碰撞器,就不需要刚体。进一步看这里:,部分Trigger你是一个巨大的池of信息。谢谢你,兄弟。哦,我肯定不是建议我自己去探测。如果我认为我不会要求另一种方法的话,嗯,那么按照指示去做,我会发现当飞机是触发器时,你会通过它。这正常吗?@ThomasCaplan是的,触发器只是触发器,“感知”碰撞,而不是“物理碰撞器”(这就是为什么它们不需要刚体)那么,我应该在预制房里制作第二个平面吗?我需要我的地板是坚实的:DYou是一个巨大的信息池。谢谢你,兄弟。哦,我肯定不是建议我自己检测是一种方式。如果我认为我不会要求另一种方式,那么按照指示我来了要想知道什么时候一个平面是一个触发器,你就要穿过它。这正常吗?@ThomasCaplan是的,触发器只是触发器,“感应”碰撞,而不是“物理碰撞”(这就是为什么它们不需要刚体)所以我应该在预制中创建第二个平面,在它下面一个微米吗?我需要我的地板是实心的:D