[Unity学习教程] Unity Rain Ai 插件的使用入门

[复制链接]
查看1036 | 回复0 | 2023-8-16 16:30:09 | 显示全部楼层 |阅读模式 来自 中国北京
目录

1、向指定目的移动
2、让物体到达我们指定的点
3、沿着指定路径移动
4、智能规避停滞物
5、为AI角色也添加视觉和听觉
场景预备
举动树切换
为对头添加视觉
追逐举动的实现
增加攻击状态(使用自定义脚本)


1、向指定目的移动

导入后可以看到在顶部已经有了RAIN:

起首创建一个地板和一个Ai对象,如图:


选择要利用的AI对象,创建AI子物体:


我们可以看到AI子物件上有这么一个组件:

   参数如下:
  AI:当前这个rain 控制器的名字
  
  Body:所控制的物体
  
  Mind:思考方式(免费版只有BasicMind)
  
  Behavior Tree:使用的举动树
  
  Open Behavior Editor:打开举动树编辑窗口
  
2、让物体到达我们指定的点

打开举动树编辑窗口:

Behavior Tree :当前的举动树

我们先创建一棵举动树(点击框,选create),给举动树一个名字(注意不能输入中文):

 rain会为我们创建1个root默认节点(默认是SEQ[依次实行其子节点]):


创建一个move的子节点:

我们发现我们缺少一个移动target
如图创建一个导航目的
修改导航目的名称为tar1


我们可以点击这个按钮使tar1沉降到plan上

在举动树上设置目的(注意:肯定要+"")

face target 就是面向的方向

为AI物件指定使用的举动树:

点击运行,我们看到渐渐移动到目的点,且下面举动树,颜色从运行中(黄色)到运行乐成(绿色)


3、沿着指定路径移动

创建route 路径:


在创建的route对象上 点击增加新路点,并将Waypoint Route对象改名为Route:


创建如图所示的举动树:

注意框住的2个内容,i体现迭代变量(当前路点)

在move节点中设置对应的目的:

        设置的是pingpong运动,以是会往返往复。   
4、智能规避停滞物

我们在中央放一个停滞物我们发现它直接穿透了,这不是我们想要的效果。


创建一个导航网格,使其能包住我们必要运算的场景。


点击天生网格:

如许运行后发现,已经可以比力完美的绕开停滞物了。


5、为AI角色也添加视觉和听觉

场景预备

例场景如下:

绿色胶囊体:玩家
红色小球:对头
对头会沿着我布置的场景中的路径做pingpong运动(巡逻)
   注意:我们为全部的墙(停滞物)设置层级:wall,在导航网格的属性中设置要盘算碰撞的层级。(由于在场景中假如有花卉或其他我们不希望进行碰撞的物体,我们就不应该盘算导航)
  
举动树切换

在我们开始之前,我们要知道怎样在rain中进行举动树切换,我们打开对头的AI,
选择灯泡这个选项,这里叫做内存,在rain中你必要保存的变量在这里声明。
我们添加一个string 类型的变量model并赋值为patrol。


创建一个基本的举动树MyAi_01:

创建一个总的举动树MyAi:

将默认SEQ(次序)节点改为PAR(parallel)并行节点。
并使用Constraint节点,进行判定。


为当前举动树绑定MyAi_01举动树:


在大脑思考模式中指定举动树:

运行时,我们发现举动树中我们已经通过constraint节点判定,将MyAi_01举动树绑定到了当前举动树。

云云,我们可以为角色制定多套AI,在肯定条件下进行选择和转换。

为对头添加视觉

在我们的对头上打开rain,在眼睛图标下添加 监督器(注意此时我们添加视觉监督器):


添加后,我们发现我们的“对头”外侧多了绿色的2个环:

   这个环的范围就是我们对头的视觉范围
  
此时我们可以在检视面板调治视觉的范围参数:

Range:半径
Horizontal Angle:水平角
Vertical Angle:垂直角
我们调治参数模仿出对头的视觉范围(此时我规定z轴为对头的正面)


如今我们来给玩家添加信号(在rain中,叫做实体Entity)
选择player如图添加:

添加视觉信号,添加后可以在面板上看到:

为MyAi_01举动树添加上根据路径巡逻,运行如图,已经可以大概切换举动树并根据model实行:


追逐举动的实现

创建一个导航目的,并挂载到玩家的物体上:


创建一个举动树MyAi_02 用作追逐举动树,并设置目的:

在MyAi总举动树上添加该子举动树,并如上设置。model为pursuit

如今就可以在2个状态间转换了。如图所示:


增加攻击状态(使用自定义脚本)

创建攻击举动树MyAi_03;
创建一个 Custom Action 节点,并创建一个自定义脚本Test:


打开Test我们看到,它继承于RAINAction,并实现了超类的几个方法:
  1. using RAIN.Action;
  2. using RAIN.Core;
  3. [RAINAction]
  4. public class Test : RAINAction
  5. {  //在该节点开始执行时调用
  6.     public override void Start(RAIN.Core.AI ai)
  7.     {    //添加一个Debug信息
  8.         Debug.Log("Attack!!");
  9.         base.Start(ai);
  10.       
  11.     }
  12.   //返回此操作成功还是失败
  13.     public override ActionResult Execute(RAIN.Core.AI ai)
  14.     {
  15.         return ActionResult.SUCCESS;
  16.     }
  17.   //在该节点停止时调用
  18.     public override void Stop(RAIN.Core.AI ai)
  19.     {
  20.         base.Stop(ai);
  21.     }
  22. }
复制代码
运行并切换 model 到 attack ,发现控制台输出。

这体现我们的自定义节点已经被实行。

来源:https://blog.csdn.net/flyTie/article/details/127600178
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则