Unity Rain Ai 插件基本使用(二)
前言
在前面的教程中我们已经基本实现了路径导航和障碍物规避。
但是这样我们并没有让我们的角色学会思考,他只是机械的去完成一些步骤,这并不能体现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 插件基本使用(二)的更多相关文章
- Unity Rain Ai 插件基本使用(一)
1.下载安装Rain 插件 原先可以在unity的Asset Stroe 下载到,但是现在Rain 的开发公司因为人工智能的发展,公司得到投资,所以下架了rain插件. 所以我给出网盘链接 链接:ht ...
- Unity时钟定时器插件——Vision Timer源码分析之二
Unity时钟定时器插件——Vision Timer源码分析之二 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面的已经介绍了vp_T ...
- Unity的NGUI插件篇——入场效果
Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自 大学霸 <NGU ...
- Unity时钟定时器插件
Unity时钟定时器插件 http://dsqiu.iteye.com/blog/2020603https://github.com/joserocha3/KillerCircles/blob/67a ...
- 记录一个Unity播放器插件的开发
背景 公司最近在做VR直播平台,VR开发我们用到了Unity,而在Unity中播放视频就需要一款视频插件,我们调研了几个视频插件,记录两个,如下: Unity视频插件调研 网上搜了搜,最流行的有以下两 ...
- 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 ...
- Android插件化(二):使用DexClassLoader动态载入assets中的apk
Android插件化(二):使用DexClassLoader动态载入assets中的apk 简单介绍 上一篇博客讲到.我们能够使用MultiDex.java载入离线的apk文件.须要注意的是,apk中 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板
标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155 ...
- 微信小程序——表单验证插件WxValidate的二次封装(二)
在上一篇博客<微信小程序——仿jqueryValidate表单验证插件WxValidate的二次封装>中,我将WxValidate做了再次封装,简化了初始规则数据的构造,但是当有错误时页面 ...
随机推荐
- Python高级笔记(三) -- 私有化
1. 类型1 2. 多模块开发 2.1 import 2.2 from xxx import MyName 区分 import xxx ==> xxx.MyName 可以修改 from xxx ...
- 半导体知识:蚀刻(Etch)工艺讲解
本文转载自微信公众号 - 半导体行业观察 , https://mp.weixin.qq.com/s/F3LXiub6n4iYsQDqDH9K_g
- vue 移动端项目总结(mint-ui)
跨域解决方案 config/dev.env.js 'use strict' const merge = require('webpack-merge') const prodEnv = require ...
- 【vue】渲染大量数据时性能优化
对应vue渲染大量数据时可以考虑下面几点: 1. 异步渲染组件:因为组件渲染太多,影响页面的渲染时间,所有可以延迟组件渲染,可以考虑v-if处理 2. 可以使用虚拟滚动的组件:参考使用这个插件 vue ...
- SQL SERVER获取信息的方法
获取数据库的表 SELECT obj.name tablename, schem.name schemname, CAST ( CASE ) ) END AS BIT) HasPrimaryKey f ...
- 走进异步编程的世界 - 开始接触 async/await(转)
序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $"" 来拼接字符串,相当于string.Fo ...
- string format的各类格式及用法
数字 {0:N2} 12.36 数字 {0:N0} 13 货币 {0:c2} $12.36 货币 {0:c4} $12.3656 货币 "¥{0:N2}" ¥12.36 ...
- debug 2
Red Hat Developer Toolsetdelivers the latest stable versions of essential GCC C, C++, Fortran, and s ...
- GIt -- fatal: refusing to merge unrelated histories 问题处理
今晚碰到这个问题-- fatal: refusing to merge unrelated histories 想了一下,为什么就这样了? 因为我是先本地创建了仓库,并添加了文件,然后再到github ...
- PostMan如何做Post请求测试
首先要下载 一个Postman的软件,我这里没有下载地址,据说要翻 墙 下面是使用postman模拟post请求的步骤 我这里请求的API地址和请求的参数都是乱填写的,使用的时候请自行替换你们需要的A ...