物理引擎就是在游戏中模拟真实的物理效果。Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动。
物理引擎主要包含三个核心内容:
1. Collider是最基本的触发物理的条件,例如碰撞检测。基本上,没有Collider物理系统基本没有意义(除了重力);
2. Rigidbody是物体的基本物理属性设置,当检测碰撞完之后,就要计算物理效果,而Rigidbody提供计算基本参数。
3. PhysicMaterial则是附加的基本物理参数,是一个物理材质,UNITY3D有自带默认的物理材质的系数(在Edit/Project Settings/Physic下设置),它参与碰撞的计算例如反弹效果摩擦效果等。
常见问题:
对Rigidbody施加力的常用方式?
AddForce 添加普通力;AddExplosionForce 添加爆炸力;AddForceAtPosition 添加位置力。
两个Collider产生碰撞的必要条件?
至少要有一个物体具有Rigibody刚体才会触发OnColliderEnter函数。
有碰撞器Collider
碰撞器和触发器的区别?
最大的区别是碰撞器有碰撞效果触发器没有;触发器是一个特殊的碰撞器。
Collider有几种?(三种)
1、Static Collider(静态碰撞器):带有Collider没有添加Rigidbody的对象,用于静止物体如地理环境;
2、Rigidbody collider:带有rigidbody的collider对象,能够根据物理引擎很好的响应外力和碰撞作用。
3、Kinematic rigidbody collider:带有rigidbody的collider对象,开启Is kinematic。
当物体进来OnTriggerEnter触发,出去时OnTriggerExit触发。那么物体在进来后Destory后会如何?
经过测试是:不会调用OnTriggerExit。
PhysicMaterial有哪些主要属性?
dynamicFriction:移动摩擦力,值在0到1之间。
staticFriction:静止摩擦力,值在0到1之间。
Bounciness:弹力,0值没有弹力,1-没有能量损失的反弹。
Character Controller(角色控制器)的特性
角色本身不受Physics影响,需要接受外力作用时,使用OnCharacterColliderHit();
使用角色控制器如何防止角色经常卡住?
Skin Width:设置为radius的10%;
Step offset:对于2meter(米)高的Character设为0.1到0.4;
Min move distance设为0即可。
Rigidbody常用属性?
打开Is Kinematic后物体不受物理引擎影响,只受Transform控制;
Freeze Position冻结位置轴向,Freeze Rotation冻结方向轴向,冻结之后的轴向只受Transform控制;
使用Physics时不要使用Transform
CharacterController和Rigidbody的区别?
CharacterController自带胶囊碰撞器,里面包含有刚体的属性;
Rigidbody就是刚体,使物体带有刚体的特征。
什么是Trigger?
Collider勾选Is Trigger属性,碰撞器变成触发器;
在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数?
OnCollisionEnter(进入)、OnCollisionStay(保持)、OnCollisionExit(退出)
什么叫做链条关节?
Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。