赞
踩
编辑
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);
计算跳跃的近似公式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。