Triển khai hệ thống Parkour trong Unity

Khái niệm parkour, một môn huấn luyện tập trung vào việc vượt qua các chướng ngại vật thể chất bằng chuyển động, đã trở nên phổ biến rộng rãi trong trò chơi điện tử, mang đến cho người chơi một môi trường tương tác và hấp dẫn. Việc triển khai hệ thống này trong Unity có thể nâng cao trải nghiệm chơi trò chơi. Hướng dẫn này sẽ hướng dẫn bạn qua quá trình thiết lập hệ thống parkour cơ bản trong Unity, tập trung vào việc chạy trên tường và nhảy vòm.

Tài sản cần thiết

1. Thiết lập cảnh

  • Đảm bảo môi trường có tường và chướng ngại vật được gắn thẻ thích hợp, sử dụng "Wall" cho tường và "Obstacle" cho chướng ngại vật có thể che chắn.

2. Sửa đổi tập lệnh 'SC_TPSController' để chạy trên tường

2.1. Phát hiện một bức tường:

  • Phương pháp này kiểm tra xem nhân vật có ở cạnh bức tường hay không bằng cách sử dụng raycasting.
bool IsBesideWall(Vector3 direction)
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, direction, out hit, 1f))
    {
        if (hit.transform.CompareTag("Wall"))
        {
            return true;
        }
    }
    return false;
}

2.2. Chạy trên tường

  • Coroutine này xử lý việc chạy trên tường.
public float wallRunTime = 2f; // Duration of the wall run.

IEnumerator WallRun(Vector3 direction)
{
    float startTime = Time.time;
    canMove = false; // Disable regular movement during wall run.

    while (Time.time - startTime < wallRunTime)
    {
        characterController.Move(direction * speed * Time.deltaTime);
        yield return null;
    }

    canMove = true; // Enable regular movement after wall run.
}
  • Tích hợp chạy tường trong phương thức 'Update()':
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(-transform.right));
}

3. Sửa đổi 'SC_TPSController' cho Vaulting

3.1. Phát hiện chướng ngại vật

  • Kiểm tra chướng ngại vật có thể che chắn được ở phía trước nhân vật.
bool IsObstacleInFront()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
    {
        if (hit.transform.CompareTag("Obstacle"))
        {
            return true;
        }
    }
    return false;
}

3.2. Vòm

  • Thêm một phương pháp vault:
void Vault()
{
    canMove = false; // Disable regular movement during vaulting.
    
    // Translate the player over the obstacle.
    Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
    characterController.Move(vaultMovement);
    
    canMove = true; // Enable regular movement after vaulting.
}
  • Tích hợp vault trong phương thức 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Phần kết luận

Những sửa đổi này sẽ giới thiệu các chức năng chạy trên tường và vòm cho bộ điều khiển người chơi bên thứ ba hiện có. Kiểm tra các chuyển động mới này trong nhiều tình huống khác nhau để đảm bảo chúng hoạt động như dự định. Có thể cần phải điều chỉnh tùy thuộc vào môi trường cụ thể của trò chơi hoặc cơ chế parkour mong muốn.

Bài viết được đề xuất
Hệ thống đối thoại vì sự thống nhất
Cách thực hiện điều khiển cần cẩu trong Unity
Tạo chuyển động của người chơi trong Unity
Bộ điều khiển ô tô cho Unity
Thêm hỗ trợ nhảy đôi vào bộ điều khiển nhân vật nền tảng 2D trong Unity
Unity Cách tạo điều khiển cảm ứng trên thiết bị di động
Bộ điều khiển máy bay cho Unity