2016-02-19 2 views
0

Я довольно новичок в Unity и искал тонны учебников/руководств в Интернете. Моя проблема в том, что по какой-то причине, когда я использую приведенный ниже код, он не обнаруживает, нажата ли клавиатура. Возможно, я неправильно использую клавиатуру. Вот мой код:Unity - обнаружение ввода клавиатуры

using UnityEngine; 
using System.Collections; 

public class Player : MonoBehaviour { 

    Vector3 player = GameObject.FindGameObjectWithTag("Player").transform.position; 

    void Update() { 
     if (Input.GetKeyDown(KeyCode.D)) { 
      player.x += 0.01F; 
     } 
    } 
} 

ответ

0

Ваш код ввода правильный, но все еще пара вещей, которые находятся не в нужном месте. Сначала вы написали инициализатор (статический метод) вне любой функции. Помните, когда вы делаете это в Unity3d C#, тогда он всегда будет давать вам предупреждение/ошибку.

Если вы используете C#, не используйте эту функцию в инициализаторах конструктора или поля, вместо этого переместите инициализацию в функцию Awake или Start.

Итак, сначала переместите такие линии в обе функции.

Во-вторых, вы получаете Vector3 и пытаетесь использовать его как ссылку, это означает, что вы получили ссылку на позицию в форме Vector3, и каждое изменение, сделанное в этой переменной, будет эффективным, это не так, это не будет ,

Но да, вы можете сделать это, получив Transform или GameObject, они сделают это за вас.

В-третьих, вы пытаетесь изменить компонент Vector3 («x» в вашем случае), что также неприемлемо для Unity. То, что вы можете сделать, - либо назначить позицию с new Vector3, либо создать отдельную переменную Vector3, изменить ее, а затем присвоить ее позиции.

Таким образом, после всех этих адресов ваш код должен быть похожим на это,

using UnityEngine; 
using System.Collections; 

public class NewBehaviourScript : MonoBehaviour 
{ 
    Transform player; 

    // Use this for initialization 
    void Start() 
    { 
     player = GameObject.FindGameObjectWithTag ("Player").transform; 
    } 

    // Update is called once per frame 
    void Update() 
    { 

     if (Input.GetKeyDown (KeyCode.D)) { 

      // Remove one of these two implementations of changing position 

      // Either 
      Vector3 newPosition = player.position; 
      newPosition.x += 0.01f; 
      player.position = newPosition; 

      //Or 
      player.position = new Vector3 (player.position.x + 0.01f, player.position.y, player.position.z); 
     } 
    } 
} 
+0

Спасибо за подробный ответ! Я изменил свой код для каждого направления. :) – Jon

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