2016-02-05 3 views
0

Этот сценарий, который я использую для перемещения моей игры Endless Runner, сделанной в Unity3D 5.1.2f1 Personal. Перемещение вправо работает полностью. Перемещение влево не работает, но debug.log работает. В инспекторе я вижу, что «leftrightSpeed» установлен на 2 при движении вправо, но при перемещении влево ничего не происходит с поплавком. Что я здесь делаю неправильно?Правило ввода ввода ключа Unity неверно

(Поплавковая скорость установлена ​​на 5 в инспекторе).

using UnityEngine; 
using System.Collections; 

public class PlayerController : MonoBehaviour { 

    public float speed; 
    public float leftrightSpeed; 
    private Rigidbody rb; 

    void Start() 
    { 
    rb = GetComponent<Rigidbody>(); 
    } 

    void FixedUpdate() 
    { 
     //LEFT 
     if (Input.GetKey("left")) 
     { 
      leftrightSpeed = -2f; 
      Debug.Log ("LEFT"); 
     } 
     else 
     { 
      leftrightSpeed = 0f; 
     } 

     //RIGHT 
     if (Input.GetKey("right")) 
     { 
      leftrightSpeed = 2f; 
      Debug.Log ("RIGHT"); 
     } 
     else 
     { 
      leftrightSpeed = 0f; 
     } 

    Vector3 movement = new Vector3 (-2f, 0.0f, leftrightSpeed); 

    rb.AddForce (movement * speed); 
    } 
} 
+0

вы не должны использовать FixedUpdate. google миллион страниц на этом. очень жаль, что Единство когда-либо упоминало об этом в руководстве. – Fattie

+0

На этом сайте нет чатовских заголовков вопросов – Fattie

ответ

1

Джерри правильно это ваш второй, если Постулаты, что отменяет ваше левое движение. Вы можете улучшить свой метод FixedUpdate, просто используя GetAxis так:

void FixedUpdate() 
{ 
    leftrightSpeed = Input.GetAxis("Horizontal") * 2; 
    Vector3 movement = new Vector3 (-2f, 0.0f, leftrightSpeed); 
    rb.AddForce (movement * speed); 
} 

По существу GetAxis даст число от -1 и 1 в зависимости от того, какая клавиша нажата в соотношении к «оси» горизонтальное. Это будет работать для игровых контроллеров, клавиш со стрелками или даже по отношению к w/a/s/d по умолчанию.

Ознакомьтесь с документацией для GetAxis.

+0

Спасибо, человек! Это работает отлично! – BelgianWizard

0

Вы устанавливаете leftrightSpeed на 0 в блоке еще второе условие, когда вы нажимаете что-нибудь еще потом правую клавишу. Вот почему он работает правильно. Вот и все.

Чтобы сделать это правильно, измените его на

if (Input.GetKey("right")) 
    { 
     leftrightSpeed = 2f; 
     Debug.Log ("RIGHT"); 
    } 
    else if (Input.GetKey("left")) 
    { 
     leftrightSpeed = -2f; 
     Debug.Log ("LEFT"); 
    }  
    else 
    { 
     leftrightSpeed = 0f; 
    } 
+0

Подождите, так как мне нужно его исправить? Я действительно не вижу этого ... – BelgianWizard

+0

Я отредактировал ответ. Взглянуть. –

+0

Хорошо, я вижу это сейчас! Огромное спасибо!! – BelgianWizard

Смежные вопросы