PhysX 核心组件 PxActor 架构与工程实践

📅 2026/8/25 15:55:54
PhysX 核心组件 PxActor 架构与工程实践
开场刚接手一个物理交互的项目,前任把刚体、布娃娃、触发器全堆在同一个管理器里,碰撞回调里到处是dynamic_cast判定类型——更隐蔽的问题是,PhysX 默认编译配置根本不开 RTTI,某些构建下这些dynamic_cast行为未定义甚至直接编不过。另一个典型事故:有人拿到一个PxActor*就调addForce,编译期没拦住(强转了基类指针),运行期静默失效甚至崩溃。这类混乱的根源,是没吃透 PhysX 的 Actor 继承体系:addForce压根不在 PxActor 上,哪些对象能受力、能挂形状、能被推动,全部写在继承层级里。这篇文章把这棵继承树讲透,再说明 PhysX 为什么这么设计。一、PxActor 继承树:每一层只加一种能力PhysX 的 Actor 体系是一棵"能力逐层叠加"的树,而不是平铺的类型枚举。真实的继承关系(PhysX 4.x/5.x):PxActor // 场景成员身份:能被 addActor、有包围盒、有 userData └── PxRigidActor // + 形状管理:attachShape / getShapes ├── PxRigidStatic // 静态刚体:永远不动,只参与碰撞 └── PxRigidBody // + 力学接口:addForce / setLinearVelocity / 质量与惯量