2014-08-30 3 views
0

Я делаю 3D-платформерную игру и хочу, чтобы мой игровой объект с CharacterController прыгнул. У меня возникла странная проблема, когда, несмотря на то, что мой отладочный текст говорит, что мой объект подвергается вектору в направлении y, я не вижу этих результатов на экране. Существует множество ресурсов, которые, как представляется, доступны для этой работы, но ни один из подходов не работает для меня. Я думал, что попрошу здесь.Unity3D CharacterController jumping issues

Персонаж представляет собой набор игровых объектов с преобразованием (duh), диспетчер символов, RigidBody и прилагаемый сценарий.

Жесткий чехол имеет «isKinematic». Все остальное в RigidBody по умолчанию.

Ниже выступа часть моего решения сделать мой характер прыжок, поворот, и двигаться в моем цикле обновления:

первое это наверху:

private Vector3 forward; 
private Vector3 upvec = Vector3.zero; 

Тогда вот мое обновление :

void Update(){ 
    CharacterController controller = GetComponent<CharacterController>(); 
    forward = Vector3.zero; //forward is a private Vector3 defined above 
    if (Input.GetKey ("w")) { forward = transform.TransformDirection (Vector3.forward); } 
    if (Input.GetKey("s")) { forward = transform.TransformDirection (Vector3.forward); } 
    if (Input.GetKey("space")) {upvec.y = jumpSpeed; //set to non-zero, I swear} 

    transform.Rotate (0, Input.GetAxis ("Horizontal") * rotateSpeed, 0);//rotate 
    float curSpeed = speed * Input.GetAxis ("Vertical");//allows backwards 
    text_3.text = (forward * curSpeed).ToString(); //my own debugging 
    controller.Move (forward * curSpeed); //moves backwards/forwards 
    text_1.text = upvec.ToString(); 
    controller.Move (upvec * Time.deltaTime); //SHOULD move upwards but does not 
} 

Персонаж поворачивается и движется вперед/назад просто отлично. Он просто не прыгнет.

Я попытался просто изолировать важный код, чтобы проиллюстрировать проблему. Дайте мне знать, если я могу что-то сделать, чтобы прояснить moreso.

Благодаря

ответ

1

ваших вверх движение кадров зависит

controller.Move (upvec * Time.deltaTime) 

Но ваше движение вперед не является:

float curSpeed = speed * Input.GetAxis ("Vertical");//allows backwards 
controller.Move (forward * curSpeed); //moves backwards/forwards 

Если у вас есть высокий фреймрейт, скажем, 60 FPS

Ваше движение вперед будет в 60 раз выше вашего движения вверх, resu в небольшом видимом восходящем движении.