Unity:角色控制器(CharacterController)

角色控制器是unity中专门用来控制角色的组件(主要是运动相关),区别于直接用Transform或者RigidBody,CharacterController有着更好的效果,它拥有RigidBody的一些重要特性,但是又去掉了很多物理效果,这样可以避免诸如穿模,滑步,被撞飞或者将其他物体撞位移等情况。

其主要属性如下:

斜度限制代表的是角色可以走上的斜坡角度

每步偏移量其实就是能走上的台阶的高度,这其实是很有用的一个属性,走上一些高度不是很高的台阶或者石头之类的东西不再需要跳跃,这也更符合实际的移动情况。但是这个值有一个限制即该值必须小于等于(高度+半径*2)(上分图片中的最下方两个值),这个设定其实很好理解,毕竟你一个一米七的人不可能一步跨上一米多的台阶吧。

蒙皮宽度一般不用管,它就是在你的碰撞器外再加一层,用于适应衣服等,是一个很小的值。

最小移动距离顾名思义就是每一步移动的最小量,这个值不宜过大,否则可能会出现“罚站”的情况

中心即使碰撞器的中心,半径和高度也是指的碰撞器的参数。CharacterController是自带碰撞器的不需要再去添加,其默认的碰撞器是胶囊形。

CharacterController为我们提供了两种移动方法:Move 和 SimpleMove,两者都需要一个Vector3类型的参数

其中Move不会受到重力效果,需要重力可以把参数中的Y设为重力(比如-9.8),返回碰撞的信息

SimpleMove会受到重力效果,参数中的Y可以不写,会有默认值,返回一个Bool值,是否在地面上

下面做一个简单的演示:

 先简单创建一个场景,做一个斜面和一个台阶,创建一个胶囊作为角色,然后把主摄像机绑定到胶囊上模拟第一人称游戏的场景。

    CharacterController controller;
    
    void Start()
    {
        controller = GetComponent<CharacterController>();
        
    }

    void Update()
    {
        Move();      
    }
   
    void Move()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 dir = new Vector3(-h, 0, -v);
        controller.SimpleMove(dir);
    }

 Horizontal和Vertical代表横向和纵向输入即WASD或者上下左右键(这里的负号只是我的场景里面的方向的问题)

 

猜你喜欢

转载自blog.csdn.net/m0_61777011/article/details/125457481