Hệ thống State Machine (FSM) cơ bản cho AI
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.