Unity3d角色控制器CharacterController的用法

本文介绍了如何利用Unity的角色控制器组件进行角色移动和跳跃的实现。角色控制器不受力的影响,通过调用Move函数来控制角色的移动,并处理碰撞。在跳跃时,根据输入判断角色是否在地面上,然后赋予垂直速度。下降过程中,重力影响角色的垂直速度。下蹲操作则通过调整角色控制器的高度和中心点来实现。中心点设置为下蹲距离的一半,是因为胶囊体的高度减小,相当于半径减少,因此中心点下降的距离是半径的一半。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
角色控制器可以让你更容易的处理有有碰撞的运动,同时不用处理刚体。(也就是说角色控制器负责处理角色的移动,如果添加角色控制器,就不用在添加刚体组件)

角色控制器不受力的影响,并且只有当你调用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;
        }

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值