AI动作:
没发现玩家时:待机、巡逻、做动作
发现玩家:追击、攻击、返回原位
有限状态机(FSM):管理AI的有限状态,达成什么条件就切换到相应的状态
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
//举例AI的几种行为
public enum EnemyState
{
Idle,//待机0
Patrol,//巡逻1
Chase,//追击
Attck,//攻击
Die,//死亡
Back,//返回原点
}
public class EnemyAI : MonoBehaviour
{
//保存当前状态
public EnemyState curSyate;
//拿到自动寻路组件
NavMeshAgent agent;
//拿到动画组件
Animator animator;
//待机参数
//待机时间
float patrol_wait_time = 5f;
//计时器
float time = 0;
//巡逻参数
//巡逻半径
float Patrol_Radius = 15f;
//巡逻速度
float Patrol_Speed = 2f;
//追击参数
//追击目标
public Transform Target;
//AI感知范围
float chase_radius = 8f;
//追击速度
float Chase_Speed = 5f;
//攻击参数
//攻击距离
float attack_radius = 2.5f;
//攻击冷却
float Attack_Timer = 0f;
void Start()
{
//初始化状态
curSyate = EnemyState.Idle;
animator = GetComponent<Animator>();
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
Check();
/*
添加动画:
1、确定当前状态;
2、用anyState来连接各个动画,因为不确定AI啥时候会切换到什么状态
3、将枚举变量换成int类型
*/
animator.SetInteger("EnemyState", (int)curSyate);
//时刻监听当前状态
switch (curSyate)
{
case EnemyState.Idle:
Idle();
break;
case EnemyState.Patrol:
Patrol();
break;