Crystal‘s Unity Notes:AI巡逻

这篇博客探讨了在Unity游戏引擎中如何利用人工智能实现角色的巡逻行为。AI角色在未发现玩家时会进行待机、巡逻和做动作,一旦发现玩家,则会转为追击、攻击并最终返回原位。文章核心是通过有限状态机(FSM)来管理AI的不同状态,根据预设条件进行状态切换,以实现复杂的游戏逻辑。
摘要由CSDN通过智能技术生成

 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;
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值