在编辑器为 GameObject 挂载 Physics BodyPhysics Shape 这两个 Authoring 脚本会为转化出的 Entity 添加很多个组件

这些组件直接影响物理引擎中的运动、碰撞等计算,也能够被我们写的 System 获取或修改

接下来本文依照官方手册对他们进行介绍

PhysicsCollider

储存的是指针,在物体运动导致的碰撞或者碰撞查询时会用到

除了碰撞体的形状大小之外,它还包括摩擦系数与恢复系数等材质信息,Is TriggerRaises Collision EventsMassProperties,当然还有 Collision Filter

另外,如果被设为空指针,引擎依然会模拟它的 Physics Body,但它将不会触发任何碰撞。可以特殊用途,比如把空指针的碰撞体用关节连起来以模拟蒙皮

PhysicsVelocity

包括线速度和角速度

每一帧,引擎会根据重力以及来自其他碰撞体或关节的力计算新的速度,然后根据速度计算新的 Transform

而我们也可以使用代码修改这个组件,覆盖掉引擎计算的速度。可以实现匀速运动或施加冲量等效果

PhysicsMass

跟编辑器中的质量分布对应

包括重心,惯性张量等

值得注意的是,部分属性会以逆元的形式存储,这可以加速内部物理计算。另外可以通过将部分属性值设为 0 以表示无穷大

而且可以不需要对它手工赋值,因为碰撞体的 ICollider 接口有一个 MassProperties 属性,可以根据它进行缩放近似地实现想要的效果

PhysicsGravityFactor

它规定了重力系数

跟编辑器中一样

PhysicsDamping

包括线性阻尼和角度阻尼

跟编辑器中一样

PhysicsStep

是一个全局的组件,只能有一个

可以用于设置重力的方向大小,SolverIterationCount

SolverIterationCount,求解迭代次数。如果关节震荡或行为怪异,可以通过提高该值以改善,当然这会降低性能

PhysicsJoint

这个组件是关节,属性包括关节连接的两个 Entity,关节类型与参数,以及这两个 Entity 是否会发生碰撞

然后与 PhysicsCollider 类似,关节的类型与参数以指针形式存储,可能因为内部有 Constraint 的动态数组

并且 Unity 提供了许多类型的关节,以及用于创建它们的静态函数。手册上说后续还会添加其他类型

至于目前有哪些类型可以查阅官方手册
链接在这里