unity ik插件机械臂(Unity Rain Ai 插件的使用入门)
目录
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 ,并实现了超类的几个方法:
using RAIN.Action; using RAIN.Core; [RAINAction] public class Test : RAINAction { //在该节点开始执行时调用 public override void Start(RAIN.Core.AI ai) { //添加一个Debug信息 Debug.Log("Attack!!"); base.Start(ai); } //返回此操作成功还是失败 public override ActionResult Execute(RAIN.Core.AI ai) { return ActionResult.SUCCESS; } //在该节点停止时调用 public override void Stop(RAIN.Core.AI ai) { base.Stop(ai); } }运行并切换 model 到 attack ,发现控制台输出 。
这表示我们的自定义节点已经被执行 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!