赞
踩
角色控制器可以让你更容易的处理有有碰撞的运动,同时不用处理刚体。(也就是说角色控制器负责处理角色的移动,如果添加角色控制器,就不用在添加刚体组件)
角色控制器不受力的影响,并且只有当你调用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;
}
为什么下蹲中心点是下蹲距离的一半呢?
因为下蹲距离就是胶囊体直径(高度)减少了,而中心点下降距离即为半径,所以是一半。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。