Trong việc phát triển trò chơi, kỹ năng xử lý input là một phần không thể thiếu. Với C#, việc điều khiển các sự kiện từ bàn phím, chuột hay bộ điều khiển trở nên dễ dàng hơn. Bài viết này sẽ khám phá cách sử dụng C# để xử lý input trong game.
Tổng quan xử lý input trong game với C#
Sau khi phát triển Game Unity, mục tiêu tiếp theo là phát hành trên nhiều nền tảng. Để tăng cơ hội trải nghiệm người dùng, việc xử lý đầu vào đối với nhiều nền tảng khác nhau là yêu cầu cấp thiết. Input Manager thiết lập các đầu vào từ bàn phím, chuột, bộ điều khiển, màn hình cảm ứng. Những đầu vào này được ánh xạ thành tên các chuỗi văn bản mà con người có thể căn cứ vào đó để lập trình. Nó được viết thành tập lệnh và gắn vào các GameObject.
Sử dụng cài đặt đầu vào để xác định các trục đầu vào và hành động trò chơi cho Project. Tại menu trên cùng: Edit > Project Settings, sau đó chọn danh mục Input.
Áp dụng Xử lý input trong game với C#
Đoạn mã sau sử dụng cho nút nhảy, khi nhân vật vượt qua các chướng ngại vật:
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float jumpForce = 10f;
public Rigidbody2D rb;
private bool isGrounded;
public Transform groundCheck;
public float groundCheckRadius = 0.2f;
public LayerMask whatIsGround;
void Update()
{
// Nếu người chơi chạm đất
isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);
// Nếu người chơi chạm đất và nút Jum được nhấn
if (isGrounded && Input.GetButtonDown("Jump"))
{
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
}
Với input Manager:
Tất cả các trục mà bạn thiết lập trong cài đặt Input đều phục vụ hai mục đích:
- Chúng cho phép bạn tham chiếu đầu vào của mình theo tên trục trong tập lệnh.
- Chúng cho phép người chơi trò chơi của bạn tùy chỉnh các điều khiển theo ý thích của họ.
Trình khởi chạy trò chơi trình bày tất cả các trục được xác định. Trong đó hiển thị tên, mô tả chi tiết và các nút mặc định cho từng trục. Từ đây, họ có thể thay đổi bất kỳ nút nào được xác định trong các trục. Tốt nhất bạn nên viết tập lệnh bằng cách sử dụng các trục thay vì các nút riêng lẻ. Bởi vì, người chơi có thể muốn tùy chỉnh các nút cho trò chơi của bạn.
Đối với người sử dụng sử dụng bàn phím để phát triển sản phẩm, có nhiều cách xử lý đầu vào đa dạng:
Keycode có thể được sử dụng để phát hiện các sự kiện nhấn phím và nhấn phím. Bằng cách sử dụng input.GetKeyDown và input.GetKeyUp
Ví dụ mã dưới đây sử dụng phát hiện từ bàn phím:
using UnityEngine;
public class KeyCodeExample : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("Space key was pressed.");
}
if (Input.GetKeyUp(KeyCode.Space))
{
Debug.Log("Space key was released.");
}
}
}
Sự kiện bàn phím cũng có thể được xử lý bởi phương thức OnGUI:
using UnityEngine;
public class KeyCodeOnGUIExample : MonoBehaviour
{
void OnGUI()
{
if(Event.current.Equals(Event.KeyboardEvent(KeyCode.Space.ToString())))
{
Debug.Log("Space key is pressed.");
}
}
}
Đối với một số sản phẩm sử dụng đầu vào cảm ứng, đặc biệt là các ứng dụng sử dụng di động:
Ví dụ mã sử dụng phát hiện đầu vào cảm ứng trên thiết bị di động:
public class KeyCodeOnGUIExample : MonoBehaviour
{
void OnGUI()
{
if (Event.current.Equals(Event.KeyboardEvent(KeyCode.Space.ToString())))
{
Debug.Log("Space key is pressed.");
}
}
}
using UnityEngine;
public class TouchInput : MonoBehaviour
{
void Update()
{
// Nếu có chạm màn hình
if (Input.touchCount > 0)
{
// kiểm tra tất cả các điểm chạm
for (int i = 0; i < Input.touchCount; i++)
{
// Nhận điểm chạm hiện tại
Touch touch = Input.GetTouch(i);
// Nếu có chạm điểm bắt đầu
if (touch.phase == TouchPhase.Began)
{
// hành động khi chạm
HandleTouchBegin(touch);
}
// Kiểm tra nếu kết thúc chạm
if (touch.phase == TouchPhase.Ended)
{
// hành động khi kết thúc chạm màn hình
HandleTouchEnd(touch);
}
// Nếu di chuyển trên màn hình
if (touch.phase == TouchPhase.Moved)
{
// hành động khi di chuyển
HandleTouchMove(touch);
}
}
}
}
void HandleTouchBegin(Touch touch)
{
// in ra vị trí
Debug.Log("Touch began at position: " + touch.position);
}
void HandleTouchEnd(Touch touch)
{
// in ra vị trí
Debug.Log("Touch ended at position: " + touch.position);
}
void HandleTouchMove(Touch touch)
{
// in ra vị trí
Debug.Log("Touch moved to position: " + touch.position);
}
}
Tổng kết
Bây giờ, bạn đã biết cách xử lý với tín hiệu đầu vào trên các thiết bị khác nhau. Bạn cũng đã biết điều hướng đến cài đặt xử lý đầu vào. Chú ý, với mỗi loại đầu vào trên các thiết bị khác nhau sẽ khác nhau. Vì vậy, việc phát triển trên các nền tảng đòi hỏi bạn phải linh hoạt xử lý trên từng nền tảng cụ thể. Việc áp dụng đa dạng các loại đầu vào sẽ tăng khả năng phát hành biên dịch trên các nền tảng khác nhau.
Nếu bạn muốn tìm hiểu về Game Unity một cách bài bản, khóa học lập trình Game Unity tại CodeGym là lựa chọn hoàn hảo cho bạn. Khóa học cung cấp kiến thức từ cơ bản đến nâng cao, giúp bạn nắm vững các kỹ năng phát triển game trên nền tảng Unity.
0 Lời bình