以下是 Unity Project Settings 中 Physics 2D 设置的完整汇总说明表格,适用于 2D 游戏开发:
| 设置分类 | 具体设置项 | 功能说明 | 推荐值/注意事项 |
|---|---|---|---|
| 基础参数 | Gravity | 2D世界重力加速度 | 默认 (0, -9.81) 平台游戏可设为 (0, -15) |
| Default Material | 默认2D物理材质 | 控制摩擦力和弹性 | |
| Velocity Iterations | 速度求解迭代次数 | 默认8,复杂场景增至12-15 | |
| Position Iterations | 位置求解迭代次数 | 默认3,精确碰撞可增至5-8 | |
| 碰撞检测 | Layer Collision Matrix | 2D层碰撞矩阵 | 控制哪些层可以相互碰撞 |
| Raycasts Hit Triggers | 射线检测触发器 | 默认开启,按需调整 | |
| Queries Start In Colliders | 查询始于碰撞体内 | 默认关闭,防止自碰撞 | |
| Auto Sync Transforms | 自动同步变换 | 默认关闭,开启影响性能 | |
| 物理材质 | Default Elasticity | 默认弹性系数 | 0-1,0无反弹,1完全反弹 |
| Default Friction | 默认摩擦系数 | 0-1,0无摩擦,1最大摩擦 | |
| 性能优化 | Always Show Colliders | 始终显示碰撞体 | 调试时开启,默认关闭 |
| Collider Awake On Load | 加载时唤醒碰撞体 | 默认开启,场景加载时激活 | |
| Collider Asleep On Start | 开始时休眠碰撞体 | 默认关闭,按需开启 | |
| Auto Simulation | 自动模拟物理 | 默认开启,可手动控制 | |
| 高级设置 | Velocity Threshold | 速度休眠阈值 | 默认0.1,低于此值休眠 |
| Max Linear Correction | 最大线性修正 | 默认0.2,解决穿透问题 | |
| Max Angular Correction | 最大角度修正 | 默认0.1,解决旋转穿透 | |
| Baumgarte Scale | 穿透修正系数 | 默认0.2,增大可减少穿透 | |
| Baumgarte TOI Scale | TOI穿透修正系数 | 默认0.75,连续碰撞用 | |
| Time To Sleep | 休眠等待时间 | 默认0.5秒,静止后休眠 | |
| Linear Sleep Tolerance | 线性休眠容差 | 默认0.005,可增大优化 | |
| Angular Sleep Tolerance | 角度休眠容差 | 默认0.005,可增大优化 |
关键设置详细说明
1. 迭代次数配置

2.物理材质参数
| 参数 | 作用 | 典型值 | 效果示例 |
|---|---|---|---|
| Friction | 表面摩擦 | 0.3-0.6 | 冰面=0.05,橡胶=0.8 |
| Bounciness | 弹性 | 0-1 | 篮球=0.8,铅球=0.1 |
| Friction Combine | 摩擦组合 | Average | 两物体摩擦系数计算方式 |
| Bounce Combine | 弹性组合 | Maximum | 两物体弹性系数计算方式 |
3. 休眠优化参数
// 代码控制休眠
Rigidbody2D rb = GetComponent<Rigidbody2D>();
rb.Sleep(); // 强制休眠
rb.WakeUp(); // 唤醒
最佳实践配置方案
平台游戏配置
- Gravity: (0, -15)
- Velocity Iterations: 10
- Position Iterations: 5
- Default Elasticity: 0.3 (角色轻微反弹)
物理谜题游戏配置
- Max Linear Correction: 0.3
- Baumgarte Scale: 0.3
- Velocity Iterations: 15
- Time To Sleep: 1.0 (延迟休眠)
常见问题解决
问题:2D物体穿透
解决方案:
- 增加
Position Iterations(5-8) - 调整
Max Linear Correction(0.2-0.5) - 检查碰撞体大小是否合理
- 使用
Rigidbody2D.interpolation
问题:性能低下
优化方案:
- 降低
Velocity Iterations(最低6) - 增加
Linear Sleep Tolerance(0.01-0.05) - 使用
Collider2D.usedByEffector禁用不必要碰撞 - 分区域禁用物理模拟:
Physics2D.simulationMode = SimulationMode2D.Script;
问题:反弹不稳定
调整方法:
- 统一物理材质
Bounce Combine为Average - 增加
Velocity Iterations - 限制最大反弹速度:
void OnCollisionEnter2D(Collision2D col)
{
if(col.relativeVelocity.magnitude > 10)
col.rigidbody.velocity *= 0.8f;
}
特殊组件设置
| 2D组件 | 关键参数 | 优化建议 |
|---|---|---|
| Rigidbody2D | gravityScale/collisionDetection | 重力比例按需调整 |
| Collider2D | offset/isTrigger | 简单形状性能更好 |
| Joint2D | breakForce/dampingRatio | 适当设置断裂力 |
| Effector2D | useColliderMask | 精确控制影响层 |
调试技巧
1.可视化碰撞框:
csharp
void OnDrawGizmos()
{
Gizmos.color = Color.green;
Gizmos.DrawWireCube(collider.bounds.center, collider.bounds.size);
}
2.实时修改参数:
csharp
#if UNITY_EDITOR
[Range(0.1f, 20f)] public float gravityScale = 1f;
void Update()
{
Physics2D.gravity = new Vector2(0, -9.81f * gravityScale);
}
#endif
3.性能分析:
csharp
void Start()
{
Physics2D.callbacksOnDisable = true; // 记录禁用时的碰撞
}
通过合理配置Physics 2D参数,可以打造出既真实又高效的2D物理效果。建议根据游戏类型在开发早期确定基础参数,并在不同设备上进行充分测试验证。
9293

被折叠的 条评论
为什么被折叠?



