Unity-2D物理

2D刚体(Rigidbody 2D)

2D中,物体只能在XY平面中移动,并且只能绕Z轴旋转。

刚体2D组件。根据您选择的"主体类型",Unity Editor中的显示方式会有所不同。

2D刚体的工作原理

通常,Unity EditorTransform组件定义了GameObject(及其子对象GameObject)在场景中的位置,旋转和缩放方式。当它被更改时,它会影响其他组件,这些组件可能会更新它们所呈现的位置或者对齐框架位置的位置。2D物理引擎能够移动碰撞器并使它们相互作用,因此物理引擎需要一种方法来将碰撞器的这种相互作用回到Transform部件。与碰撞器的运动相联系, Rigidbody 2D部件的是一个用途。

Rigidbody 2D组件会覆盖Transform并将其更新为由Rigidbody 2D定义的位置和旋转。请注意,虽然您仍然可以通过自己修改Transform组件来覆盖Rigidbody 2D的行为(因为Unity公开了所有组件上的所有属性),但这样做会可能会导致不可预测的移动。

在相同的GameObject或子GameObject中添加的任何碰撞2D组件都隐附于该刚体2D。当一个对撞机2D被连接到2D刚体时,它随之移动。不应该直接使用转换或任何对撞偏移;应该移动刚体2D。这提供了最好的性能,并确保了正确的碰撞检测。连接到相同刚体二维的2D碰撞碰撞器不会相互碰撞。这意味着你可以制造一组碰撞,有效地作为一个单一的复合碰撞器,所有的移动和旋转与刚体2D同步。

提示

通过使用来自脚本API的力量,刚体2D允许Sprite以一种物理上令人信服的方式移动。当适当的碰撞组件也附加到Sprite GameObject时,它会受到与其他移动游戏对象的碰撞的影响。使用物理简化了许多常见的游戏机制,并允许以最小的编码实现真实的行为。

体型(Body Type)

刚体2D组件在顶部标记了体型设置。您选择的选项会影响组件上可用的其他设置。

体型有三种选择;每个定义了一个公共和固定的行为。任何与刚体2D相连的2D碰撞器都继承了刚体二维的体型。这三个选项

  • 动态的
  • 运动的
  • 静态的

    您选择的选项将定义:

  • 运动(位置和旋转)的行为
  • 对撞机互动

    注意,尽管刚体2D经常被描述为相互碰撞,但碰撞需要有2D碰撞器。刚体2D不能在没有碰撞器的情况下相互碰撞。

    注意:除非必要,请不要要随意在运行时改变刚体的体型,这将十分耗费性能.

    体型:动态的(Dynamic)

    一个动态刚体2D设计仿真环境下移动。它具有可用的全部属性,如有限质量和阻力,并受重力和外力的影响。动态的体型会与其他体型相冲突,并且是体型中最具有互动性的。这是Rigidbody 2D的默认身体类型,因为它是需要移动的物体时最常见的体型。它也是性能要求最高的体型,因为它对周围的一切都具有互动。所有刚体2D属性都可用于这种身体类型。

    :不要使用转换组件来设置动态刚体2D的位置或旋转。根据其速度,对动态刚体二维进行物理仿真。你可以通过脚本,或者通过碰撞和重力间接地改变它。

    属性:

    功能:

    体型

    (Body Type)

    设置RigidBody 2D组件类型,以便您可以操纵移动(位置和旋转)行为和对撞机2D交互。
    选项有:动态动态静态

    材质

    (Material)

    使用它来指定连接到特定母体Rigidbody 2D的所有对撞机2D的常用材质。
    注意:
    对撞机2D使用以下优先顺序来确定要使用的材料设置:
    1.
    在对撞机2D本身上指定的物理材料2D
    2.
    附加的刚体2D上指定的物理材料2D

    模拟

    (Simulated)

    如果你想刚体二维和任何附加的对撞机2D和关节2D与物理仿真运行。如果禁用此功能(此框未选中),则这些组件不与模拟交互。

    使用自动质量

    (Use Auto Mass)

    如果您希望Rigidbody 2D自动从其对准器2D中检测到GameObject的质量,请选中此框。

    质量

    (Mass)

    定义刚体2D的质量。如果您选择使用自动质量,则显示为灰色。

    线性阻力

    (Linear Drag)

    阻力系数影响位置运动。

    角阻力

    (Angular Drag)

    阻力系数影响旋转运动。

    重力缩放

    (Gravity Scale)

    定义GameObject受重力影响的程度。

    碰撞检测

    (Collision Detection)

    定义检测到对撞机2D之间的碰撞。

            离散

    (Discrete)

    当您将碰撞检测设置为离散时,如果物体运动速度足够快,具有刚体2D和对撞机2DGameObject可以在物理更新期间重叠或相互穿过。碰撞触点仅在新位置产生。

            连续

    (Continuous)

    碰撞检测设置为连续时,具有刚体2D和对撞机2DGameObject在更新期间不会彼此通过。相反,Unity计算任何对撞机2D的第一个撞击点,并将GameObject移动到那里。请注意,这需要比离散耗费更多的CPU时间。

    睡眠模式

    (Sleeping Mode)

    定义GameObject在休息时如何"睡觉"以节省处理器时间。

            从不睡觉

    ( Never Sleep)

    睡眠被禁用(尽可能避免这种情况,因为它会影响系统性能)。

            开始唤醒

    ( Start Awake)

    GameObject初始化时唤醒。

            开始睡着

    ( Start Asleep)

    GameObject初始化时是睡着的,但可以被碰撞唤醒。

    插值

    (Interpolate)

    定义GameObject的移动在物理更新之间进行插值(当运动趋于剧烈时有用)。

            没有(None)

    不应用运动平滑法。

            插值(Interpolate)

    基于GameObject在先前帧中的位置,使运动平滑。

            推断(Extrapolate)

    根据对下一帧中位置的估计,使运动平滑。

    约束(Constraints)

    定义对刚体2D动作的限制。

    冻结位置

    (Freeze Position)

    选择性地停止在世界XY轴上移动的刚体2D

    冻结旋转

    (Freeze Rotation)

    停止围绕Z轴旋转的刚体2D

    身体类型:运动的(Kinematic)

    运动刚体2D设计在模拟下移动,必须在非常明确的用户控制下才能进行。虽然动态刚体2D受到重力和力的影响,但运动刚体 2D不是。因此,与动态Rigidbody 2D 相比,它会更快,系统资源需求更低。运动刚体 2D设计为通过Rigidbody2D.MovePositionRigidbody2D.MoveRotation显式重新定位。使用物理查询来检测碰撞,以及脚本来决定Rigidbody 2D应该在何处以及如何移动。

    一个运动刚体二维仍然通过它的速度运动,但速度不受力或重力的影响。运动刚体2D不会与其他运动刚体2D或静态刚体2D发生碰撞,它只与动态刚体2Ds碰撞.类似于静态刚体2D(参见下文),运动刚体 2D在碰撞期间表现得像不可移动的物体(好像它具有无限质量)。与质量相关的属性无法使用这种体型。

    属性:

    功能:

    使用全动态触点

    (Use Full Kinematic Contacts)

    如果您希望运动刚体 2D与所有刚体 2D体型相撞,请启用此设置(勾选框)。这类似于动态刚体 2D,但是当接触另一个刚体2D部件时,运动刚体 2D不被物理引擎移动相反,它作为一个不可移动的对象,具有无限的质量。当使用全动态触点禁用时,运动刚体 2D仅与动态刚体 2D相冲突。默认情况下,此框不被选中。

    体型:静态的(Static)

    静态刚体2D的设计在模拟的情况下不移动时使用;如果有任何与它碰撞的东西,一个静止的刚体2D就像一个不可移动的物体(好像它有无限的质量)。它也是最不消耗资源的身体类型。静态体只与动态刚体2D碰撞。有两个静态刚体2D的碰撞是不受支持的,因为它们不是为了移动而设计的。

    将刚体2D标记为静态有两种方法:

  1. 对于具有对撞机2D组件的GameObject,根本不具有Rigidbody 2D组件。所有这些对撞机2D在内部被认为附加到单个隐藏的静态刚体2D部件。
  2. 使GameObject具有刚体2D,并将刚体2D设置为静态

    方法1是制作静态对撞机2D 的捷径。当创建大量的静态对撞机2D时,不必为每个具有对撞机2DGameObject添加刚体2D

    出于性能原因还是推荐使用方法2

    注意:如上所述,静态刚体2D设计为不移动,并且两个相互交叉的静态刚体2D对象之间的碰撞未被注册。然而,如果一个碰撞点被设为触发器(Trigger),静态刚体2Ds和运动刚体2Ds将相互作用.

    刚体2D属性

    模拟(Simulated)

    使用模拟属性来停止(未检查)和开始(检查)一个刚体2D和任何附加的碰撞2D和关节2D2D物理模拟的交互。更改此属性比启用或禁用单独的碰撞器2D和铰链2D组件要更有内存和处理器效率。

    当选中模拟框时,会发生以下情况:

  • 刚体2D通过模拟运动(重力和物理力被应用)
  • 任何附加的对撞机2D继续创建新的联系人,并不断重新评估联系人
  • 任何连接的关节2D被模拟并约束附接的刚体2D
  • Rigidbody 2D的所有内部物理对象,对撞机2D和联合2D都保留在内存中

    模拟框被取消选中时,会发生以下情况:

  • Rigidbody 2D不受模拟的影响(重力和物理力不被应用)
  • 刚体2D不会创建新的联系人,任何附加的对撞机2D联系人都将被销毁
  • 任何附加的关节2D都不被模拟,并且不限制任何连接的刚体2D
  • Rigidbody 2D,对撞机2D和铰链2D的所有内部物理对象都留在内存中

    物理材质2D(Physics2D Material)

    物理材料2D是用来调整时发生碰撞时发生2D物理对象之间的摩擦和反弹。您可以从资产菜单(Assets > Create > Physics2D Material)创建物理材料2D 

    属性

    属性:

    功能:

    摩擦

    (Friction)

    这种碰撞机的摩擦系数。

    反弹力

    (Bounciness)

    碰撞从表面反弹的程度。值为0表示不反弹,值为1表示完全弹跳而不损失能量。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值