Thêm cơ chế tàng hình trong Unity

Cơ chế tàng hình là hệ thống trò chơi cho phép người chơi tránh bị kẻ thù phát hiện. Thường được sử dụng trong các trò chơi tàng hình như *Assassin's Creed* hoặc *Hitman*, các cơ chế này bao gồm các tính năng như hình nón tầm nhìn, phát hiện âm thanh, điểm ẩn nấp và mức độ hiển thị của người chơi. Việc thêm cơ chế tàng hình có thể khiến trò chơi hấp dẫn hơn bằng cách khuyến khích tư duy chiến lược và khen thưởng cho việc lập kế hoạch cẩn thận.

Trong hướng dẫn này, chúng ta sẽ tạo cơ chế tàng hình cơ bản trong Unity. Người chơi sẽ tránh bị phát hiện bởi kẻ thù có hình nón tầm nhìn. Nếu người chơi đi vào hình nón, họ sẽ bị phát hiện.

Bước 1: Thiết lập bối cảnh

Bắt đầu bằng cách tạo một cảnh Unity đơn giản:

  1. Tạo một dự án Unity mới.
  2. Thêm Mặt phẳng để làm mặt đất.
  3. Thêm mô hình 3D (ví dụ: Capsule) để biểu diễn Player.
  4. Thêm một mô hình 3D khác (ví dụ: Khối lập phương) để biểu diễn Kẻ thù.
  5. Đặt Người chơi và Kẻ thù ở các vị trí khác nhau trên Máy bay.

Bước 2: Tạo hình nón tầm nhìn của kẻ thù

Chúng ta sẽ mô phỏng tầm nhìn của kẻ thù bằng cách sử dụng vùng kích hoạt hình nón:

  1. Nhấp chuột phải vào Phân cấp và chọn Tạo > Đối tượng 3D > Hình trụ.
  2. Thay đổi kích thước hình trụ để trông giống hình nón bằng cách điều chỉnh tỷ lệ của nó (ví dụ: X = 1, Y = 0,5, Z = 1).
  3. Xoay nó sao cho mặt phẳng hướng về phía trước (ví dụ: Xoay X = 90).
  4. Đính kèm nó như là một phần tử con của GameObject Kẻ thù.
  5. Đặt Collider của hình nón thành Trigger.
  6. Điều chỉnh tỷ lệ và vị trí sao cho phù hợp với tầm nhìn của kẻ thù.

Bước 3: Viết kịch bản phát hiện kẻ thù

Bây giờ, chúng ta hãy tạo một tập lệnh để phát hiện Người chơi trong phạm vi hình nón:

  1. Tạo một tập lệnh C# có tên là EnemyVision.
  2. Đính kèm tập lệnh vào GameObject của Kẻ thù.
  3. Sử dụng mã sau:
using UnityEngine;

public class EnemyVision : MonoBehaviour
{
    public bool playerDetected = false;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = true;
            Debug.Log("Player Detected!");
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = false;
            Debug.Log("Player Lost!");
        }
    }
}

Tập lệnh này kiểm tra xem Người chơi có vào hay ra khỏi hình nón tầm nhìn không. Đảm bảo GameObject của Người chơi có thẻ Người chơi.

Bước 4: Thêm khả năng hiển thị của người chơi

Tiếp theo, chúng ta hãy triển khai cơ chế hiển thị để phát hiện động hơn. Người chơi sẽ khó bị phát hiện hơn khi cúi mình hoặc ẩn núp:

  1. Tạo một tập lệnh mới có tên là PlayerVisibility.
  2. Đính kèm nó vào GameObject của người chơi.
  3. Sử dụng mã sau:
using UnityEngine;

public class PlayerVisibility : MonoBehaviour
{
    public float visibility = 1.0f; // Full visibility

    void Update()
    {
        // Reduce visibility when crouching (e.g., pressing "C")
        if (Input.GetKey(KeyCode.C))
        {
            visibility = 0.5f;
            Debug.Log("Crouching: Reduced visibility!");
        }
        else
        {
            visibility = 1.0f; // Default visibility
        }
    }
}

Tập lệnh này điều chỉnh mức độ hiển thị của Người chơi dựa trên hành động của họ. Kẻ thù sau đó có thể sử dụng giá trị này để quyết định mức độ dễ dàng phát hiện Người chơi.

Bước 5: Tăng cường khả năng phát hiện kẻ thù

Bây giờ, hãy kết hợp khả năng hiển thị với khả năng phát hiện. Sửa đổi tập lệnh EnemyVision như sau:

using UnityEngine;

public class EnemyVision : MonoBehaviour
{
    public bool playerDetected = false;

    void OnTriggerStay(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            PlayerVisibility playerVisibility = other.GetComponent<PlayerVisibility>();

            if (playerVisibility != null && playerVisibility.visibility > 0.75f)
            {
                playerDetected = true;
                Debug.Log("Player Detected with high visibility!");
            }
            else
            {
                Debug.Log("Player not visible enough to detect.");
            }
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = false;
            Debug.Log("Player Lost!");
        }
    }
}

Tập lệnh này sử dụng mức độ hiển thị của Người chơi để xác định xem họ có bị phát hiện hay không.

Bước 6: Kiểm tra cơ chế tàng hình

Để kiểm tra thiết lập của bạn:

  1. Nhấn nút Phát trong Trình chỉnh sửa Unity.
  2. Di chuyển Người chơi vào phạm vi quan sát của Kẻ thù để kích hoạt khả năng phát hiện.
  3. Nhấn nút cúi người (ví dụ: "C") để giảm khả năng hiển thị và kiểm tra xem nó ảnh hưởng đến khả năng phát hiện như thế nào.

Cải tiến tùy chọn

Sau đây là một số ý tưởng để mở rộng cơ chế tàng hình của bạn:

  • Phát hiện âm thanh: Thêm cơ chế cho phép kẻ địch phát hiện Người chơi dựa trên tiếng động mà chúng tạo ra (ví dụ: chạy).
  • Điểm ẩn núp: Tạo điểm ẩn núp nơi Người chơi không bị phát hiện.
  • Tuần tra kẻ thù: Lập trình kẻ thù tuần tra dọc theo một đường dẫn đã định bằng hệ thống NavMesh của Unity.
  • Trạng thái cảnh báo: Thêm mức cảnh báo cho kẻ thù (ví dụ: nghi ngờ, tìm kiếm, hung hăng).

Phần kết luận

Chúng tôi đã triển khai cơ chế tàng hình cơ bản trong Unity, bao gồm hình nón tầm nhìn và mức độ hiển thị. Các hệ thống này có thể đóng vai trò là nền tảng cho lối chơi tàng hình phức tạp hơn. Thử nghiệm với các tính năng bổ sung để tạo ra trải nghiệm tàng hình hoàn toàn nhập vai cho trò chơi của bạn.