Unity - 2D物理系统
PS: 通用属性放在每一章最前面,每个组件只介绍特殊属性;
1.1 2D刚体(Rigidbody 2D)
属性 | 描述 |
---|---|
Body Type | Dynamic(动力学): 适用于需要移动并且接受完全物理模拟的2D刚体,包括重力、碰撞和施加力等影响; Kinematic(运动学): 适用于需要移动但不受物理力作用的2D刚体; **Static(静态):**适用于不需要移动的2D刚体,它们作为游戏中的静态环境或障碍物存在; |
Material | 可装载 2D 物理材质; |
Simulated | 勾选后开启物理模拟; |
Use Auto Mass | 勾选后根据碰撞体大小自动生成质量,并禁止手动设置质量; |
Mass | 设置对象的质量; |
Linear Drag | 影响位置移动的阻力系数; |
Angular Drag | 影响旋转移动的阻力系数; |
Gravity Scale | 定义游戏对象受重力影响的程度; |
Collision Detection | Discrete(离散模式): 只有真正触碰到才触发碰撞事件; **Continuous(连续模式):**连续检测会对整个路径都进行检测,一般用于解决子弹速度过快穿过目标的情况; |
Sleeping Mode | Never Sleep(禁用睡眠): 刚体一直启用; Start Awake: 对象在最初时刚体处于启用状态; **Start Asleep:**对象最初时刚体处于睡眠状态,但可以被碰撞唤醒; |
Interpolate | None: 不应用移动平滑; Interpolate: 根据对象在先前帧中的位置来平滑移动; **Extrapolate:**根据对象在下一帧中的估计位置来平滑移动。 |
Constraints | Freeze Position(冻结位置): 可以通过勾选取消 X 和 Y 轴的移动; **Freeze Rotation(冻结旋转):**可以通过勾选取消 Z 轴的旋转; |
1.2 2D 碰撞体
2D 碰撞体类别 | 说明 |
---|---|
Circle Collider 2D | 圆形碰撞体 |
Box Collider 2D | 盒子(矩形)碰撞体 |
Polygon Collider 2D | 多边形碰撞体 |
Edge Collider 2D | 线段(边界)碰撞体 |
Capsule Collider 2D | 胶囊碰撞体 |
Composite Collider 2D | 复合碰撞体 |
通用属性
属性 | 描述 |
---|---|
Material | 可装载 2D 物理材质; |
Is Trigger | 勾选后标记为触发器,触发器没有物理状态; |
Used By Effector | 勾选后启用效应器; |
Used By Composite | 勾选后合并到复合碰撞体 |
Auto Tiling | 自适应碰撞器大小; |
Offset | 根据 X 、Y 轴对碰撞体进行偏移; |
Size | 根据 X 、Y 轴对碰撞体进行缩放 |
Edge Radius | 默认为 0 ,可以增加碰撞体积,且值越大边缘越近似圆; |
Auto Tiling | 自适应碰撞器大小; |
Polygon Collider 2D
属性 | 描述 |
---|---|
Points | Paths - Size: 碰撞体数量; Paths - Element m: 对应第 m+1 个碰撞体; Paths - Element m - Size: 第 m+1 个碰撞体点的数量; **Paths - Element m - Element n:**第 m+1 个碰撞体的第 n+1 个点,X、Y 表示坐标位置; |
Edge Collider 2D
属性 | 描述 |
---|---|
Points | Size: 点的数量; **Element n:**对应第 n+1 个点,X、Y 表示坐标位置; |
Use Adjacent Start Point | 启用后开启起点碰撞法线,X、Y 表示坐标位置; |
Use Adjacent End Point | 启用后开启终点碰撞法线,X、Y 表示坐标位置; |
Capsule Collider 2D
属性 | 描述 |
---|---|
Direction | Vertical: 碰撞体的垂直高度大于等于水平高度; **Horizontal:**碰撞体的水平高度大于等于垂直高度; |
Composite Collider 2D
属性 | 描述 |
---|---|
Geometry Type | Outlines: 组合碰撞体时生成空心的轮廓; **Polygons:**组合碰撞体时生成实心的轮廓; |
Generation Type | Synchronous: 更改 2D 复合碰撞体时或者更改其任何成员碰撞体时立即自动生成新的碰撞体; **Manual:**更改 2D 复合碰撞体时或者更改其任何成员碰撞体时需要手动设置碰撞体; |
Vertex Distance | 设置从复合碰撞体中的顶点所允许的最小间距。低于限值的顶点将被删除; |
Offset Distance | 设置的数值增大,这个复合碰撞器的范围会向中心位置收缩,当增大到达一定数值后,这个复合碰撞器的范围会完全消失; |
碰撞检测脚本
c
using UnityEngine;
//碰撞器测试类
public class CollisionTest : MonoBehaviour
{
//碰撞开始
private void OnCollisionEnter2D(Collision2D collision)
{
Debug.Log("Enter");
}
//碰撞持续
private void OnCollisionStay2D(Collision2D collision)
{
Debug.Log("Stay");
}
//碰撞结束
private void OnCollisionExit2D(Collision2D collision)
{
Debug.Log("Exit");
}
}
//触发器测试类
public class TriggerTest : MonoBehaviour
{
//触发开始
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log("Enter");
}
//触发持续
private void OnTriggerStay2D(Collider2D collision)
{
Debug.Log("Stay");
}
//触发结束
private void OnTriggerExit2D(Collider2D collision)
{
Debug.Log("Exit");
}
}
1.3 Physics Material 2D(2D物理材质)
属性 | 描述 |
---|---|
Friction | 取值 0 - 1,增大该值增加物理摩擦力; |
Bounciness | 启用后开启起点碰撞法线,X、Y 表示坐标位置; |
Use Adjacent End Point | 碰撞从表面反弹的程度。值为 0 表示没有弹性,值为 1 表示完美弹性,没有能量损失; |
1.4 2D 恒定力 (Constant Force 2D)
属性 | 描述 |
---|---|
Force | 在世界坐标空间中应用的力的向量,X 为横向,Y 为纵向; |
Relative Force | 在本地坐标空间中应用的力的向量,X 为横向,Y 为纵向; |
Torque | 在世界坐标空间中应用的扭矩的向量,对象会围绕此向量开始旋转。此向量越长,旋转便越快; |
1.5 2D 关节
2D 关节类别 | 描述 |
---|---|
Hinge Joint 2D | 2D铰链关节 |
Distance Joint 2D | 2D距离关节 |
Fixed Joint 2D | 2D固定关节 |
Friction Joint 2D | 2D摩擦关节 |
Relative Joint 2D | 2D相对关节 |
Slider Joint 2D | 2D 滑动关节 |
Spring Joint 2D | 2D 弹簧关节 |
Target Joint 2D | 2D 目标关节 |
Wheel Joint 2D | 2D 车轮关节 |
通用属性
属性 | 描述 |
---|---|
Enable Collision | 勾选后允许两个连接的对象之间发生碰撞; |
Connected Rigid Body | 连接到的另一个刚体对象; |
Auto Configure Connected Anchor | 勾选后自动设置连接锚点位置; |
Anchor | 设置锚点位置; |
Connected Anchor | 设置连接锚点位置; |
Use Motor | 勾选后开启马达; |
Motor | Motor Speed: 指定马达速度; **Maximum Motor Force:**马达可以施加的最大扭矩; |
Use Limits | 勾选后启用角度限制; |
Angle Limits | Lower Angle: 最低角度; **Upper Angle:**最高角度; |
Break Force | 受到最大限制的力后断开,设置为 Infinity 表示不会因为力断开; |
Break Torque | 受到最大限制的扭矩后断开,设置为 Infinity 表示不会因为扭矩断开; |
Distance Joint 2D
属性 | 描述 |
---|---|
Auto Configure Distance | 勾选后自动设置距离; |
Distance | 手动指定距离; |
Max Distance Only | 勾选后 Distance 设置的值为对象的最大距离; |
Fixed Joint 2D
属性 | 描述 |
---|---|
Damping Ratio | 抑制弹簧振荡的程度,0 到 1 之间,值越大; |
Frequency | 控制弹簧的硬度,决定了对象振动频率; |
Friction Joint 2D
属性 | 描述 |
---|---|
Max Force | 降低对象线速度的力; |
Max Torque | 降低对象角速度的力; |
Relative Joint 2D
属性 | 描述 |
---|---|
Max Force | 能受到的最大力; |
Max Torque | 能受到的最大扭矩; |
Correction Scale | 确保关节的行为符合预期,默认为0.3; |
Auto Configure Offset | 自动设置偏移量; |
Linear Offset | 给定 X、Y 轴的线性偏移量; |
Angular Offset | 给定角偏移量; |
Slider Joint 2D
属性 | 描述 |
---|---|
Auto Configure Angle | 勾选后自动设置滑动角度; |
Translation Limits | Lower Translation: 滑动最小偏移量; **Upper Translation:**滑动最大偏移量; |
Auto Configure Distance | 勾选后自动设置距离; |
Distance | 给定弹簧的长度; |
Target Joint 2D
属性 | 描述 |
---|---|
Auto Configure Target | 自动设置目标点; |
Target | 给定一个目标点坐标; |
1.6 2D 效应器
2D 效应器类别 | 描述 |
---|---|
Area Effector 2D | 2D 区域效应器 |
Buoyancy Effector 2D | 2D 浮力效应器 |
Point Effector 2D | 2D 点效应器 |
Platform Effector 2D | 2D 平台效应器 |
Surface Effector 2D | 2D 表面效应器 |
通用属性
Drag: 线性阻力;
Angular Drag: 角阻力;
属性 | 描述 |
---|---|
Use Collider Mask | 使用碰撞遮罩过滤层级之间的碰撞,通过Collider Mask指定; |
Force | Use Global Angle: 勾选后使用全局角度; Force Angle: 施加力的角度; Force Magnitude: 施加力的大小; Force Variation: 力的大小浮动; **Force Target:**指定作用力的目标; |
Damping |
Buoyancy Effector 2D
属性 | 描述 |
---|---|
Density | 流体的密度,密度较大的碰撞体会下沉,密度较小的碰撞体会上浮; |
Surface Level | 浮力流体的位置,对象高于此线时,不会对其施加浮力。 |
Flow | Flow Angle: 水流角度; Flow Magnitude: 水流大小; **Flow Variation:**水流大小的浮动值; |
Point Effector 2D
属性 | 描述 |
---|---|
Force | Force Magnitude: 施加的力,负值为吸引力,正值为斥力; Force Variation: 力的大小浮动; Distance Scale: 效应器和目标之间距离的缩放,计算距离时,会按照该比值对距离进行缩放; Force Source: 力的源头,可选刚体或碰撞器; Force Target: 作用力的对象,可选刚体或碰撞器; **Force Mode:**Constant(忽略源和目标之间相隔的距离)、Inverse Linear(距离越远,力的大小呈线性减小)、Inverse Squared(力的大小按平方下降,类似现实世界重力); |
Platform Effector 2D
属性 | 描述 |
---|---|
Rotational Offset | 旋转偏移 |
One Way | Use One Way: 勾选后开启单向碰撞行为; Use One Way Grouping: 勾选此选项后,同一组的平台将共享同一个单向平台属性,可以方便批量设置; **Surface Arc:**定义一个弧的角度,用于单向碰撞; |
Sides | Use Side Friction: 勾选后开启平台两侧摩擦; Use Side Bounce: 勾选后开启平台两侧弹力; **Side Arc:**和 Surface Arc 类似,但是作用于平台的侧面; |
Surface Effector 2D
属性 | 描述 |
---|---|
Force | Speed: 沿表面保持的速度; Speed Variation: 随机加速度值,如果设置为负数则会随机减速; **Force Scale:**调整施加力的比例,最好不要设为1,不然会抵消掉跳跃移动等力; |
Options | Use Contact Force: 勾选后在表面和目标碰撞体之间的触点施力,可以使目标对象旋转; Use Friction: 勾选后开启摩擦力; **Use Bounce:**勾选后开启弹力; |