GameObject
游戏中每个对象都是GameObject,但GameObject本身不作任何事,GameObject是一个容器,包含的组件使得每个GameObject不同。
Transform
Transform组件决定了每个对象的Position,Rotation,和Scale,每个对象必定有一个Transform组件。如果没有Transform组件,那么GameObject就不会出现在游戏世界中, 导致GameObject的其他属性只是内存中的数据,没有作用。
其中一个Transform的position, rotation 和scale的值都是相对于其父亲GameObject的Transform来说的,如果没有父亲,那么就是相对世界坐标来说的。
Collider
Collider是一个组件,它允许添加了Collider的对象能够作用于有rigidbody组件的对象的Collider
collider 有不同的形状和类型,在场景中它们用绿线表示。它们的形状可以是球,胶囊或者是盒子。如果你想需要更复杂的形状,你可以结合简单的形状,或者是使用 mesh collider。
当游戏引擎中碰撞发生,且两个对象其中之一拥有rigidbody组件,OnCollisionEnter 被调用。
Colliders as Triggers
为了让一个collider成为trigger, 我们只需在collider组件下勾选Is Trigger。当一个collider成为trigger,就不会和其他东西碰撞。其他东西会穿过collider,并且可以被代码检测到, 如 OnTriggerEnter, OnTriggerStay, OnTriggerExit。
和标准的碰撞一样,两个对象必须有一个拥有rigidbody组件。确认你的trigger collider是静态对象,是一个标准的做法,这意味着它们不会因为物理引擎而移动。
Rigidbody
如果你要在游戏中移动你的对象,你需要令这些对象是rigidbody对象,rigidbody组件允许添加它的对象受到物理引擎的影响。
它允许对象受重力影响掉落,拥有物理属性,比如质量(mass),阻力(drag),和速度(velocity)。
对于基于物理的交互,rigidbody是必须的(比如让它受重力影响)。而且对象必须还要有collider,用于和其他物理对象交互。
Rigidbody有许多选项:
- Mass
质量影响碰撞时候的表现,质量大的物体受撞击的影响小于质量小的物体。 - Drag
阻力影响碰撞后静止的快慢。 - Angular Drag
- Use Gravity
是否受重力影响,重力加速默认是现实世界的 9.8 ,但你可以改变重力的大小和方向。 - Is Kinematic (影响rigidbody是否受物理影响 )
在场景开始的时候,所有的静态对象,即任何非rigidbody对象,会被物理引擎标记一次,并且为了追求效率,不再标记它们。然而当你移动一个静态对象的时候,为了准确性,物理引擎会标记所有的静态对象,这个代价很昂贵。为了避免这个情况,Kinematic rigidbody 对象可以通过它们的transform被使用和移动。你可以拥有能影响其他对象的对象,且不被其他对象影响。而且不需要重新计算其他静态对象。 - Interpolate
用来解决抖动问题。 - Collision Detection
- Constraints