Unity Physics 学习笔记第五章:核心组件详解
在编辑器为 GameObject 挂载 Physics Body
和 Physics Shape
这两个 Authoring 脚本会为转化出的 Entity 添加很多个组件
这些组件直接影响物理引擎中的运动、碰撞等计算,也能够被我们写的 System 获取或修改
接下来本文依照官方手册对他们进行介绍
PhysicsCollider
储存的是指针,在物体运动导致的碰撞或者碰撞查询时会用到
除了碰撞体的形状大小之外,它还包括摩擦系数与恢复系数等材质信息,Is Trigger
与 Raises Collision Events
,MassProperties
,当然还有 Collision Filter
另外,如果被设为空指针,引擎依然会模拟它的 Physics Body
,但它将不会触发任何碰撞。可以特殊用途,比如把空指针的碰撞体用关节连起来以模拟蒙皮
PhysicsVelocity
包括线速度和角速度
每一帧,引擎会根据重力以及来自其他碰撞体或关节的力计算新的速度,然后根据速度计算新的 Transform
而我们也可以使用代码修改这个组件,覆盖掉引擎计算的速度。可以实现匀速运动或施加冲量等效果
PhysicsMass
跟编辑器中的质量分布对应
包括重心,惯性张量等
值得注意的是,部分属性会以逆元的形式存储,这可以加速内部物理计算。另外可以通过将部分属性值设为 0 以表示无穷大
而且可以不需要对它手工赋值,因为碰撞体的 ICollider
接口有一个 MassProperties
属性,可以根据它进行缩放近似地实现想要的效果
PhysicsGravityFactor
它规定了重力系数
跟编辑器中一样
PhysicsDamping
包括线性阻尼和角度阻尼
跟编辑器中一样
PhysicsStep
是一个全局的组件,只能有一个
可以用于设置重力的方向大小,SolverIterationCount
等
SolverIterationCount
,求解迭代次数。如果关节震荡或行为怪异,可以通过提高该值以改善,当然这会降低性能
PhysicsJoint
这个组件是关节,属性包括关节连接的两个 Entity,关节类型与参数,以及这两个 Entity 是否会发生碰撞
然后与 PhysicsCollider
类似,关节的类型与参数以指针形式存储,可能因为内部有 Constraint
的动态数组
并且 Unity 提供了许多类型的关节,以及用于创建它们的静态函数。手册上说后续还会添加其他类型
至于目前有哪些类型可以查阅官方手册
链接在这里