刚体是物理系统中用于帮助我们进行模拟物理碰撞中力的效果的
2D 物理系统中的刚体和 3D 中的刚体基本是一样的,最大的区别是对象只会在 XY 平面中移动,并且只在垂直于该平面的轴上旋转
不同于 3D 刚体,2D 刚体具有以下三种类型:
物体会受到力的影响移动和旋转
Material:物理材质
在刚体上设置了物理材质,若子物体有碰撞器但是没有设置材质,则会用刚体的物理材质
如果不设置,则将使用在 Physics 2D 窗口中设置的默认材质
物理材质使用的优先级:2D 碰撞器 >
2D 刚体 >
Physics 2D 窗口
Simulated:子物体模仿,默认开启即可
如果希望 2D 刚体以及所有子对象 2D 碰撞器和 2D 关节都能模拟物理效果,则需要启用该选项
Use Auto Mass:是否使用自动质量
Mass:质量
Linear Drag:影响位置移动的阻力系数
Angular Drag:影响旋转移动的阻力系数
Gravity Scale:受重力影响的程度
Collision Detection:碰撞检测算法
Sleeping Mode:对象处于静止状态时进入睡眠模式
Interpolate:物理更新间隔之间的插值运算
Constrains:约束限制,可以让某一个轴不受力影响位移或者旋转
Info:显示的物理信息,仅可查看不可修改
不受力的影响,只能通过代码让其动起来
能和 Dynamic 2D 刚体产生碰撞,但是不会动,只会进入碰撞检测函数,因此没有质量、摩擦系数等属性
性能消耗较低,主要是使用代码处理移动和旋转
Material:物理材质
在刚体上设置了物理材质,若子物体有碰撞器但是没有设置材质,则会用刚体的物理材质
如果不设置,则将使用在 Physics 2D 窗口中设置的默认材质
物理材质使用的优先级:2D 碰撞器 >
2D 刚体 >
Physics 2D 窗口
Simulated:子物体模仿,默认开启即可
如果希望 2D 刚体以及所有子对象 2D 碰撞器和 2D 关节都能模拟物理效果,则需要启用该选项
当启用时,会充当一个无限质量的不可移动的对象,可以和所有 2D 刚体产生碰撞
若 Use Full Kinematic Contacts 被禁用,则只会和 Dynamic 2D 刚体碰撞
Use Full Kinematic Contacts:充分使用运动学接触
如果希望能和所有 2D 刚体碰撞,则启用该选项
若不启用,则不会和 Kinematic 2D 和 Static 2D 刚体碰撞
Collision Detection:碰撞检测算法
Sleeping Mode:对象处于静止状态时进入睡眠模式
Interpolate:物理更新间隔之间的插值运算
Constrains:约束限制,可以让某一个轴不受力影响位移或者旋转
Info:显示的物理信息,仅可查看不可修改
完全不动的需要检测碰撞的对象,相当于时无限质量不可移动的对象,性能消耗最小,只能和 Dynamic 2D 刚体碰撞
和它类似的有只加碰撞器而不加刚体的物体,它们会和刚体物体产生碰撞,但是自己不会动
总结:
Dynamic 动态刚体:受力的作用,要动要碰撞的对象
Kinematic 运动学刚体:通过刚体 API 移动的对象,不受力的作用,但是想要进行碰撞检测
Static 静态刚体:不动不受力作用的静态物体,但是想要进行碰撞检测
代码示例:
// 加力
Rigidbody2D rigid = this.GetComponent();
rigid.AddForce(new Vector2(0, 100));
// 速度
rigid.velocity = new Vector2(1, 0);
碰撞器是用于在物理系统中表示物体体积的的(形状或范围),刚体通过得到碰撞器的范围信息进行计算,判断两个物体的范围是否接触,如果接触刚体就会模拟力的效果产生速度和旋转
Editor Collider:碰撞器编辑器
Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性
Is Trigger:是否为触发器
Used By Effector:是否被附加到 2D 效应器使用
Used By Composite:是否被附加到 2D 复合碰撞器中使用
勾选后,将会消失一些属性,这些属性将在复合碰撞器中设置
Auto Tilling:如果精灵渲染器组件中的 Draw Mode 设置为 Tiled,勾选该选项后,当改变精灵大小时将自动更新碰撞器的尺寸
Offset:中心偏移位置
Size:矩形宽高
Edge Radius:使四个顶点为圆角
Editor Collider:碰撞器编辑器
Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性
Is Trigger:是否为触发器
Used By Effector:是否被附加到 2D 效应器使用
Used By Composite:是否被附加到 2D 复合碰撞器中使用
勾选后,将会消失一些属性,这些属性将在复合碰撞器中设置
Auto Tilling:如果精灵渲染器组件中的 Draw Mode 设置为 Tiled,勾选该选项后,当改变精灵大小时将自动更新碰撞器的尺寸
Offset:中心偏移位置
Points:多边形顶点
边界碰撞器一般不会手动通过数值加点,主要还是通过 Edit Collider
复合碰撞器会将其子物体所有的碰撞器合并在一起,得到一个新的碰撞器
复合碰撞器必须配合刚体使用
碰撞检测函数:
private void OnCollisionEnter2D(Collision2D collision) { }
private void OnCollisionExit2D(Collision2D collision) { }
private void OnCollisionStay2D(Collision2D collision) { }
private void OnTriggerEnter2D(Collider2D collision) { }
private void OnTriggerExit2D(Collider2D collision) { }
private void OnTriggerStay2D(Collider2D collision) { }
物理材质是用于决定在物体产生碰撞时这些物体之间的摩擦和弹性表现的
通过物理材质我们可以做出类似斜坡不滑落,小球反弹等效果
四、恒定力 Constant Force 2D
恒定力是一个特殊的脚本,它可以给一个 2D 刚体持续添加一个力
在做一些随着时间推移而加速的对象时很适用,比如类似火箭发射等效果
恒定力脚本会线性的为对象添加力和扭矩力,让其移动和旋转
2D 效应器是配合 2D 碰撞器一起使用的,可以让游戏对象在相互接触时产生一些特殊的物理作用力
可以通过 2D 效应器快捷地实现一些传送带、互斥、吸引、漂浮、单向碰撞等等效果
使用效应器需要同时添加 Effector 2D 和 Collider 2D 组件,并且把 Used By Effector 和 Is Trigger 都勾选上
主要作用:在一个区域内让游戏对象受到力和扭矩力的作用
Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask
可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体
Collider Mask:碰撞器遮罩层
Use Global Angle:勾选将使用世界坐标系的角度,如果不勾选,角度为局部角度
Force Angle:施加力的角度
Force Magnitude:施加力的大小
Force Variation:施加力的随机大小变化,会在 Force Magnitude 基础上根据该值进行随机变化
Force Target:效应器在目标对象上施加力的作用点
Drag:阻力
Angular Drag:扭矩阻力
主要作用:模拟流体行为,浮动和阻力相关设置,让玩家在该区域看起来像在水里移动
Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask
可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体
Collider Mask:碰撞器遮罩层
Density:流体密度
碰撞体密度大,则碰撞体会下沉;密度小,则碰撞体会上浮
密度和流体相同的碰撞体会浮在流体中
Surface Level:定义浮力流体的表面位置
对象高于此线时,不会对其施加浮力;低于或相交此线时,会施加浮力,沿世界坐标的 Y 轴偏移
Linear Drag:阻力
Angular Drag:扭矩阻力
Flow Angle:流体流动方向相对世界空间的角度,将会沿指定方向施加浮力
Flow Magnitude:与 Flow Angle 结合使用,该值决定浮力的大小
Flow Variation:随即改变流体的力的大小值
主要作用:模拟类似磁铁吸引或排斥的效果
Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask
可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体
Collider Mask:碰撞器遮罩层
Force Magnitude:施加力的大小
Force Variation:施加力的随机大小变化,会在 Force Magnitude 基础上根据该值进行随机变化
Distance Scale:效应器和目标之间距离的缩放,计算距离时,会按照该比值对距离进行缩放
Force Target:效应器在目标对象上施加力的作用点
Force Mode:计算力的模式
Drag:阻力
Angular Drag:扭矩阻力
主要作用:2D 游戏当中的平台或可往上跳跃的墙壁
这里的 Collider 不需要勾选 Is Triiger,因为是平台
Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask
可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体
Collider Mask:碰撞器遮罩层
Rotational Offset:旋转偏移量,控制平台角度偏移
Use One Way:是否使用单向碰撞行为
Use One Way Grouping:当平台是有多个碰撞器组合时,可以通过它将所有碰撞器设置为单向碰撞行为
Surface Arc:以局部坐标系从下向上的方向为中心,填写一个角度值,定义不允许通过的表面,该角度外的其他地方视为单向碰撞
Use Side Friction:是否在平台两侧使用摩擦
Use Side Bounce:是否在平台两侧使用弹性
Side Arc:用于定义左右两侧平台的相应弧度
主要作用:模拟传送带
这里的 Collider 不需要勾选 Is Triiger,因为是表面
Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask
可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体
Collider Mask:碰撞器遮罩层
Speed:表面保持的速度
Speed Variation:速度的随机增加值
Force Scale:缩放沿表面移动时施加的力
0 表示不施加力,相当于禁用,值越低越慢,值越高越快
不建议设置为 1,因为这可能会抵消施加在物体的其他里,比如跳跃起来的力
Use Contact Force:是否对接触物体表面的接触点施加力
如果选择则会让物体旋转,如果不选择则不会旋转
Use Friction:是否使用摩擦
Use Bounce:是否使用弹力