传奇sf,传奇私服发布网,新开一秒传奇
当前位置:网站首页 > 传奇私服 > 正文

unity 游戏引擎

作者:admin发布时间:2021-08-27分类:传奇私服浏览:299评论:20


导读:离散式的碰撞检测中,帧与帧之间是独立的,因此会遇到题主所述的问题,即碰撞体上一个帧没撞上墙,而下一个帧穿过了墙,该物体本身在任意一个帧独立来看都是不知道自己会撞墙的(物理学中管这个...

unity 游戏引擎

离散式的碰撞检测中,帧与帧之间是独立的,因此会遇到题主所述的问题,即碰撞体上一个帧没撞上墙,而下一个帧穿过了墙,该物体本身在任意一个帧独立来看都是不知道自己会撞墙的(物理学中管这个叫量子隧穿效应)。

连续式的碰撞检测

则可以避免这一点。

原理和题主所述是一样的,就是射线检测法(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.

Unity-Manual:Rigidbody

其中的Discreet一词应为笔误,实为Discrete(Discreet意为慎重,两者意思相差很大)。整个Manual里没有第二处用到Discreet的地方,也没有任何官方说明提到该词。

翻译过来基本上就是

碰撞检测属性:用于防止快速移动的物体穿过其他物体而不触发碰撞检测。

离散(Discrete):

-碰撞体在遇到本场景其他碰撞体时使用离散式碰撞检测(Discrete)。

-其他碰撞体在遇到它时会使用离散式碰撞检测(Discrete)。

-用于正常碰撞。(这是默认值)

连续(Continuous):

-碰撞体在遇到其他动态碰撞体(即包含rigidbody)使用离散式碰撞检测(Discrete),在遇到静态MechColliders(即不含rigidbody)时使用连续式碰撞检测(Continuous)。

-设为动态连续(ContinuousDynamic)的碰撞体在遇到该物体时使用连续式碰撞检测(Continuous),其他碰撞体在遇到该物体时使用离散式碰撞检测(Discrete)。

-用于设定被动态连续(ContinuousDynamic)的物体所碰撞的物体。(会影响物理引擎的性能表现。如果你没有快速运动物体的碰撞问题,就乖乖设为离散吧)

动态连续(ContinuousDynamic):

-碰撞体在遇到其他设为连续(Continuous)或动态连续(ContinuousDynamic)的物体时使用连续式碰撞检测(Continuous)。在遇到静态MeshColliders(即不含rigidbody)时也使用连续式的碰撞检测。遇到其他碰撞体则使用离散式碰撞检测(Discrete)。

-用于快速运动的物体。

理成一个碰撞检测属性与碰撞检测方式的对应表格就是:

如果你有一个快速运动的小球,它会穿过一个静态的墙,那么将球设为Continuous即可解决问题。

但如果你有多个这样的小球,它们之间则依旧会遇到互相穿过对方的问题,那么将球都设为ContinuousDynamic更好。

所以遇到题主的问题时,将快速运动的物体设为Continuous/ContinuousDynamic即可。

理论上你可以设定所有物体为ContinuousDynamic,然而这样的物体数量一旦增加起来,对性能会有很大的影响。

展开阅读全文​


已有20位网友发表了看法:

欢迎 发表评论: