前言

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

但是这样我们并没有让我们的角色学会思考,他只是机械的去完成一些步骤,这并不能体现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. 五十七、linux 编程——UDP 编程 域名解析

    57.1 介绍 57.1.1 域名解析 57.1.2 域名解析函数 gethostent 可以获取多组,gethostbyname 只可以获取一组 /etc/hosts 文件设置了域名和 IP 的绑定 ...

  2. Java JPS找不到正在执行的java进程 jps cannot see running java process

    最近磁盘进展,把临时目录/tmp给全删了,结果发现jps的输出为空,找不到正在运行的jvm进程. 但是新建的进程没有问题,能够正常查看: [root@node-master ~]# ps -e|gre ...

  3. 第30月第18天 autolayout代码

    1.上下左右 [tipsLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; { id view1 = tipsLabel; id view2 ...

  4. spring.http.multipart.maxFileSize提示无效报错问题处理

    在SpringBoot项目中,配置spring.http.multipart.maxFileSize用于限定最大文件上传大小. 但是,SpringBoot版本不同,关于这一块的配置也不相同. 1.Sp ...

  5. mysql 1194 – Table ‘tbl_video_info’ is marked as crashed and should be repaired 解决方法

    执行REPAIR TABLE `tbl_vedio_info`; 然后就可以了

  6. Leetcode-1.两数之和

    题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...

  7. easyui,datagrid表格,行内可编辑

    最近用到easyui,需要表格内编辑,但是我同一个页面有多个表格,把官方的代码修改了一下,如下: HTML代码 <table id="dg" class="easy ...

  8. 2018-2019-2-20175225 实验一 《Java开发环境的熟悉》实验报告

    2018-2019-2-20175225 实验一 <Java开发环境的熟悉>实验报告 一.实验内容及知识点 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA编辑.编 ...

  9. CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基

    https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...

  10. 【easy】107. Binary Tree Level Order Traversal II 按层输出二叉树

    按层输出二叉树,广度优先. 3 / \ 9 20 / \ 15 7 [ [15,7], [9,20], [3] ] /** * Definition for a binary tree node. * ...