วันเสาร์ที่ 28 มีนาคม พ.ศ. 2558

การเชคปุ่มที่ถูกกดว่าเป็นปุ่มอะไร

     เกมส่วนใหญ่เรามักจะกำหนดเองว่าจะให้ผู้เล่นกดปุ่มไหนเพื่อทำแอคชั่นอะไร
เช่น w a s d เพื่อเดิน spacebar เพื่อกระโดด แต่สำหรับบางเกมเราต้องคอยเชคว่าผู้เล่นกดปุ่มไหนเพื่อนำไปเชคว่าผู้เล่นกดถูกปุ่มหรือเปล่า เช่นเกมแนวกดตาม เกมพิมดีด เกมเต้น


     ที่นี้ตามปกติในเกมประเภทแรกเราจะใช้ Input.GetKey("a") ในการเชคว่าเอ้ะมีการกดปุ่ม A ในเฟรมนี้มั้ยส่วนในเกมประเภทหลังที่พูดถึงถ้าจะทำแบบเดียวกันจะต้องไล่เชคปุ่มบนคีบอร์ดที่มีเป็นร้อยปุ่ม(มั้ง) เปลืองทั้งเวลาและทรัพยากรณ์ CPU เพราะฉะนั้นปกติเราจะใช้ Event ในการเชคกันครับ

ขั้นแรกให้ประกาศ Event ขึ้นมา ที่นี้ให้ชื่อว่า e ครับ
แล้วสั่งให้ตัวแปรนี้รับค่า current event(Input ปัจจุบัน)
Event e = Event.current;
จากนั้นให้เชคว่ามีปุ่มที่กดไหม ถ้ามีก็ให้พิมออกมาว่าปุ่มไหน
if (e.isKey)
     Debug.Log("Detected character: " + e.character);
รวมเป็นโค้ดที่แสดงผลว่ากดปุ่มอะไรไป
public class ExampleClass : MonoBehaviour {
    void Update() {
        Event e = Event.current;
        if (e.isKey)
            Debug.Log("CharacterTyped : " + e.character);
    }
}
ต่อไปลองเปลี่ยนเป็นการเชคดูบ้าง นำ e.character มาเทียบกับ 'a' พอเสร็จจะได้โค้ดหน้าตาตามนี้
public class ExampleClass : MonoBehaviour {
    void Update() {
        Event e = Event.current;
        if (e.isKey)
            if(e.character.ToString() == 'a')
                  Debug.Log("a is pressed");
    }
}
สำหรับตัว Event นอกจากจะเชคค่าตัวอักษรที่พิมเข้ามา ยังสามารถเชตอย่างอื่นได้อีกเพียบดูได้จากลิ้งด้นล่างนี้ครับ

อ้างอิง
docs.unity3d.com/460/Documentation/ScriptReference/Event.html
docs.unity3d.com/460/Documentation/ScriptReference/Event-character.html