每次我蹲下UNITY3d都会跌落地形

时间:2014-04-27 17:27:57

标签: unity3d unityscript

在团结中,我为我的家伙制作了一个脚本,让我的家伙蹲伏,奔跑,并且有他的正常速度,但是当我蹲下时,我刚刚陷入地形,想知道这是不是我的代码还是我必须检查地形

var walkSpeed: float = 7; // regular speed
var crchSpeed: float = 3; // crouching speed
var runSpeed: float = 20; // run speed

private var chMotor: CharacterMotor;
private var ch: CharacterController;
private var tr: Transform;
private var height: float; // initial height

function Start(){
chMotor = GetComponent(CharacterMotor);
tr = transform;
ch = GetComponent(CharacterController);
height = ch.height;
}

function Update(){

var h = height;
var speed = walkSpeed;

if (ch.isGrounded && Input.GetKey("left shift") || Input.GetKey("right shift")){
    speed = runSpeed;
}
if (Input.GetKey("c")){ // press C to crouch
    h = 0.5 * height;
    speed = crchSpeed; // slow down when crouching
}
chMotor.movement.maxForwardSpeed = speed; // set max speed
var lastHeight = ch.height; // crouch/stand up smoothly 
ch.height = Mathf.Lerp(ch.height, h, 5*Time.deltaTime);
tr.position.y += (ch.height-lastHeight)/2; // fix vertical position

}

1 个答案:

答案 0 :(得分:0)

这一行可能是负责任的:

tr.position.y += (ch.height-lastHeight)/2;

你可能想让重力照顾这个或在这里添加一个向下的力量。直接改变变换会使Object不关心碰撞器。

编辑:更好的方法可能是改变CharacterController,因为"摔倒"蹲伏时没有多大意义。也许你甚至不需要这个?我实现这个的方式是脚的根,高度从那里向上。