前言

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

但是这样我们并没有让我们的角色学会思考,他只是机械的去完成一些步骤,这并不能体现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. Timer定时方法(间隔时间后执行)

    Timer time = new Timer(); time.schedule(new TimerTask() { @Override public void run() { // TODO Auto ...

  2. 初识Asp.Net WebApi

    using System;using System.Collections.Generic;using System.Linq;using System.Net.Http;using System.T ...

  3. hibernate原生sql获取list<T>异常解决

    /** * <p>Title: getbigestMinIntegral</p> * <p>Description: 获取最大的MinIntegral(原则上即最高 ...

  4. Css - 选择器和样式

    Css - 选择器和样式 标签选择器 即使用html标签作为选择对象 <style>     div{ background:red; } </style> <div&g ...

  5. Python学习笔记-SQLSERVER的大批量导入以及日常操作(比executemany快3倍)

    环境 : python3.6 / win10 / vs2017 / sqlserver2017 一.需要安装的包pymssql pip install pymssql 二.pymssql模块的介绍 p ...

  6. OPENSSL_Applink 错误

    原因 : 程序太老, 调用了参数为 FILE * 类型的 api. 解决方式: 1. windows exe, 可直接#include<openssl/applink.c>  // ext ...

  7. Mac 装Sequel pro 连接 Mysql 8.0 失败、登录不了、loading问题

    最近都没更新博客,零零散散的笔记也都没整理,so 觉得还是不放上来了. 高兴的是入手了期待好久的水果机,开始了各种捣鼓,好想大撸一下代码啊.... 回到正轨,刚装了mysql8.0, 想装下mysql ...

  8. JAVA 导包,使用前面的类~

    package Code413;/*1.导包,也就是指出需要使用的类,在什么位置import 包名称,类名称对于与当前同类属于同一个包的情况,可以省略导包语句不写..2.创建,格式:类名称 对象名=n ...

  9. scikit-learn中机器学习模型比较(逻辑回归与KNN)

    本文源自于Kevin Markham 的模型评估:https://github.com/justmarkham/scikit-learn-videos/blob/master/05_model_eva ...

  10. httpclient的封装完整版

    applicationContext-httpclient.xml <?xml version="1.0" encoding="UTF-8"?> & ...