作者:admin发布时间:2021-08-27分类:传奇私服浏览:299评论:20
离散式的碰撞检测中,帧与帧之间是独立的,因此会遇到题主所述的问题,即碰撞体上一个帧没撞上墙,而下一个帧穿过了墙,该物体本身在任意一个帧独立来看都是不知道自己会撞墙的(物理学中管这个叫量子隧穿效应)。
则可以避免这一点。
原理和题主所述是一样的,就是射线检测法(Ray-)。当然额外的计算量也意味着额外的系统负担。
的里有个的碰撞检测属性。
该属性有三个选项:(离散),(连续),(动态连续)。
CollisionDetectionUsedtopreventfastmovingobjectsfrompassingthroughotherobjectswithoutdetectingcollisions.
-Discrete:UseDiscreetcollisiondetectionagainstallothercollidersinthescene.OthercolliderswilluseDiscreetcollisiondetectionwhentestingforcollisionagainstit.Usedfornormalcollisions(Thisisthedefaultvalue).
-Continuous:UseDiscretecollisiondetectionagainstdynamiccolliders(witharigidbody)andcontinuouscollisiondetectionagainststaticMeshColliders(withoutarigidbody).RigidbodiessettoContinuousDynamicwillusecontinuouscollisiondetectionwhentestingforcollisionagainstthisrigidbody.OtherrigidbodieswilluseDiscreetCollisiondetection.UsedforobjectswhichtheContinuousDynamicdetectionneedstocollidewith.(Thishasabigimpactonphysicsperformance,leaveitsettoDiscrete,ifyoudon’thaveissueswithcollisionsoffastobjects)
-ContinuousDynamic:UsecontinuouscollisiondetectionagainstobjectssettoContinuousandContinuousDynamicCollision.ItwillalsousecontinuouscollisiondetectionagainststaticMeshColliders(withoutarigidbody).Forallothercollidersitusesdiscreetcollisiondetection.Usedforfastmovingobjects.
其中的Discreet一词应为笔误,实为Discrete(Discreet意为慎重,两者意思相差很大)。整个Manual里没有第二处用到Discreet的地方,也没有任何官方说明提到该词。
翻译过来基本上就是
碰撞检测属性:用于防止快速移动的物体穿过其他物体而不触发碰撞检测。
-碰撞体在遇到本场景其他碰撞体时使用离散式碰撞检测(Discrete)。
-其他碰撞体在遇到它时会使用离散式碰撞检测(Discrete)。
连续(Continuous):
-碰撞体在遇到其他动态碰撞体(即包含rigidbody)使用离散式碰撞检测(Discrete),在遇到静态MechColliders(即不含rigidbody)时使用连续式碰撞检测(Continuous)。
-设为动态连续(ContinuousDynamic)的碰撞体在遇到该物体时使用连续式碰撞检测(Continuous),其他碰撞体在遇到该物体时使用离散式碰撞检测(Discrete)。
-用于设定被动态连续(ContinuousDynamic)的物体所碰撞的物体。(会影响物理引擎的性能表现。如果你没有快速运动物体的碰撞问题,就乖乖设为离散吧)
-碰撞体在遇到其他设为连续(Continuous)或动态连续(ContinuousDynamic)的物体时使用连续式碰撞检测(Continuous)。在遇到静态MeshColliders(即不含rigidbody)时也使用连续式的碰撞检测。遇到其他碰撞体则使用离散式碰撞检测(Discrete)。
-用于快速运动的物体。
如果你有一个快速运动的小球,它会穿过一个静态的墙,那么将球设为Continuous即可解决问题。
但如果你有多个这样的小球,它们之间则依旧会遇到互相穿过对方的问题,那么将球都设为ContinuousDynamic更好。
所以遇到题主的问题时,将快速运动的物体设为Continuous/ContinuousDynamic即可。
理论上你可以设定所有物体为ContinuousDynamic,然而这样的物体数量一旦增加起来,对性能会有很大的影响。
已有20位网友发表了看法: