前言

在前面的教程中我们已经基本实现了路径导航和障碍物规避。

但是这样我们并没有让我们的角色学会思考,他只是机械的去完成一些步骤,这并不能体现Rain插件的智能。

一个角色他应该有多个不同的状态,待机,巡逻,发现,追逐,攻击等等。并且能够思考,自己反应自己的行为。

状态之间的转换需要信号,就像我们现实世界中,信号来源是视觉和听觉。

那我们可不可以为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,发现控制台输出。

我们的自定义节点已经被执行。

这一节我们主要介绍了,如何切换行为树,如何定义变量如何自定义节点,

如何巡逻,追逐,攻击。

内容比较多了,故将视觉和听觉监听放在下一节再介绍。

希望此文能够帮助到您,可以关注我已获得我发布最新的文章的通知。

Unity Rain Ai 插件基本使用(二)的更多相关文章

  1. Unity Rain Ai 插件基本使用(一)

    1.下载安装Rain 插件 原先可以在unity的Asset Stroe 下载到,但是现在Rain 的开发公司因为人工智能的发展,公司得到投资,所以下架了rain插件. 所以我给出网盘链接 链接:ht ...

  2. Unity时钟定时器插件——Vision Timer源码分析之二

      Unity时钟定时器插件——Vision Timer源码分析之二 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面的已经介绍了vp_T ...

  3. Unity的NGUI插件篇——入场效果

    Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自  大学霸 <NGU ...

  4. Unity时钟定时器插件

    Unity时钟定时器插件 http://dsqiu.iteye.com/blog/2020603https://github.com/joserocha3/KillerCircles/blob/67a ...

  5. 记录一个Unity播放器插件的开发

    背景 公司最近在做VR直播平台,VR开发我们用到了Unity,而在Unity中播放视频就需要一款视频插件,我们调研了几个视频插件,记录两个,如下: Unity视频插件调研 网上搜了搜,最流行的有以下两 ...

  6. Curved UI - VR Ready Solution To Bend Warp Your Canvas 1.7,1.8,2.2,2.3 四种版本压缩包(Unity UGUI曲面插件),可以兼容VRTK

    Curved UI - VR Ready Solution To Bend Warp Your Canvas 1.7,1.8,2.2,2.3 四种版本压缩包(Unity UGUI曲面插件) 可以兼容V ...

  7. Android插件化(二):使用DexClassLoader动态载入assets中的apk

    Android插件化(二):使用DexClassLoader动态载入assets中的apk 简单介绍 上一篇博客讲到.我们能够使用MultiDex.java载入离线的apk文件.须要注意的是,apk中 ...

  8. 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板

    标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155 ...

  9. 微信小程序——表单验证插件WxValidate的二次封装(二)

    在上一篇博客<微信小程序——仿jqueryValidate表单验证插件WxValidate的二次封装>中,我将WxValidate做了再次封装,简化了初始规则数据的构造,但是当有错误时页面 ...

随机推荐

  1. H5_0003:JS禁用调试,禁用右键,监听F12事件的方法

    1,禁用调试 // 这个方法是防止恶意调试的 (function () { console["log"]("=============================== ...

  2. @JoinColumn解释

    @JoinColumn与@Column标记一样,是用于注释表中的字段的.它的属性与@Column属性有很多相同之处,这里就不详细讲述.请读者参阅5.2.2小节中有关@Column属性的部分. l    ...

  3. java 导出

    按钮 <a href="###" class="eui-btn eui-btn-small" onclick="Export()"&g ...

  4. XXX系统项目分析

    目标: 实现网上需求征集与审核. 好处: (1)网上填报不受时间和地点限制: (2)流程简单明确,节省人力物力: (3)信息存储,查询,筛选远比纸质材料方便: (4)方便统计,分析数据: 度量标准: ...

  5. eclipse搭建elastic-job

    1.官网下载eclipse----面向Java EE企业级开发的Eclipse IDE for Java EE Developers:2.官网下载maven,并配置环境变量---MAVEN_HOME: ...

  6. Codeforces Round #542 (Div. 1) 题解

    开学了住校了打不了深夜场 好难受啊QwQ A 显然对于每个起点,我们只需要贪心记录这个起点出发出去的糖果数量以及离自己最近的糖果 因为这个起点最后一次装载糖果一定是装载终点离自己最近的那个糖果 $ O ...

  7. GitHub:本地项目上传与团队协作

    第一部分:我的本次作业成果 我自己个人的github地址是:colintz的个人仓库 我们开发团队小组的github地址是:小组3集中营 第二部分:强烈推荐的github资源 对于和我一样,初次接触g ...

  8. 【Android手机测试】linux内存管理 -- 一个进程占多少内存?四种计算方法:VSS/RSS/PSS/USS

    在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/USS四种形式,这四种形式首字母分别是Virtual/Resident/Proportional/Unique的意思. ...

  9. kibana转码显示

    $('.truncate-by-height').each((i, dom) => { $(dom).html(decodeURIComponent($(dom).html())) })

  10. jquery.form插件 提交表单 type="hidden"取不到值的问题记录

    1.外国文献:说可以改成其他的(非hidden),再加style="display:none"隐藏. <INPUT type="password" sty ...