美文网首页
三、CharacterController、Rigidbody和

三、CharacterController、Rigidbody和

作者: GameObjectLgy | 来源:发表于2021-04-12 00:10 被阅读0次

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

    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。如果真有复杂的混用情况,也可以在代码中根据情况,启用或禁用相应组件。

    相关文章

      网友评论

          本文标题:三、CharacterController、Rigidbody和

          本文链接:https://www.haomeiwen.com/subject/xssctltx.html