Menu
CoddyTech

Bàn phím và chuột

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 45 trên 60.

Input System cung cấp cho mỗi thiết bị một đối tượng. Keyboard.current là bàn phím, và mỗi phím trên đó là một điều khiển có tên: spaceKey, aKey, upArrowKey, hoặc Keyboard.current[Key.Space] để truy cập bất kỳ phím nào bằng giá trị Key của nó. Mouse.current là chuột, với leftButton, rightButton và position. isPressed của một điều khiển là true trong mỗi khung hình khi bạn giữ nút đó, giống như Input.GetKey. Tàu ngầm này lặn và nổi lên bằng các phím mũi tên, đồng thời bật đèn pha khi bạn giữ nút chuột:

using UnityEngine;
using UnityEngine.InputSystem;

public class Submarine : MonoBehaviour
{
    public float diveSpeed = 2f;
    public Light searchlight;

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard == null) return;   // không có bàn phím nào được kết nối

        if (keyboard.downArrowKey.isPressed)
            transform.position += Vector3.down * diveSpeed * Time.deltaTime;
        if (keyboard.upArrowKey.isPressed)
            transform.position += Vector3.up * diveSpeed * Time.deltaTime;

        searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
    }
}

current là thiết bị được sử dụng gần đây nhất, và giá trị này là null khi không có thiết bị nào: điện thoại hoặc máy chơi game có thể không có bàn phím, và các bước kiểm tra null giúp tập lệnh không phát sinh lỗi trong trường hợp đó. Bàn phím không có trục, nên phím mũi tên xuống và phím S là hai phím riêng biệt: để tàu ngầm cũng lặn khi nhấn S, hãy kiểm tra keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() trả về vị trí con trỏ dưới dạng Vector2, tính bằng pixel màn hình từ góc dưới bên trái, giống như Input.mousePosition.

challenge icon

Thử thách

Trung bình

Điều khiển khinh khí cầu bằng Keyboard.current và Mouse.current.

  1. Khi nhấn rightArrowKey hoặc dKey và isPressed, di chuyển theo trục +x với tốc độ drift đơn vị mỗi giây; với leftArrowKey hoặc aKey, di chuyển theo trục -x.
  2. bool burner là trạng thái nhấn spaceKey hoặc leftButton; gọi flame.SetActive(burner);.
  3. Khi bật đầu đốt, bay lên với tốc độ rise; khi tắt, hạ xuống với tốc độ sink, không bao giờ thấp hơn groundY.

Nhấn Chơi rồi bay: giữ phím Space hoặc nút chuột để bay lên. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using UnityEngine.InputSystem;

public class Balloon : MonoBehaviour
{
    public float drift = 2f;
    public float rise = 3f;
    public float sink = 1f;
    public float groundY = 2f;
    public GameObject flame;

    void Update()
    {
        // Di chuyển theo phương ngang bằng các phím mũi tên hoặc A và D, đốt lửa bằng Space hoặc chuột
    }
}

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