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.
Thử thách
Trung bìnhĐiều khiển khinh khí cầu bằng Keyboard.current và Mouse.current.
- Khi nhấn
rightArrowKeyhoặcdKeyvàisPressed, di chuyển theo trục +x với tốc độdriftđơn vị mỗi giây; vớileftArrowKeyhoặcaKey, di chuyển theo trục -x. bool burnerlà trạng thái nhấnspaceKeyhoặcleftButton; gọiflame.SetActive(burner);.- 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ơngroundY.
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ế
1Văn bản trên màn hình
Canvas và văn bảnHiển thị điểm sốĐịnh dạng sốĐồng hồ đếm ngượcÔn tập: Đồng hồ tốc độ7Điều khiển thời gian
Tạm dừng bằng timeScaleChuyển động chậmThời gian không bị co giãnÔn tập: Bullet Time2Nút bấm và màn hình
Nút bấm và onClickLambdaKết nối trong InspectorBật và tắt bảngThanh máuÔn tập: Cửa hàng nâng cấp5Lưu dữ liệu với PlayerPrefs
Lưu một sốTải với giá trị mặc địnhĐiểm cao nhấtLưu cài đặtÔn tập: Tiền xu trong ngân hàng3Trình quản lý trò chơi
Một script chạy trò chơiSingletonCác trạng thái trò chơiChuyển đổi trạng tháiÔn tập: Trình quản lý vòng chơi6Dự án: trò chơi chạy vô tận
Ba làn đườngChướng ngại vật phía trước9Hệ thống đầu vào mới
Hai hệ thống đầu vàoBàn phím và chuộtĐược nhấn trong khung hình nàyThao tác đầu vàoÔn tập: chuyển đổi đầu vàoTự luyện tập: Playground Unity