Menu
CoddyTech

Được nhấn trong khung hình này

Thuộc phần Xây dựng trò chơi thực tế trong hành trình Unity của Coddy. Bài học 46 trên 60.

isPressed trả lời câu hỏi “nút có đang được nhấn không?” ở mỗi khung hình khi giữ nút. Với thao tác chỉ nên xảy ra một lần mỗi lần nhấn, bộ điều khiển có thêm hai câu trả lời: wasPressedThisFrame chỉ là true trong khung hình phím hoặc nút được nhấn xuống, còn wasReleasedThisFrame chỉ là true trong khung hình phím hoặc nút được thả ra. Chúng thay cho Input.GetKeyDown và Input.GetKeyUp, cũng như GetMouseButtonDown và GetMouseButtonUp. Con dấu cao su này hạ xuống khi nhấn nút chuột và nhấc lên khi thả nút:

using UnityEngine;
using UnityEngine.InputSystem;

public class Stamp : MonoBehaviour
{
    public float drop = 0.5f;
    private int stamps;

    void Update()
    {
        Mouse mouse = Mouse.current;

        if (mouse.leftButton.wasPressedThisFrame)
        {
            transform.position += Vector3.down * drop;
            stamps++;
            Debug.Log("Stamp " + stamps);
        }
        if (mouse.leftButton.wasReleasedThisFrame)
        {
            transform.position += Vector3.up * drop;
        }
    }
}

Nhấn chuột trong nửa giây sẽ ghi Stamp 1 một lần, đồng thời đưa con dấu xuống một lần rồi lên lại một lần. Nếu dùng isPressed trong if đầu tiên, cùng lần nhấn đó sẽ ghi khoảng 30 dấu và làm con dấu lún sâu 15 đơn vị vào bàn. Phím cũng hoạt động tương tự: Keyboard.current.spaceKey.wasPressedThisFrame là true một lần mỗi khi nhấn phím Space.

challenge icon

Thử thách

Trung bình

Cho vận động viên chạy nước rút xuất phát bằng phím Space: cúi xuống rồi đứng lên chạy.

  1. Trong Update(), khi !running và Keyboard.current.spaceKey.wasPressedThisFrame: đặt set, di chuyển xuống crouch, ghi lại Set.
  2. Khi set và wasReleasedThisFrame: xóa set, đặt running, di chuyển lên crouch, ghi lại Go!.
  3. Khi running, di chuyển theo hướng +z với tốc độ speed đơn vị mỗi giây.

Nhấn Chơi, giữ phím Space rồi thả ra: trong Console sẽ hiện Set, rồi đến Go! Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using UnityEngine.InputSystem;

public class Sprinter : MonoBehaviour
{
    public float speed = 6f;
    public float crouch = 0.3f;

    private bool set;
    private bool running;

    void Update()
    {
        // Nhấn giữ Space: cúi người và ghi log Set. Thả Space: đứng dậy, ghi log Go! rồi chạy.
    }
}

Tất cả bài học trong Xây dựng trò chơi thực tế

Tự luyện tập: Playground Unity