Unity中的Character Controller 简介

该文介绍了如何在Unity中使用CharacterController组件来控制角色的移动、旋转和跳跃。通过设置移动速度、旋转速度、跳跃高度和重力参数,实现基本的玩家控制。同时,利用Physics.CheckSphere进行地面检测,确保角色在着地时正确交互。

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

编辑

Slope Limit :坡度限制

Step Offset :每步偏移量

Skin Width :皮肤厚度

Min Move Distance :最小移动距离

Center :中心

Radius :半径

Height :高度

Unity中可以使用character controller实现角色的控制,在unity中先创建一个需要被控制的角色,可以方块体等,为主角加入CharacterController组件

创建C#脚本,写入一下脚本

public Transform m_transform;

CharacterController m_ch;

void Start()

{

m_transform = this.transform;

m_ch = this.GetComponent<CharacterController>();

}

m_transfrom = this,transform; //的作用是获取主角的transform组件

m_ch = this.GetComponent<CharacterController>();

//的作用是获取主角的characterController组件

继续向脚本中添加代码

float m_movSpeed = 5.0f; //移动速度

float m_rotSpeed = 1.0f; //旋转速度

float m_jumphight = 3f; //跳跃高度

float m_gravity = 9.8f; //重力加速度

private Vector3 Velocity = Vector3.zero; //竖直方向上的一个向量

public Transform m_groundcheck; //与地面接触的检测器

publicfloat m_checkradius = 0.2f; //地面检测器的范围

privatebool m_isground; //一个判断是否与地面接触的bool值,接触则为true

public LayerMask layerMask; //地面层

这里提到了一个地面检测器,地面检测器的做法为在,主角的底部添加一个空的游戏体,调整一个合适的大小,尽量小一些

添加结束之后,我们在脚本中继续添加如下代码

voidUpdate()

{

m_isground = Physics.CheckSphere(m_groundcheck.position, m_checkradius, layerMask);

if (m_isground && Velocity.y <0)

{

Velocity.y = 0;

}

if (m_isground && Input.GetButtonDown("Jump"))

{

Velocity.y += Mathf.Sqrt(m_jumphight * m_gravity);

}

//控制主角

var vertical = Input.GetAxis("Vertical"); //键入ws

var horizontal = Input.GetAxis("Horizontal"); //键入ad Horizontal

var motion = transform.forward * vertical * m_movSpeed * Time.deltaTime;

Velocity.y -= m_gravity * Time.deltaTime; //重力加速度 a += g*时间

m_ch.Move(Velocity * Time.deltaTime); //竖直方向的移动

m_ch.Move(motion); //水平方向的移动

m_transform.Rotate(Vector3.up,horizontal * m_rotSpeed); //旋转

}

m_isground = Physics.CheckSphere(m_groundcheck.position, m_checkradius, layerMask);这串代码为一个触碰检测,如果检测体m_groundcheck与layerMask接触后则返回一个true

Velocity.y += Mathf.Sqrt(m_jumphight * m_gravity);

计算跳跃的近似公式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity小白兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值