刚体?
在任何力的作用下,体积和形状都不发生改变的物体叫做“刚体”(Rigid body)。
它是力学中的一个科学抽象概念,即理想模型。
事实上任何物体受到外力,不可能不改变形状。
实际物体都不是真正的刚体。
-
什么是刚体?
- rigidbody刚体是, 使GameObject游戏对象具有物理行为的主要组件.
- 附着了刚体的GameObject, 将立刻受到重力的影响.
- 如果GameObject还添加了一个或多个Collider组件,
GameObject将通过传入的碰撞来进行移动. - 附加了Rigidbody刚体组件的游戏对象,
不能通过更改Transform属性(如位置和旋转)来移动.
而应该从脚本开控制移动.
应该使用power力来推动GameObject,让物理引擎计算结果. - 在某些情况下,可能希望GameObject拥有刚体,而不受物理引擎的控制.
例如,您可能希望直接从脚本代码控制字符,但仍允许其由触发器检测. ("有点难懂,待续") - 这种从脚本产生的非物理运动称为运动学上的运动。
- Rigidbody刚体组件具有称为Is Kinematic("运动学(上)的")的属性,
将GameObject从物理引擎的控制中移除,并允许其从脚本运动地移动 - 可以从脚本中更改Is Kinematic的值,以允许对象打开和关闭物理,
但这伴随着性能开销,应该谨慎使用
Sleeping 睡眠
当刚体移动比定义的最小线性或旋转速度慢时,物理引擎假定它已经停止。
当这种情况发生时,GameObject不会再次移动,直到它收到碰撞或强制,
因此它被设置为“睡眠”模式。
这种优化意味着在下一次“唤醒”之前(也就是重新设置运动),
不会花更新Rigidbody的处理器时间
在大多数情况下,Rigidbody组件的睡眠和醒来都是透明的。
但是,如果静态对撞机(即没有Rigidbody的一个)被移动到其中或通过修改Transform位置,
则GameObject可能无法唤醒。这可能就是说,当Rigidbody GameObject挂在空中时,
地板被从下面移出。在这种情况下,可以使用该WakeUp函数明确地唤醒GameObject
刚体(Rigidbody)是Unity物理引擎中的重要组件,
一个游戏对象添加了刚体组件以后就开始接受物理力学的影响了,比如重力、空气摩擦力、碰撞产生的推力。
在添加刚体组件之前,游戏对象的移动受Transform组件控制,
在添加刚体组件之后,对象的运动就被刚体组件所接管了,对象的状态只能通过施加力来实现。
少数情况下,你可能想在脚本中控制一个添加了刚体组件的对象的运动状态,
但却不是通过施加力的方式,有一种方法可以实现,就是在刚体组件中勾选is kinematic。
启用了kinematic后,刚体组件就应该被称为运动学刚体了,刚体因此而失去了对物理力学的影响,比如说不再受重力的影响,不在碰撞力下移动。好处是这个对象能够触发碰撞函数,坏处是产生了一些额外的性能开销。
当刚体的移动速度接近于0时,刚体会进入“睡眠模式”,降低性能开销。
当刚体受到力的影响而再次移动时,刚体会被“唤醒”。在某些特殊情况下可以使用唤醒函数唤醒刚体。
在给一个对象添加对撞机(Collider)组件后,可以根据对象是否有刚体组件以及刚体组件的配置情况划分为三种类型。
静态对撞机:一个对象有对撞机组件,没有刚体组件。
刚体对撞机:一个对象有对撞机组件,而且有刚体组件。
运动学刚体对撞机:一个对象有对撞机组件,有刚体组件,而且勾选了is kinematic。
共同学习,写下你的评论
评论加载中...
作者其他优质文章