Physics Reference 2D--Rigidbody 2D

  Rigidbody 2D组件将对象置于物理引擎的控制之下。许多熟悉的概念从标准刚体组件(standard Rigidbody component)继承到Rigidbody 2D组件;不同之处在于在2D中,对象只能在XY平面上移动,只能在垂直于XY平面的轴(Z轴)上旋转。

Rigidbody 2D 是怎么工作的???

  通常,Unity编辑器的Transform组件定义了游戏对象(及其子对象)在场景中的位置,旋转和缩放。当Transform发生改变时,它会去更新其他的组件来确保渲染的位置或者碰撞器的位置。

  2D物理引擎能够移动碰撞器并使其相互作用,因此物理引擎需要一个方法将碰撞器的运动传递给Transform,这种移动和与碰撞器的连接是Rigidbody 2D组件的用途。

  Rigidbody 2D组件会覆盖Transform并将其更新为Rigidbody 2D定义的位置/旋转。请注意,虽然您仍然可以通过自己修改Transform组件来覆盖Rigidbody 2D(因为Unity公开了所有组件上的所有属性),但这样做会导致GameObjects相互传递或相互进入等问题,以及不可预测的移动。

  当Collider 2D附着在Rigidbody 2D上时,不应该使用Transform或any collider offset(任何碰撞器偏移)直接移动Collider 2D; 应该移动Rigidbody 2D。这确保最佳性能并确保正确碰撞检测。

Body Type

根据Body Type属性选择的不同,界面会有不同的属性呈现。
  Body Type有三种选择; 每个定义一个共同的行为和属性。任何连接到Rigidbody 2D的Collider 2D都会继承Rigidbody 2D的Body Type。

  • Dynamic
  • Kinematic
  • Static

  注意:尽管Rigidbody 2Ds经常被描述为相互碰撞,但碰撞的每个物体都必须附有Collider 2D。没有碰撞器,刚体2D不会相互碰撞。(Rigidbody 2D只需要一方有就可以发生碰撞)

  改变Rigidbody 2D的Body Type可能是一个棘手的过程。当“Body Type”发生变化时,会立即重新计算各种与质量相关的内部属性,并且需要在GameObject的下一个FixedUpdate中重新评估连接到Rigidbody 2D上的Collider 2Ds的所有现有接触点。根据与身体连接的接触点和Collider 2D的数量,改变Body Type会导致性能的变化。

Body Type: Dynamic

Dynamic.png

  Dynamic 是模拟Rigidbody 2D在仿真环境下运动,拥有真实的属性:有限质量和阻力,受重力和外力影响。会与其他每个Body Type类型的GameObject相撞,最具有互动性。也是Rigidbody 2D默认的类型,是移动的场景类型,但也是性能消耗最大的类型。因为它具有动态性和与周围物体的互动性。此体型可以使用所有Rigidbody 2D属性。

  不要使用“Transform”组件来设置Dynamic Rigidbody 2D 的位置或旋转。模拟根据其速度重新定位动态刚体2D; 您可以通过脚本应用的力直接更改,或通过碰撞和重力间接。

  • Body type:设置Rigidbody 2D的Body类型,以便您可以操纵运动(位置和旋转)和Collider 2D交互行为。
  • Material:物体材质;使用它为附加到特定父Rigidbody 2D上的所有Collider 2Ds指定一个公共材质。
    说明:A Collider 2D uses the following order of priority to determine which Material setting to use: (使用物理材质的顺序)
  1. A Physics Material 2D specified on the Collider 2D itself.(优先使用collider上面的)
  2. A Physics Material 2D specified on the attached Rigidbody 2D.(如果collider上面不存在,再使用Rigidbody 2D上面的材质,如果没有使用None默认材质)
  • Simulated:启动物理模拟,gameobject收到重力和相关力作用,对Collider 2D和Joint 2D进行约束。
    注意:当不需要模拟某个gameobject的物理行为时,取消模拟比Disable Rigidbody 2D组件要好,原因如下(原文档内容:大意是使用取消模拟相比于Disable Rigidbody 2D不需要额外的时间和空间开销)

    reason

  • Use Auto Mass:勾选后,Rigidbody 2D从其Collider 2D中自动检测GameObject的质量。

  • Mass:定义Rigidbody 2D的质量。如果选择了使用Use Auto Mass(自动质量),它将显示为灰色。

  • Linear Drag:线性阻力系数,影响线性运动的阻力系数

  • Angular Drag:角阻力系数,影响旋转运动的阻力系数

  • Gravity Scale:定义GameObject受重力影响程度

  • Collision Detection:定义如何检测Collider 2D之间的碰撞
    1.Discrete:将碰撞检测设置为离散,如果物理更新过程中移动速度足够快,则具有Rigidbody 2D和Collider 2D的游戏对象可以重叠或相互穿过。碰撞触点仅在新位置生成。
    2.Continuous:将碰撞检测设置为连续,具有Rigidbody 2D和Collider 2D的游戏对象在更新期间不会相互通过。相反,Unity会计算任何Collider 2D的第一个影响点,并将GameObject移动到那里。请注意,这比Discrete需要更多的CPU时间。

  • Sleeping Mode:定义GameObject如何“休眠”以在处于静止状态时节省处理器时间。
    1.Never Sleep:禁用睡眠(应尽可能避免选择Never Sleep,因为它可能会影响系统资源)。
    2.Start Awake:GameObject最初是清醒的。
    3.Start Asleep:GameObject最初是休眠的,但可以被碰撞唤醒。

  • Interpolate:定义如何在物理更新之间插值GameObject(游戏物体)的运动(当运动趋于不稳定时很有用)。
    1.None:没有插值运算
    2.Interpolate:根据GameObject在先前帧中的位置对运动进行平滑处理。
    3.Extrapolate:基于其在下一帧中的位置的估计来平滑运动。

  • Constraints:定义Rigidbody 2D运动的任何限制。
    1.Freeze Position:有选择地停止Rigidbody 2D在世界X和Y轴上的移动。
    2.Freeze Rotation:选择性地停止围绕Z轴旋转的Rigidbody 2D。

Body Type: Kinematic

Kinematic.png

  与Dynamic Rigidbody 2D 相比,Kinematic Rigidbody 2D不受重力和力的影响,对系统资源的需求很低。Kinematic Rigidbody 2D设计为通过Rigidbody2D.MovePosition或Rigidbody2D.MoveRotation显式重新定位。使用物理查询来检测碰撞,并使用脚本来确定Rigidbody 2D应该移动的位置和方式。

  Kinematic Rigidbody 2D仍然通过速度运动,但速度不受力或重力的影响。Kinematic Rigidbody 2D不与其他Kinematic Rigidbody 2D碰撞,也不与Static Rigidbody 2D碰撞;它只与Dynamic Rigidbody 2D 碰撞。Kinematic Rigidbody 2D在碰撞过程中表现得像一个不可移动的物体(仿佛它有无限的质量)。与质量相关的属性在这种身体类型中是不可用的。

相比于Dynamic Rigidbody 2D ,Kinematic Rigidbody 2D有一个单独的属性:

  • Use Full Kinematic Contacts:使用全运动触点,Kinematic Rigidbody 2D will collide with all Rigidbody 2D Body Types(Kinematic Rigidbody 2D与所有类型的Rigidbody 2D产生碰撞);但是发生碰撞时Kinematic Rigidbody 2D不会移动,这是一个具有无限质量的物体。

Body Type: Static

Static.png

  如果有任何碰撞,Static Rigidbody 2D的行为就像一个不可移动的物体(好像它有无限质量)。它也是使用资源最少的身体类型。
A Static body only collides with Dynamic Rigidbody 2Ds
一个Static Rigidbody 2D仅与Dynamic Rigidbody 2Ds发生碰撞。不支持两个Static Rigidbody 2D碰撞,因为它们不是为了移动而设计的。

有两种方法可将Rigidbody 2D标记为静态:
1.对于具有Collider 2D组件的GameObject,根本不具有Rigidbody 2D组件。所有这些Collider 2D都在内部被认为是附加到单个隐藏的Static Rigidbody 2D组件。
2.对于GameObject来说,要有一个Rigidbody 2D并且要将Rigidbody 2D设置为Static。

  注意:Static Rigidbody 2Ds and Kinematic Rigidbody 2Ds will interact(交互) with each other if one of their Collider 2Ds is set to be a trigger. 这里会和Use Full Kinematic Contacts属性所说的有 “冲突”吗? 如果Kinematic Rigidbody 2D不勾选Use Full Kinematic Contacts属性,还可以和Static Rigidbody 2D交互吗?答案是肯定的,因为这里勾选Trigger走的是触发器规则(不是走的碰撞器规则),不会发生冲突脚本回调(OnCollisionEnterOnCollisionStayOnCollisionExit)。

总结:

  • Dynamic Rigidbody 2D :受重力和力的作用,最消耗资源,具有互动性
  • Kinematic Rigidbody 2D:不受重力和力的作用,相对节约资源,仅仅只和Dynamic Rigidbody 2D有互动性(变现得像一个具有无限质量的物体)。(勾选Trigger或勾选Use Full Kinematic Contacts是两回事,别弄混了)
  • Static Rigidbody 2D:消耗资源最少,仅和Dynamic Rigidbody 2D有互动性(变现得像一个具有无限质量的物体)
就是这样,我还会回来的!.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容