Unity Physics 学习笔记第二章:配置刚体与碰撞器属性
前文展示了一个简单的 Hello World,本文将进一步介绍其中用到的 Physics Shape
和 Physics Body
这两个脚本的参数设置
这两个脚本其实都是 Authoring,它们会根据编辑器中设定的值为 Entity 相应地添加组件
Physics Shape
可以理解为碰撞体,能为 Entity 添加碰撞功能
寻常属性
在 Inspector 面板中,我们可以设置它的形状、大小、重心、材质、摩擦系数、恢复系数等属性
这些属性在主流物理引擎中十分常见,高中物理也都学过,就不细说了
Is Trigger
与 Raises Collision Events
如果勾选了 Is Trigger,碰撞体就不会与其他碰撞体产生物理碰撞,但是在碰撞体重叠时会产生碰撞事件
可以用来检测角色是否进入一个区域
而 Raises Collision Events
与 Is Trigger 类似,会产生碰撞事件,但是它能够与其他碰撞体产生物理碰撞
Collision Filter
Collision Filter
能屏蔽碰撞体与某些碰撞体的碰撞,也就是,只跟指定分组的 Physics Shape
发生碰撞
具有 32 个分组,一个碰撞体可以属于多个分组,并且可以指定与哪些分组发生碰撞
内部实现其实就是 uint,用位运算做判断
另外,碰撞查询也具有这个特性,例如发射射线或发射碰撞器等
Physics Body
Physics Body
使 Entity 具有运动的能力
寻常的属性
在 Inspector 面板中,我们可以看到质量、重力系数、线性阻尼、角度阻尼等,基本上也是高中物理
Motion Type
Dynamic
,动态。普通的可以运动的刚体,根据质量计算碰撞后的运动状态Kinematic
,运动学。可以运动的刚体,可以理解为质量无穷大的 Dynamic 刚体,看起来就是能把其他普通 Dynamic 刚体弹开,自己不受碰撞的影响。可以用于电梯Static
,静态。无法运动的刚体,可以理解为质量无穷大
质量分配
勾选 Override Default Mass Distribution
以手动配置重心与惯性张量
复合碰撞体
多个不同的 Physics Shape
可以组合到一起
个人猜测应该就是把多个碰撞体整合为一个碰撞体,最终组件数量不会变
但并不是,验证后发现每个带有 Physics Shape
的 GameObject 都转化为了 Entity,然后用 Parent
组件跟父组件捆起来,感觉是 Unity 偷懒了
因此为了效率,可以把用作静态碰撞体的所有模型在导入 Unity 之前先合并为同一个模型。不要在 Unity 里蛇皮操作
根据官方手册,可以这样操作
在 Hierarchy 面板中将多个具有 Physics Shape
的子 GameObject 挂在一个具有 Physics Body
的父 GameObject 下
注意,只有父 GameObject 拥有 Convert to Entity
组件,子 GameObject 不需要