Unity3d角色控制器CharacterController的用法

Unity3d角色控制器CharacterController的用法_第1张图片
角色控制器可以让你更容易的处理有有碰撞的运动,同时不用处理刚体。(也就是说角色控制器负责处理角色的移动,如果添加角色控制器,就不用在添加刚体组件)

角色控制器不受力的影响,并且只有当你调用move函数时才会移动。他的运动收碰撞的约束。

Slope Limit爬坡限制:小于等于此角度可以上坡
Step Offset台阶高度:
Skin Width 皮肤宽度:额外的增加这段距离可以触发碰撞, 一般其值很小但不为0
Min Move Distance:0,太多不行,太小动不了
Center:中心点坐标
Radius:半径,一般0.5
Height:高,一般2.0

以下代码不可运行,理解。

在角色跳跃上的应用:

		if(grounded)
        {
     
            //按键移动的水平和垂直轴对应世界坐标的x与z轴
            moveDirection = new Vector3(parameter.inputMoveVector.x, 0,parameter.inputMoveVector.y);
            // parameter.inputMoveVector = new Vector2(input.GetAxis("Horizontal"),input.GetAxis("Vertical"));
            //世界方向转为自身方向 
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
            if(parameter.inputJump)
            {
     
                moveDirection.y = jumpSpeed;
                AudioSource.PlayClipAtPoint(jumpAudio, transform.position);
                CurrentSpeed();
            }
    
        }
        //下降过程
        moveDirection.y -= gravity * Time.deltaTime;
        //更新控制器的位置(同时也会移动子节点摄像机的位置)
        CollisionFlags flags = controller.Move(moveDirection * Time.deltaTime);
        //是否接触地面
        grounded = (flags & CollisionFlags.Below) != 0;
        //CollisionFlags是CharactorController的返回值,Below表示胶囊体脚部与地面碰撞的信息,
        //Side--身体发生碰撞,如撞在了墙上。  Above--头顶发生碰撞

在角色下蹲上的应用:

//角色蹲下使更新角色控制器的高度和中心点
        if(crouching)//下蹲状态
        {
     
            controller.height = normalControllerHeight - crouchDeltaHeight;
            controller.center = normalControllerCenter - new Vector3(0,crouchDeltaHeight/2,0);
        }
        else
        {
     
            controller.height = normalControllerHeight;
            controller.center = normalControllerCenter;
        }

为什么下蹲中心点是下蹲距离的一半呢?

因为下蹲距离就是胶囊体直径(高度)减少了,而中心点下降距离即为半径,所以是一半。

你可能感兴趣的:(unity,unity)