美文网首页
Unity简单AI敌人

Unity简单AI敌人

作者: JayMeWangGL | 来源:发表于2019-07-30 16:13 被阅读0次

在很多游戏中都会看到,当人物进入怪物的仇恨区域时,怪物就会自动寻路到人物处进行攻击;当人物离开区域时,怪物便会停下或者继续巡逻。这就是AI的功能。最近了解到一种制作简单AI的方式,分享一下。

首先,会用到这个组件 NavMesh Agent


NavMesh Agent

Base Offset :碰撞圆柱相对于变换轴心点的偏移量
Speed:最大移动速度
Angular Speed:角速度,即转向的速度
Acceleration:最大加速度
Stopping Distance:停止距离,即距离物体多远停止
Auto Braking:自动减速,启用此选项时,当人物将要到达目的地时将会减速。
Radius:半径
Height:高度
Quality : 躲避的水平,一般我们选默认的High Quality就行了
Priority :躲避优先级

将此组件添加到相应的怪物身上,在场景中创建一个平面,将平面设置为Navigation Static然后打开Navigation进行烘焙(如果没有Navigation可以在Window里面找到)


Navigation

接下来便可以在怪物的身上添加脚本了,首先定义个枚举类型,将需要的动作都存入其中,并将初始状态设置为idle

 
    public enum EnemyState
    {
        idle,
        run,
        attack,
        death
    }
 public EnemyState CurrentState = EnemyState.idle;

在start中初始化参数,获取怪物身上的动画组件,寻路组件,以及要追击的玩家

void Start()
    {
        _animator = GetComponent<Animator>();
        agent = GetComponent<NavMeshAgent>();
        Player = GameObject.FindWithTag("Player").transform;
    }

我们要时刻判断玩家是否在怪物的仇恨区域内,所以状态转换写在在Update中

我们根据距离来判断,所以第一步要获取怪物与玩家之间的距离

float distance = Vector3.Distance(Player.position, transform.position);
  • 如果怪物和玩家的距离大于10,则怪物停留在原地或者继续巡逻
  • 如果距离在2到10之间,则怪物将会追击玩家
  • 如果距离小于2,则怪物便攻击玩家
    用switch语句来进行状态切换
 switch (CurrentState)
        {
            case EnemyState.idle:
                if (distance > 2 && distance <= 10)
                {
                    CurrentState = EnemyState.run;
                }
                if (distance < 2 )
                {
                    CurrentState = EnemyState.attack;
                }
                _animator.Play("Idle");
                agent.isStopped = true;
                break;
            case EnemyState.run:
                if (distance > 10)
                {
                    CurrentState = EnemyState.idle;
                }
                if (distance < 2 )
                {
                    CurrentState = EnemyState.attack;
                }
                _animator.Play("Run");
                agent.isStopped = false;
                agent.SetDestination(Player.position);
                break;
                ......

这两段代码通俗易懂,仅仅是当怪物处于何种状态是便播放相应的动画,在这个阶段中,如果怪物与玩家的距离发生了变化,则就会立刻改变怪物当前的状态。

运行测试 AI.gif

相关文章

  • Unity简单AI敌人

    在很多游戏中都会看到,当人物进入怪物的仇恨区域时,怪物就会自动寻路到人物处进行攻击;当人物离开区域时,怪物便会停下...

  • unity 2d AI 敌人 自动追踪(2)

    今天介绍一个略微智能的AI敌人追踪方法(全网最详尽!!!):先简单说下,AI 敌人的实现逻辑就是 当 player...

  • Project AI Mascot

    先占个坑,桌面AI精灵计划,应答机器人,客户端是Unity制作,初步计划是简单应答,后期可能加入AI,识别语音用讯...

  • unity 2d AI 敌人 自动追踪(1)

    今天介绍第一种只靠 c# 代码的 简单 AI 敌人 追踪方法:简单粗暴 ,上代码1,新建对象2,代码如下: ps,...

  • Unity Ml-Agent 完成你的第一个强化学习项目

    参考内容 CodeMonkey - How to use Machine Learning AI in Unity...

  • Unity | 动画与简单AI寻路

    玩过人机对战游戏的人都知道,一个游戏是有各种机器人的。有些机器人很厉害(比如老版本Dota1里面的帕克精灵龙,总能...

  • RPG游戏开发日志4:简单敌人AI

    本项目同步上传于github和coding上,国内读者可以通过在coding下载项目。也欢迎你加入我的UE4学习交...

  • 秘密潜入敌人AI

    ] xunluo;public GameObject mPlayer;public enum RobotStatu...

  • 秘密潜入敌人AI

    #秘密潜入敌人AI ##巡逻主要代码 using System.Collections; using System...

  • android与unity交互

    [1]android与unity的简单约定 1、android调用unity,展示unity的方法。UnityPl...

网友评论

      本文标题:Unity简单AI敌人

      本文链接:https://www.haomeiwen.com/subject/mycnrctx.html