关于Rigidbody,Collider和CharacterController三者之间的关系和用法的总结

Rule of Thumb


Rigidbody:多用在“物体”上,因为“物体”都是“死”的,他们的运动一般都是靠物理系统。所以对于Rigidbody的移动,不要用Translate(),要用各种“力”, 比如:Rigidbody的AddForce()方法,通过“力”来让它移动。另外,Rigidbody可以和NavMeshObstacle合用,因为后者也是用在“物”上的,但是一般不要和NavMeshAgent合用,因为这两个都会控制物体的运动,这样会有race condition。如果非要合用,请勾选Is Kinematic,由此看来如果Rigidbody的Is Kinematic属性被勾选了,那么Rigidbody就可以和任何其他的Component合用了,比如:NavMeshAgent,CharacterController。

Collider:定义了一个物体的形状,而我们的碰撞检测就是根据这个形状来进行的,所以Collider是碰撞检测的基础,几乎Unity中所有的物体都需要Collider。就算我们使用CharacterController一般会删掉原来的Collider,不过CharacterController本身自带了一个Capsule Collider。Collider分为static collider和dynamic collider,前者表示没有Rigidbody的collider,后者表示有Rigidbody的collider,static collider的物体最好是静止的物体,不要通过改变他的transform的position来使它运动,这样不仅会给物理引擎造成很多性能损失,而且会产生一些无法预测的行为。所以如果我们非要一个有collider的物体通过我们的脚本(比如通过Translate()方法)移动,并且不希望被物理引擎控制,那么我们需要给这个collider配上一个勾选了Is Kinematic的Rigidbody。因为Rigidbody的Is Kinematic就是让这个Rigidbody不受物理引擎的控制。结论:在游戏中,对于那些可能将来会移动的物体,我们不仅要加Collider,还要加上Rigidbody,如果希望是被物理引擎控制,就不勾选Rigidbody的Is Kinematic,如果希望不被物理引擎控制,希望通过自己的代码或者动画来控制,就勾选Rigidbody的Is Kinematic,而且这个属性还可以在脚本中随时改变,从而实现“ragdoll effect”,“ragdoll effect”类似于CS里面的效果,大部分时间物体的运动是通过脚本和动画控制的,这个时候Is Kinematic是开启的,如果遇到爆炸等

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值