# 物理系统
# 系统简介
使用物理系统可以为场景中的3D物体添加物理效果,使它们能产生符合物理规律的移动、旋转以及碰撞。
小游戏框架内集成了Nvidia PhysX,并采用简单易用的组件化设计。让用户能以最小的代价快速上手,轻松地为游戏添加逼真且高性能的物理效果。
游戏脚本中可以通过game.physicsSystem来获取到物理系统的全局实例。
# 快速上手
点击下载物理性能demo,在工具中直接上手体验。
点击下载工具新手引导,直接在工具中按流程学习。
也可以点击这里学习如何让场景中的立方体变成物理世界中的刚体,并落在地板上。
# 物理模拟
物理系统会收集场景中带有物理组件的物体,并在Update()之后、LateUpdate()之前,对它们进行物理模拟。
物理模拟的过程中,带有速度的刚体会前进,可能会受到重力、摩擦力、阻尼等影响而产生加速度;碰撞体(或Trigger)之间会发生碰撞,改变它们的运动状态,并生成物理事件。
每次物理模拟的时长都是固定的,一般来说会小于渲染帧的时长,默认为0.02s,可以通过PhysicsSystem.fixedDeltaTime来改变。在一帧中可能会发生多次物理模拟,具体次数视渲染帧的时长而定。
每次物理模拟结束后,会先产生物理事件,然后调用一次用户脚本内的onFixedUpdate函数。
# 物理组件
- Rigidbody:刚体组件,让物体能在物理模拟阶段发生位移或旋转;
- Collider:碰撞体组件,描述物体的形状,使其能发生碰撞;
- CharacterController:物理角色控制器组件,可以模拟角色在充满障碍物的世界里移动。
- Joints:关节组件,可以用各种方法连接刚体和另一个刚体(或空间位置),来限制刚体的移动和旋转。
# 物理资源
- PhysicMaterial:修改碰撞体表面的物理材质。
# 物理工具函数
全局物理工具函数挂载于game.physicsSystem
上。
射线检测
可以手动向场景投射一条射线(或者其他形状),检测与射线相交的物理碰撞体。
详见API文档中rayCast,boxCast,overlapBox等。物理碰撞矩阵
可以通过设置物理碰撞,来设定某些Layer之间,不发生物理碰撞。在工具内的
ProjectSetting
标签内,可以手动设置碰撞矩阵。也可在脚本内调用PhysicsSystem.ignoreLayerCollision,来设定某两个layer不碰撞。