Hệ thống State Machine (FSM) cơ bản cho AI

Tags:
AI
Architecture
Design Pattern
Gameplay

C# Code

using UnityEngine;

public class SimpleFSM : MonoBehaviour
{
    public enum AIState { Idle, Patrol, Chase, Attack }

    public AIState currentState;
    public Transform player;
    public float chaseRange = 10f;
    public float attackRange = 2f;

    void Start()
    {
        currentState = AIState.Idle;
    }

    void Update()
    {
        float distanceToPlayer = Vector3.Distance(transform.position, player.position);

        switch (currentState)
        {
            case AIState.Idle:
                // Nếu người chơi ở trong tầm, bắt đầu đuổi theo
                if (distanceToPlayer < chaseRange)
                {
                    currentState = AIState.Chase;
                }
                // Có thể thêm hành vi 'nhìn xung quanh' ở đây
                break;

            case AIState.Patrol:
                // Thực hiện logic đi tuần
                // Nếu thấy người chơi, chuyển sang Chase
                if (distanceToPlayer < chaseRange)
                {
                    currentState = AIState.Chase;
                }
                break;

            case AIState.Chase:
                // Đuổi theo người chơi
                transform.position = Vector3.MoveTowards(transform.position, player.position, 3f * Time.deltaTime);

                // Nếu người chơi ở trong tầm tấn công, chuyển sang Attack
                if (distanceToPlayer < attackRange)
                {
                    currentState = AIState.Attack;
                }
                // Nếu người chơi chạy quá xa, quay lại Idle hoặc Patrol
                else if (distanceToPlayer > chaseRange * 1.5f)
                {
                    currentState = AIState.Idle;
                }
                break;

            case AIState.Attack:
                // Thực hiện logic tấn công (ví dụ: chạy animation, gây sát thương)
                Debug.Log("Attacking player!");

                // Nếu người chơi thoát khỏi tầm tấn công, quay lại Chase
                if (distanceToPlayer > attackRange)
                {
                    currentState = AIState.Chase;
                }
                break;
        }
    }
}

Một cấu trúc Finite State Machine (FSM) đơn giản sử dụng enum và switch-case để quản lý các trạng thái khác nhau của AI, như đi tuần, truy đuổi và tấn công.

Bình luận (0)

Bạn cần đăng nhập để có thể bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Bài viết liên quan

AI chỉ có thể 'nhìn thấy' và phát hiện người chơi nếu họ nằm trong một hình nón phía trước mặt nó. Hữu ích cho các game stealth.

AI
Gameplay
Stealth

AI sẽ bắn đạn về phía người chơi khi họ ở trong tầm tấn công và có một khoảng thời gian chờ (cooldown) giữa mỗi lần bắn.

AI
Gameplay
Spawning
Physics

AI sẽ phát hiện người chơi trong một phạm vi nhất định và bắt đầu di chuyển về phía họ. Khi người chơi ra khỏi phạm vi, AI sẽ dừng lại.

AI
Movement
Gameplay
Player

Một script đơn giản cho AI để di chuyển tuần tự qua một danh sách các điểm (waypoints). Khi đến điểm cuối cùng, nó sẽ quay trở lại điểm đầu tiên.

AI
Movement
Gameplay

Một cấu trúc để một con boss thay đổi hành vi và bộ kỹ năng khi máu của nó xuống dưới các ngưỡng nhất định.

AI
Gameplay
Combat

Giới thiệu về mẫu thiết kế Dependency Injection (DI) và tại sao nó giúp code của bạn dễ bảo trì, dễ test và giảm sự phụ thuộc cứng (hard dependencies).

Architecture
Design Pattern
Optimization

Hướng dẫn cài đặt và sử dụng Zenject, một framework Dependency Injection phổ biến cho Unity, để quản lý các phụ thuộc trong dự án một cách hiệu quả.

Architecture
Design Pattern
DI
Zenject
Optimization

Một mẫu Singleton cơ bản trong Unity để đảm bảo chỉ có một thực thể của một lớp tồn tại trong game. Hữu ích cho các hệ thống toàn cục như GameManager, AudioManager.

Design Pattern
Singleton
Architecture

Một hệ thống kho đồ cơ bản sử dụng ScriptableObject cho dữ liệu vật phẩm và quản lý các ô chứa trong UI.

UI
Gameplay
Inventory
ScriptableObject
Architecture

Một cấu trúc cơ bản để tạo, theo dõi và hoàn thành nhiệm vụ, sử dụng ScriptableObject để định nghĩa nhiệm vụ.

Gameplay
Quest
ScriptableObject
Architecture