系列文章
物理系统
Unity可以在游戏中模拟使用物理系统,以确保对象正确加速并对碰撞、重力和各种其他力做出响应。Unity 提供了以下不同的物理引擎实现方案,您可以根据自己的项目需求选用:3D、2D、面向对象或面向数据。
面向对象的项目内置的物理引擎
面向数据的项目物理引擎包
如果项目中使用的时面向数据的技术堆栈(DOTS),则需要安装专用的DOTS物理包,可用的包括:
- Unity Physics包:默认需要安装的 DOTS 物理引擎,用于在任何面向数据的项目中模拟物理系统。
- Havok Physics for Unity包:适用于 Unity 的 Havok 物理引擎的实现方案,用作 Unity Physics 包的扩展。请注意,此包受制于特定的许可方案。
内置3D物理引擎
Unity内置物理引擎集成的是Nvidia PhysX,使用该引擎,可以方用以下内容来进行物理系统的模拟:
- CharacterControl,角色控制,为第一人称及第三人称角色听基础的物理配置;
- Rigidbody Physics,刚体物理,为GameObject赋予物理行为;
- Collision,碰撞体,使用碰撞体来完成多个GameObject间的碰撞行为物理模拟;
- Joints,应用并配置连接GameObjects并模拟旋转、移动和限制的物理力的关节;
- Articulations,配置刚体和关节组成的复杂物理系统;
- Ragdoll Physics,为角色配置布娃娃物理;
- Cloth,布料系统,用来模拟人物服装和其他应用纺织品的织物运动;
- Multi-scene Physics,使用多个专用物理场景在一个项目中管理不同的物理环境;
CharacterControl
第一人称和第三人称视角的游戏中,游戏角色通常需要一直基础的物理碰撞属性支持,这样游戏角色就不会从地板上掉下去或者不会穿墙。在3D应用中,可以通过CharacterControl来创建并配置一个这样的游戏角色,主要通过CharacterController
和CharacterControl 组件来配置。
CharacterController
控制器
CharacterController的属性
区别于直接用Transform
或者RigidBody
,CharacterController
有着更好的效果,它拥有RigidBody
的一些重要特性,但是又去掉了很多物理效果,这样可以避免诸如穿模,滑步,被撞飞或者将其他物体撞位移等情况。主要属性如下:
Slope limit,斜度限制,代表的是角色能爬上的最大坡度;
Step offset,每部偏移量,其实就是能走上的台阶的高度。这其实是很有用的一个属性,走上一些高度不是很高的台阶或者石头之类的东西不再需要跳跃,这也更符合实际的移动情况。
这个值有一个限制即该值必须小于等于(高度+半径*2)(上分图片中的最下方两个值),这个设定其实很好理解,毕竟你一个一米七的人不可能一步跨上一米多的台阶吧
Skin width,蒙皮宽度,碰撞体外层再添加一层,用来放置衣服等装饰物品;
要正确调整角色控制器,Skin Width 属性是最重要的属性之一。 如果角色被卡住,那么很可能是因为 Skin Width 设置过小。Skin Width 允许对象轻微穿透控制器,但可消除抖动并防止被卡住。
最好是让 Skin Width 的值至少大于 0.01 并且比 Radius 的值大 10%。
- 两个碰撞体可以穿透彼此且穿透深度最多为皮肤宽度 (Skin Width)。较大的皮肤宽度可减少抖动。较小的皮肤宽度可能导致角色卡住。合理设置是将此值设为半径的 10%。
Min move Distance,最小移动距离
- 建议将 Min Move Distance 保持为 0。
- 此设置可以用来减少抖动。在大多数情况下,此值应保留为 0。
Center,碰撞体的中心
Radius,碰撞体的半径
Height,碰撞体的高度
CharacterController
的操作方法