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)


รหัสอินพุตของคุณถูกต้อง แต่ยังมีบางสิ่งที่ไม่ถูกต้อง ขั้นแรกให้คุณเขียน Initializer (วิธีสแตติก) นอกฟังก์ชันใดๆ จำไว้ว่าเมื่อคุณทำใน 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);
        }
    }
}
person Hamza Hasan    schedule 19.02.2016
comment
ขอบคุณสำหรับการตอบกลับโดยละเอียด! ฉันได้แก้ไขโค้ดของฉันในทุกทิศทาง :) - person Jon; 22.02.2016