Unity - Mendeteksi input keyboard

Saya cukup baru di Unity dan telah mencari banyak tutorial/panduan online. Masalah saya adalah karena alasan tertentu ketika saya menggunakan kode di bawah ini tidak mendeteksi jika keyboard diklik. Mungkin saya salah melakukan deteksi keyboard. Ini kode saya:

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 sumber


Jawaban (1)


Kode masukan Anda sudah benar tetapi masih ada beberapa hal yang tidak tepat. Pertama, Anda menulis penginisialisasi (metode statis) di luar fungsi apa pun. Ingat ketika anda melakukannya di Unity3d C# maka akan selalu memberikan peringatan/kesalahan.

Jika Anda menggunakan C# jangan gunakan fungsi ini di konstruktor atau penginisialisasi bidang, Sebaliknya pindahkan inisialisasi ke fungsi Awake atau Start.

Jadi pertama-tama pindahkan garis semacam itu di salah satu fungsi.

Kedua Anda mendapatkan Vector3 dan mencoba menggunakannya sebagai referensi, artinya Anda mendapat referensi posisi berupa Vector3 dan setiap perubahan yang dilakukan pada variabel tersebut akan efektif, bukan itu masalahnya, tidak akan.

Tapi ya, Anda bisa melakukannya dengan mendapatkan Transform atau GameObject, mereka akan melakukannya untuk Anda.

Hal ketiga dan terakhir, Anda mencoba mengubah Vector3 komponen ("x" dalam kasus Anda) secara langsung, itu juga tidak dapat diterima untuk Unity. Yang dapat Anda lakukan adalah menetapkan posisi dengan new Vector3 atau membuat variabel Vector3 terpisah, mengubahnya, lalu menetapkannya ke posisi.

Jadi setelah semua alamat ini, kode Anda akan terlihat seperti ini,

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
Terima kasih atas tanggapan mendetailnya! Saya telah memodifikasi kode saya untuk segala arah. :) - person Jon; 22.02.2016