Rigidbody是用来模拟真实物理效果的,它可以设置重力,可以为对象施加外力。只有Rigidbody才能被施加外力,这个力可能是被直接施加的,也可能是被其它Rigidbody碰撞产生的间接力;而Collider是用来设置碰撞的一些参数。简单说:没有Rigidbody就不会动,没有Collider就不能碰撞或被碰撞。这个用于赛车类需要真实物理效果的游戏比较合适。
CharacterController除了重力效果之外,它是不能受物理力的。本身自带了一个胶囊碰撞体,可以用来产生碰撞。只有调用Move或SimpleMove,对象才能移动。所以它被称为角色控制器,一般的角色操作类游戏用这个比较合适。
NavMeshAgent属于寻路系统,它也带有一个圆柱体形的碰撞体。
具体如何运用:
如果你的角色要寻路,那么添加了NavMeshAgent后就不要再添加Rigidbody或CharacterController,如果要对另外一个动态对象产生碰撞,就为那个对象加上Navmesh Obstacle组件。
如果不进行寻路操作,那么CharacterController和Rigidbody也不要混用。如果对象之间需要产生真实的推力效果,就用Rigidbody;否则,用CharacterController。