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;
        }
    }
}

person Jon    schedule 19.02.2016    source источник


Ответы (1)


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

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

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

Во-вторых, вы получаете 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);
        }
    }
}
person Hamza Hasan    schedule 19.02.2016
comment
Спасибо за подробный ответ! Я изменил свой код для каждого направления. :) - person Jon; 22.02.2016