Cách làm cho NPC đuổi theo người chơi trong Unity bằng NavMesh

Trong hướng dẫn này, chúng ta sẽ sử dụng hệ thống NavMesh của Unity để tạo ra một NPC đuổi theo Người chơi. NavMesh cung cấp khả năng tìm đường và tránh chướng ngại vật hiệu quả, lý tưởng cho hành vi AI trong môi trường 3D.

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

Trước khi triển khai NavMesh, chúng ta cần thiết lập cảnh phù hợp:

  1. Tạo một dự án 3D mới trong Unity.
  2. Thêm Mặt phẳng để làm mặt đất.
  3. Thêm Cube hoặc bất kỳ mô hình 3D nào để biểu diễn Người chơi. Đặt tên là Người chơi.
  4. Thêm một Cube hoặc mô hình 3D khác để đại diện cho NPC. Đặt tên là NPC.
  5. Đặt Người chơi và NPC ở các vị trí khác nhau trên Máy bay.

Bước 2: Nướng NavMesh

Để sử dụng hệ thống NavMesh của Unity, chúng ta cần tạo lưới điều hướng:

  1. Chọn Mặt phẳng đất trong Phân cấp.
  2. Trong Thanh tra, nhấp vào Thêm thành phần và thêm NavMeshSurface.
  3. Trong thành phần NavMeshSurface, hãy đảm bảo Mặt phẳng được đánh dấu là bề mặt có thể đi bộ.
  4. Nhấp vào nút Bake trong thành phần NavMeshSurface để tạo NavMesh.
  5. Tùy chọn: Nếu bạn có chướng ngại vật (ví dụ như tường), hãy đảm bảo chúng có thành phần NavMeshObstacle để chặn chuyển động của NPC.

Bước 3: Thêm NavMeshAgent

Bây giờ, chúng ta sẽ chuẩn bị cho NPC sử dụng tính năng tìm đường của Unity:

  1. Chọn NPC trong Hệ thống phân cấp.
  2. Trong Thanh tra, nhấp vào Thêm thành phần và thêm NavMeshAgent.
  3. Điều chỉnh các thuộc tính của NavMeshAgent khi cần, chẳng hạn như tốc độ, gia tốc và khoảng cách dừng.

Bước 4: Viết kịch bản Chase

Tiếp theo, chúng ta sẽ tạo một tập lệnh để khiến NPC đuổi theo Người chơi:

  1. Nhấp chuột phải vào bảng Project và chọn Create > C# Script. Đặt tên là NPCChase.
  2. Nhấp đúp vào tập lệnh để mở nó trong trình soạn thảo mã của bạn.
  3. Thay thế mã mặc định bằng mã sau:
using UnityEngine;
using UnityEngine.AI;

public class NPCChase : MonoBehaviour
{
    public Transform player; // Reference to the player's position
    private NavMeshAgent agent; // Reference to the NavMeshAgent

    void Start()
    {
        // Get the NavMeshAgent component
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        if (player != null)
        {
            // Set the agent's destination to the player's position
            agent.SetDestination(player.position);
        }
    }
}

Bước 5: Gán tham chiếu tập lệnh và trình phát

Cuối cùng, chúng ta sẽ gán tập lệnh và thiết lập tham chiếu Player:

  1. Chọn NPC trong Hệ thống phân cấp.
  2. Kéo và thả tập lệnh NPCChase vào NPC.
  3. Trong Inspector, hãy xác định vị trí trường Player trong tập lệnh.
  4. Kéo GameObject của Người chơi từ Phân cấp vào trường Người chơi.

Bước 6: Kiểm tra cả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 xung quanh (ví dụ, sử dụng bàn phím hoặc bộ điều khiển).
  3. Quan sát NPC tìm đường và đuổi theo Người chơi một cách năng động, tránh chướng ngại vật khi có thể.

Tùy chọn: Tùy chỉnh hành vi

Bạn có thể cải thiện thêm hành vi của NPC:

  • Khoảng cách dừng: Điều chỉnh Khoảng cách dừng của NavMeshAgent để khiến NPC dừng lại ở một phạm vi nhất định.
  • Tránh chướng ngại vật: Đảm bảo chướng ngại vật có thành phần NavMeshObstacle để tránh chính xác.
  • Hoạt ảnh: Sử dụng hoạt ảnh để làm cho chuyển động của NPC trở nên chân thực hơn bằng cách kích hoạt hoạt ảnh dựa trên tốc độ.

Phần kết luận

Chúng tôi đã tạo ra một NPC có thể đuổi theo Người chơi một cách năng động bằng hệ thống NavMesh của Unity. Phương pháp này mạnh mẽ và có thể dễ dàng mở rộng cho các hành vi AI phức tạp hơn. Thử nghiệm với các thiết lập khác nhau để điều chỉnh đường đi của NPC theo nhu cầu của trò chơi.