游戏物理开发技术图谱实战:刚体、碰撞检测、动力学与物理中间件选型(GameDevMind)
2026/9/17 8:26:46 网站建设 项目流程

游戏物理开发技术图谱实战:刚体、碰撞检测、动力学与物理中间件选型(GameDevMind)

【免费下载链接】GameDevMind最全面的游戏开发技术图谱(Game Development Map)。帮助游戏开发者们在已知问题上节省时间,省出更多的精力投入到更有创造性的工作中去。项目地址: https://gitcode.com/GitHub_Trending/ga/GameDevMind

真实的物理表现会给游戏带来真实的体验感。本篇技术指南以 GameDevMind 图谱的 2.1.2.物理.md 为核心骨架,系统梳理游戏开发中物理系统需要考虑的全部要素——从刚体、速度、力与加速度,到碰撞检测算法、触发器、物理材质、动力学约束,再到 PhysX / Bullet / Havok 等物理中间件选型,并结合仓库中的 Verlet 积分粒子 + AABB 碰撞模拟 源码,给出可直接运行的实现证据。读完本文,你将掌握物理系统的完整知识地图、常见问题的解决方向,以及如何借助 AI Coding 快速落地物理相关功能。

本文所属知识模块为"2.技术能力 → 2.1.客户端技术",等级为中级,阶段覆盖学习与开发,面向客户端开发与美术角色。图谱中各技术点下均附有 AI Coding 指南(交互提示、方法、应用三类内容),其总览说明见 阅读说明 - AI Coding 总览。

刚体与运动

刚体(Rigidbody)是物理模拟的基础载体。图谱中将其作用概括为"表现质量、碰撞,模拟物理行为",典型应用场景是可移动对象、物理交互与受力碰撞。其核心属性包括质量(Mass)、弹性、阻尼(Damping)与角速度(Angular Velocity)。

刚体实践中常遇到的三个问题及解决方向:

问题解决方向
性能限制激活数量;静态碰撞体;物理 LOD;合并小物体
不稳定调整时间步长;连续碰撞检测;限制速度;固定步长
质量设置按大小材质设质量;避免差异过大;质量中心

要点与思考方向:刚体是物理模拟基础;合理设置属性;注意性能;静态对象应使用静态碰撞体(Static Collider)而非动态刚体,这是性能优化的第一原则。

AI Coding 协作:向 AI 描述需求时应说明对象类型、性能与稳定性约束。例如提示词:「Unity 场景有 100 个可推动的箱子,物理卡顿,请说明如何用静态碰撞体、物理 LOD、限制激活数量来优化」。

速度

速度是控制物体运动的核心向量属性,应用于移动对象、抛射物、车辆与角色。其特性是:本质为向量;受碰撞与力影响;可叠加。

问题解决方向
速度突变用力改变;平滑插值;限制加速度
速度过大限制最大速度;连续碰撞检测;提高更新频率
速度控制速度阻尼;用力控制;必要时直接设置

要点与思考方向:速度是向量;用"力"改变速度比直接设置更自然;注意速度限制。在仓库的 Verlet 示例中,速度并未显式存储,而是由pos - prev_pos隐式表达(见 physics_demo.py 的velocity()方法),这正是"速度是派生量"这一思想的直接体现。

AI Coding 协作:提示词应说明运动类型与突变问题,例如「子弹速度 500,用 Discrete 碰撞会穿透墙壁,请说明何时用 Continuous 检测,以及限制速度与提高物理更新频率的取舍」。

力与加速度

力通过改变运动状态来驱动物理,其原理是经典力学核心公式F = ma,即力 → 加速度 → 速度的传导链。加速度来源分为三类:

类型说明
瞬时力爆炸、冲击等一次性力
持续力推力、牵引力等持续力
重力全局统一方向,模拟下落

应用举例

应用说明
粒子系统粒子表现
自然系统如雪花飘落
汽车驱动车辆动力
抛射物运动轨迹
水中阻力流体阻力
问题解决方向
力的大小控制按质量调整;力系数;测试调整
力的叠加理解叠加原理;设计作用时机;优先级
性能限制力数量;力池;优化计算

要点与思考方向:用力比直接设速度更自然;理解力的叠加原理;注意性能。仓库中的重力模拟即为持续力(全局恒定加速度)的典型实现,见 physics_demo.py 中每帧累加self.gravity * (sub_dt * sub_dt)的 Verlet 积分步骤。

AI Coding 协作:提示词应说明力的类型、叠加与性能,例如「爆炸效果对周围物体施加冲击力,请用 Unity AddExplosionForce 实现,并说明力的大小、半径、衰减与质量的关系」。

碰撞与检测

碰撞系统的职责是检测和处理接触、交互,覆盖物理阻挡、碰撞检测与触发事件三类场景。本章从碰撞体、触发器、碰撞检测模式、算法到优化逐一展开。

碰撞体(Collider)

碰撞体产生物理阻挡与碰撞效果,应用于墙壁地面、碰撞检测与物理交互。不同碰撞体的选型直接决定性能与精度:

类型说明
Box Collider盒形,性能好
Sphere Collider球形,性能好
Capsule Collider胶囊形,适合角色
Mesh Collider网格,精确但性能差
Compound Collider复合,组合多个简单碰撞体
问题解决方向
碰撞体选择简单形状用简单碰撞体;复杂用复合;避免 Mesh;按精度选
碰撞体大小略大于等于模型;测试调整;可视化工具

要点与思考方向:简单碰撞体性能好;避免 Mesh Collider,用复合碰撞体替代。角色用 Capsule 可避免 Box 卡墙角问题,复杂地形用 Compound 组合多个简单形状。

AI Coding 协作:提示词应说明模型形状、精度与性能,例如「角色用 Box Collider 会卡墙角,请说明 Capsule 与 Box 的适用场景,以及如何用 Compound Collider 组合多个简单形状」。

触发器(Trigger)

触发器只检测接触或交叉、不产生物理阻挡,应用于触发事件、进入/离开区域、无阻挡检测等场景。

问题解决方向
触发时机标志位防重复;进入/离开区分;时间间隔
性能限制数量;空间分割;及时禁用

要点与思考方向:只检测不阻挡;注意重复触发问题——这是触发器最常踩的坑。

AI Coding 协作:提示词应说明触发场景与重复问题,例如「玩家进入触发器区域应只触发一次奖励,但会重复触发,请用 C# 标志位或冷却时间实现防重复,并说明 OnTriggerEnter 与 Stay 的区别」。

碰撞检测模式

碰撞检测模式用于在精度与性能之间做取舍,需按物体速度选择:

模式优点缺点应用
Discrete性能好快速时可能穿透慢速物体
Continuous不穿透性能较低快速物体
Continuous Dynamic最高精度开销最大快速物体 vs 静态网格
问题解决方向
快速穿透连续检测;限制速度;提高更新频率;连续动态
性能与精度快速用连续;慢速用离散;按需选择

要点与思考方向:离散性能好但可能穿透;连续精度高但开销大;按速度选择模式。这也是为什么快速子弹、抛射物必须使用 Continuous 系列检测。

AI Coding 协作:提示词例如「Unity 中 Rigidbody 的 Collision Detection 有 Discrete、Continuous、Continuous Dynamic,请说明三者区别和适用场景,以及快速物体 vs 静态网格应选哪种」。

碰撞检测算法

碰撞检测算法用于优化碰撞检测性能,尤其面对大量物体时:

算法说明优点缺点
AABB矩形外框粗检测简单、性能好精度低
OBB有方向包围盒精度更高-
Sphere球形包围体计算简单-
GJK凸体碰撞--
SAT分离轴定理--
问题解决方向
算法选择粗检测用 AABB/Sphere;精确用复杂算法;按精度选
性能优化空间分割;层次结构;粗检测过滤;减少检测

要点与思考方向:AABB 是常用粗检测手段;空间分割优化大量物体场景。

仓库中的 physics_demo.py 给出了 AABB 的完整教学实现,是理解本表的最佳源码:

  • 重叠检测AABB.overlap()仅用 4 个一维区间比较即可判断两个轴对齐包围盒是否相交(physics_demo.py#L74-L82),这正是"AABB 简单、性能好"的原因——把二维相交问题拆成两组一维区间测试;
  • MTV 最小分离向量AABB.penetration()分别计算 X/Y 轴穿透深度并取最小值,确定分离方向(physics_demo.py#L84-L96),这是碰撞响应中"位置修正"的基础;
  • 粗检测过滤:真实引擎在精确碰撞前先用 AABB 这类粗检测剔除大量不相交对象,与本表"粗检测用 AABB/Sphere"的结论一致。

AI Coding 协作:提示词例如「1000 个物体两两碰撞检测性能差,请说明 AABB 粗检测、空间分割(四叉树/八叉树)、BVH 的流程和适用场景」。

优化

物理优化用于提高模拟性能与效率,典型应用场景是大量物理对象、性能敏感项目与移动平台:

问题解决方向
碰撞模式按需选择;慢速离散;快速连续
空间分割四叉树/八叉树;网格;BVH
中间件按平台、内容选;考虑硬件加速
其他减少对象;物理 LOD;固定步长;多线程

要点与思考方向:碰撞模式影响大;空间分割提高性能;选合适引擎。

仓库的 quadtree.py 提供了四叉树空间分区的完整实现(对应文章"一-03 数据结构与算法"),可作为碰撞优化中"空间分割"的直接证据:每个节点最多存 4 个对象(MAX_OBJECTS = 4)、最大深度 5 层(MAX_LEVELS = 5),插入对象超出容量时自动分裂为 NW/NE/SW/SE 四个子节点,查询时仅检查与查询范围相交的局部节点,避免遍历全部实体(quadtree.py#L47-L138)。其 README 描述暴力遍历为 O(N),四叉树可降至 O(log N)。这正是大规模物理场景中"先空间分割、再局部碰撞检测"的标准做法。

AI Coding 协作:提示词例如「移动端物理模拟卡顿,请说明固定步长、物理更新频率、空间分割的优化思路,以及 Unity 的 Physics.autoSimulation 与手动模拟」。

材质与空间交互

物理材质与摩擦力

物理材质定义碰撞摩擦等物理属性,应用于金属、木头、橡胶等不同材质,核心属性为摩擦力、弹性系数与密度。摩擦力分两类:

类型说明
静摩擦静止时,防滑动
动摩擦运动时,模拟阻力
问题解决方向
摩擦力设置按材质设;测试调整;参考真实系数

要点与思考方向:静摩擦防滑动;动摩擦模拟阻力。

AI Coding 协作:提示词例如「球在冰面上应该滑动,在沙地上应该很快停下,请说明 Unity Physic Material 的 Dynamic Friction、Static Friction 设置和参考值」。

弹性系数(Bounciness)

弹性系数决定反弹程度(铁球低、皮球高),取值范围 0–1:0 不反弹,1 完全弹性。

问题解决方向
弹性设置按材质设;避免过大;测试调整
能量损失系数<1;添加阻尼;模拟损失

要点与思考方向:0 不反弹、1 完全弹性;现实中通常需要能量损失(系数小于 1 并配合阻尼),否则会出现"反弹过高、能量守恒导致停不下来"的失真表现。

AI Coding 协作:提示词例如「皮球落地应弹几下后停下,请说明 Bounciness 与阻尼的配合,以及如何避免反弹过高(能量守恒导致)」。

射线检测

射线检测发射射线检测交点,应用于射击检测、点击拾取、视线检测与距离测量,性能好、适合快速检测:

应用说明
射击检测子弹命中目标
点击拾取鼠标点击 3D 位置
视线检测角色是否看到目标
距离测量两点距离
问题解决方向
射线精度精确碰撞体;多条射线;调整起点方向
性能限制数量;空间分割;缓存;粗检测
射线过滤Layer;Tag;碰撞组;手动过滤

要点与思考方向:性能好;注意精度和过滤——LayerMask 过滤是控制射线开销最常用的手段。

AI Coding 协作:提示词例如「从摄像机发射射线实现鼠标点击 3D 拾取,请用 Unity Physics.Raycast 实现,并说明 LayerMask 过滤和 RaycastHit 的用法」。

动力学与约束

阻尼振动

阻尼振动模拟振幅随时间衰减的振动,让运动更自然,应用于摄像机跟随、UI 动画、物体运动与弹簧:

应用说明
赛车跟随摄像机加减速+阻尼,体验更自然
UI 动画按钮、菜单
弹簧效果弹性响应
问题解决方向
阻尼参数调整系数;测试;临界阻尼避免振荡
性能简化计算;预计算;限制频率

要点与思考方向:临界阻尼(critical damping)是避免振荡的关键——阻尼过小会来回振荡,过大则响应迟缓。

AI Coding 协作:提示词例如「摄像机跟随角色,用阻尼弹簧平滑跟随,但会来回振荡,请说明临界阻尼的概念和实现,以及 damping ratio 的设置」。

约束

约束用于连接刚体、限制相对运动,应用于关节、机械连接、绳索链条;超力可破坏约束(部分引擎支持)。

类型说明
Hinge Joint单轴旋转
Ball Joint多轴旋转
Fixed Joint固定连接
机械衔接机械连接
绳索链条柔性连接
问题解决方向
约束不稳定调整参数;稳定算法;限制力;固定步长
性能限制数量;简化;约束 LOD;优化求解器
约束破坏合理阈值;监控状态;处理事件

要点与思考方向:注意约束的不稳定性(抖动、穿模)与性能开销。

AI Coding 协作:提示词例如「用 Hinge Joint 做门,门会抖动或穿模,请说明 Unity ConfigurableJoint 参数调整、固定步长、以及约束稳定的注意事项」。

软体

软体模拟可变形物体,应用于绳子链条、布料旗帜、软体生物与流体,特点是可变形、非刚体:

应用说明
绳子、虫子、果冻软体效果
布料模拟服装、旗帜
流体效果水、液体
问题解决方向
性能限制数量;简化模型;软体 LOD;优化算法
稳定性调整参数;稳定算法;限制变形;固定步长
精度按需调整;简化模型;预计算

要点与思考方向:计算开销大;注意稳定性与性能。

AI Coding 协作:提示词例如「Unity 布料模拟在移动端卡顿,请说明 Cloth 组件的简化、顶点数量、以及何时用预烘焙动画替代实时模拟」。

物理中间件

物理中间件是提供物理模拟能力的第三方库,引擎通常已集成,选型需综合考虑平台、需求、性能与成本。

中间件是什么应用优势平台
PhysXNVIDIA 物理引擎GPU 加速平台;高性能物理硬件加速;性能好;功能完善PC、游戏机
Bullet开源物理引擎免费项目;跨平台免费;开源;跨平台;功能完善PC、移动
Havok商业物理引擎大型商业游戏功能强大;技术支持好PC、游戏机
问题解决方向
中间件选择按需求、平台、性能、成本选;考虑硬件加速、许可证、功能
集成用引擎集成(推荐);文档示例;社区

要点与思考方向:按项目需求选;引擎通常已集成。以移动端为例,Bullet 的开源跨平台特性与 PhysX 的 GPU 加速能力形成互补,商业大作则多考虑 Havok 的技术支持,具体取舍取决于目标平台与许可成本。

AI Coding 协作:提示词例如「游戏需支持 PC 和移动端,请比较 PhysX、Bullet、Havok 的优缺点,以及 Unity 默认使用哪个、如何切换」。

从概念到代码:Verlet 粒子与 AABB 碰撞实战

为将上文概念落到实处,仓库提供了纯标准库的教学演示 physics_demo.py(对应文章"二-02 物理系统",README 有完整说明),模拟了物理引擎的核心流程:Verlet 积分 → AABB 重叠检测 → MTV 分离 → 碰撞响应。

运行方式

python code/artile-sample-code/02-technical/02-physics/physics_demo.py

纯标准库实现,无需安装任何依赖,可直接在终端看到 ASCII 渲染的粒子在平台与边界间下落、碰撞、反弹的完整过程,并打印每帧总动能与平均高度。

关键实现与原理解析

Verlet 积分器(位置驱动)。粒子只保存posprev_pos,速度由pos - prev_pos隐式表达(physics_demo.py#L104-L127)。每帧积分公式为pos_new = pos + (pos - prev_pos) * damping + gravity * dt²(physics_demo.py#L155-L158),天然稳定、无需显式存储速度。

AABB 重叠检测与 MTV。粒子与静态平台均以 AABB 表示,AABB.overlap()用 4 个一维区间测试判断相交(physics_demo.py#L74-L82);AABB.penetration()取 X/Y 轴穿透深度最小值得到最小分离向量(physics_demo.py#L84-L96)。

碰撞响应。粒子间碰撞按质量比分配位移:ratio_a = b.mass / total_mass,质量小的物体被推开更多(physics_demo.py#L184-L192);粒子与静态体碰撞时通过修改prev_pos实现带恢复系数的反弹(physics_demo.py#L194-L210),对应文中"弹性系数"与"碰撞响应"两个概念。

静态碰撞体与边界约束。平台、地面等不可动物体作为static_bodies存储(physics_demo.py#L140、physics_demo.py#L300-L306),印证了"静态用静态碰撞体"的性能原则;边界约束实现弹性反弹(physics_demo.py#L212-L230)。

子步骤。每帧 4 次子步提高积分精度(substeps = 4,physics_demo.py#L141),对应文中"固定步长""提高更新频率"的稳定性手段。

与真实物理引擎的对比

该 demo 是教学简化版,README 明确说明真实引擎(Box2D、PhysX)在其上增加了:旋转刚体与惯性张量、连续碰撞检测(CCD)、约束求解器(关节、铰链)、空间划分(BVH、网格)。这些差异点正好对应本图谱中"碰撞检测模式""约束""优化"各章内容——理解了这个最小闭环,再去读引擎源码或文档会顺畅得多。

可调参数

PhysicsWorld.__init__()main()中可调整:

参数默认值说明
gravity向下 0.5重力向量
damping0.995阻尼系数
substeps4每帧子步数
粒子数量、初始速度、平台位置-场景配置

修改后重新运行即可观察不同参数对物理表现的影响,这也是验证"阻尼""弹性系数"等概念最直观的实验手段。

更多资料

图谱在"更多资料"章节整理了物理学习的经典扩展资料,可按主题查阅:

资料类型主题说明
讲义资料Physically Based Modeling物理建模原理与实践
论文资料Advanced Character Physics高级角色物理,Verlet 积分与距离约束的经典论文,与本文 Verlet 演示直接相关
在线文章Dynamic AABB Tree动态 AABB 树(广相加速结构)原理与实现
视频资料Building a Physics EngineC++ 物理引擎构建与机器模拟
视频资料Physics engines in games游戏物理引擎综述

结合仓库其他资源可进一步深化:数据结构层的 quadtree.py 对应碰撞优化的空间分割;客户端技术入口 2.1.客户端技术.md 可看到物理在客户端技术体系中的完整位置;代码示例总览见 code/README.md。图谱的本质是索引与导航而非教材,如需系统学习,建议以本文知识地图为骨架,结合官方文档与实战项目逐点深入。

【免费下载链接】GameDevMind最全面的游戏开发技术图谱(Game Development Map)。帮助游戏开发者们在已知问题上节省时间,省出更多的精力投入到更有创造性的工作中去。项目地址: https://gitcode.com/GitHub_Trending/ga/GameDevMind

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询