三、CharacterController、Rigidbody和

2021-04-12  本文已影响0人  GameObjectLgy

共同点:都可以用作在游戏中的角色移动。

CharacterController

有重力效果,不能受其他物理力。本身自带了一个胶囊碰撞体,可以用来产生碰撞。只有调用Move或SimpleMove,对象才能移动。所以它被称为角色控制器,一般的角色操作类游戏用这个比较合适。
1、CharacterController相比于Rigidbody,可以直接设置爬梯子的高度,对于不是完全水平的地图,这一特性非常好用。

Rigidbody

是用来模拟真实物理效果的,它可以设置重力,可以为对象施加外力。注意它和各种Collider的关系:只有Rigidbody才能被施加外力,这个力可能是被直接施加的,也可能是被其它Rigidbody碰撞产生的间接力;而Collider是用来设置碰撞的一些参数。简单说:没有Rigidbody就不会动,没有Collider就不能碰撞或被碰撞。这个用于赛车类需要真实物理效果的游戏比较合适。
1、Rigidbody有更好的物理特性,比如想要有击飞,击退,浮空效果时,Rigidbody更容易实现,且更加方便。而用CharacterController去实现则相对困难一些。
2、Rigidbody有SweetTest,对于想检测地图边界,是否有障碍物等比较方便。

NavMeshAgent

属于寻路系统,它也带有一个圆柱体形的碰撞体。如果你的角色要寻路,那么添加了NavMeshAgent后就不要再添加Rigidbody或CharacterController,如果要对另外一个动态对象产生碰撞,就为那个对象加上Navmesh Obstacle组件。
if (!navAgent.pathPending)
{
if (navAgent.remainingDistance <= navAgent.stoppingDistance)
{
if (!navAgent.hasPath || navAgent.velocity.sqrMagnitude == 0f)
{
//find path done!
}
}
}

总结

如果不进行寻路操作,那么CharacterController和Rigidbody也不要混用。如果对象之间需要产生真实的推力效果,就用Rigidbody;否则,用CharacterController。如果真有复杂的混用情况,也可以在代码中根据情况,启用或禁用相应组件。

上一篇 下一篇

猜你喜欢

热点阅读