Unity进阶:行为树 01
版权申明:
- 本文原创首发于以下网站:
- 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
- 优梦创客的官方博客:https://91make.top
- 优梦创客的游戏讲堂:https://91make.ke.qq.com
- 『优梦创客』的微信公众号:umaketop
- 您可以自由转载,但必须加入完整的版权声明
行为树插件
优势:小兵不仅可以按照该固定动画路径行进,也可以按照指定的路点行进,也可以行进过程中其他行为(攻击,防御)


中断类型
Lower Priority:打断右边优先级执行
Self:只能中断自身的运行,进行判定,只有一开始can see object判定成功看到敌人执行seek,如果一开始就是直行seek就不进行判定,及时后面看到敌人也不能追踪因为不判定
Both:都会执行
MOVEMENT{
cover掩护
Evade躲避
Flee逃跑
Flock聚集
Leader follow跟随移动
Move towards向一个方向移动
Patrol 巡逻
Pursue 追逐
Queue 一个一个通过
Search 搜索
Seek 搜寻
Wander 闲逛
}
ACTIONS{
Log 输出文本
Idle 停一段时间
Wait 等待时间任务
}
Composites {
Sequence 从左往右执行,子任务执行成功才返回成功,有一个任务失败就返回失败
Selector 依次执行成功后面不执行
}
Coditionals /Basic/Mathf/Float Comparision:判断大小第一个和第二个数,返回true,false
Movement /partol :围绕点运动
Movement /Seek:控制到达目标点
Can See Object:看到东西
using BehaviorDesigner.Runtime.Tasks;
using BehaviorDesigner.Runtime;
//这个任务脚本的作用就是控制游戏物体达到目标为止
public class MySeek :Action{//这个任务的调用是behacior designe行为树控制
public SharedTransform target;//这是我们要达到的目标位置
//public float speed;
public SharedFloat sharedSpeed;
//public float arriveDistance = 0.1f;
public SharedFloat sharedArriveDistance=0.1f;
private float sqrArriveDistance;
public override void OnStart()
{
sqrArriveDistance = sharedArriveDistance.Value * sharedArriveDistance.Value;
}
//当进入到这个人物的时候,会一直调用这个方法,一直到任务结束,你返回一个成功或者失败的状态,那么任务结束如果返回一个running状态,那这个方法会继续调用
public override TaskStatus OnUpdate()
{
//这个方法的调用频率,默认是跟unity里面的帧保持一致的
if (target == null||target.Value==null)//判断target是否有值
{
return TaskStatus.Failure;//失败状态
}
transform.LookAt(target.Value.position);//直接朝向目标位置
transform.position = Vector3.MoveTowards(transform.position, target.Value.position, sharedSpeed.Value * Time.deltaTime);
if((target.Value.position - transform.position).sqrMagnitude < sqrArriveDistance)
{
return TaskStatus.Success;//如果距离目标位置的距离较小,人未到达了目标位置,直接return成功
}
return TaskStatus.Running;//继续执行
}
}
定义速度,距离,要到达的位置。判断是否可以运行,计算目标与自身距离,向目标移动,达到目标点结束。
public Transform[] targets;//判断是否在视野内的目标
public float fieldOfViewAngle = 90;
public SharedFloat sharedViewDistance;
public SharedTransform target;//共享的变量
public override TaskStatus OnUpdate()
{
if (targets == null) return TaskStatus.Failure;
foreach(var target in targets)//遍历每一个目标是否满足调用
{
float distance = (target.position - transform.position).magnitude;//求距离目标减去当前自身坐标球的距离
float angle = Vector3.Angle(transform.forward, target.position - transform.position);//求向量夹角,前方向减目标与主角之间的向量
if (distance < sharedViewDistance.Value && angle < fieldOfViewAngle * 0.5f) {//夹角小于视野的一半,距离比视野距离小
this.target.Value = target;//共享变量赋值
return TaskStatus.Success;//成功
}
}
return TaskStatus.Failure;//失败
}
判断距离,是否在视野内(夹角小于视野的一半)
Unity进阶:行为树 01的更多相关文章
- Unity进阶:行为树 02 夺旗战搭建场景,AI脚本,旗子拿起
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- LeetCode初级算法--树01:二叉树的最大深度
LeetCode初级算法--树01:二叉树的最大深度 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...
- 字典树&&01字典树专题&&对字典树的理解
对于字典树和01字典树的一点理解: 首先,字典树建树的过程就是按照每个数的前缀来的,如果你要存储一个全小写字母字符串,那么这个树每一个节点最多26个节点,这样的话,如果要找特定的单词的话,按照建树的方 ...
- 字典树&01字典树算法笔记
1]学习了字典树之后,觉得它很明显的就是用空间来换时间,空间复杂度特别大,比如字典数单单存26个小写字母,那么每个节点的孩子节点都有26个孩子节点,字典树中的每一层都保留着不同单词的相同字母. 2]0 ...
- Unity BehaviorDesigner行为树基础总结
BehaviorDesigner——行为树,用于控制和实现AI逻辑,类似于这样: 上面这个行为树实现了这样的逻辑: 当Player有Input时按照Input值来移动,无Input时查找最近的可攻击目 ...
- Unity进阶技巧 - 动态创建UGUI
前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...
- Unity进阶----Lua语言知识点(2018/11/08)
国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...
- Unity进阶----AssetBundle_02(加载依赖关系及网络资源)(2018/10/31)
网络资源加载: string path ="file://"+ Application.streamingAssetsPath + "\\windows\\123&quo ...
- Unity进阶----AssetBundle_01(2018/10/30)
AssetBundle作用和定义 1).AssetBundle是一个压缩包包含模型.贴图.预制体.声音.甚至整个场景,可以在游戏运行的时候被加载: 2).AssetBundle自身保存着互相的依赖关系 ...
随机推荐
- 让typecho支持PHP7
在PHP7环境下新安装Typecho默认是使用Pdo_Mysql数据库引擎驱动 如果之前Typecho运行环境不是PHP7,后来才升级为PHP7的,那么,需要将你的Typecho数据库引擎修改为Pdo ...
- Android Studio 开发
Android studio安装与配置 (收藏) https://www.cnblogs.com/gufengchen/p/10991886.html ------------------------ ...
- ZYNQ 7020学习笔记之PL侧普通信号中断PS的实验
1.参考 UG585 网络笔记 2.理论知识 见中断部分 3.实验目的 练习使用PL侧的普通信号来中断PS处理器. 4.实验过程 建立工程,设置并初始化串口中断,在运行程序之后,如果串口接收到N(1- ...
- kafka高吞吐量的分布式发布订阅的消息队列系统
一:kafka介绍kafka(官网地址:http://kafka.apache.org)是一种高吞吐量的分布式发布订阅的消息队列系统,具有高性能和高吞吐率. 1.1 术语介绍BrokerKafka集群 ...
- 使用tomcat7-maven-plugin
2019-01-0714:16:44 功能: (使用maven中的tomcat插件,就可以将tomcat集成到项目中,效果就是:在不同平台中无需配置tomcat就可以直接运行web) 地址: tomc ...
- 不同版本的ArcMap在Oracle中创建镶嵌数据集的不同行为
如果不同版本的ArcMap连接到同一个Oracle数据库上,分别执行"创建镶嵌数据集",它们的行为是一样的吗? 答案是:不一样,会有细微的差别 在本例中,ArcMap的版本分别是1 ...
- Java白皮书(总结一些题目)
java基础 1. 简述JVM的运行原理? Java平台由Java 虚拟机和Java 应用程序接口搭建,Java语言则是进入这个平台的通道, 用Java语言编写并编译的程序可以运行在这个平台 ...
- PostgreSQL 参数调整(性能优化)
昨天分别在外网和无外网环境下安装PostgreSQL,有外网环境下安装的相当顺利.但是在无外网环境下就是两个不同的概念了,可谓十有八折.感兴趣的同学可以搭建一下. PostgreSQL安装完成后第一件 ...
- tomcat启动时报No rules found matching 'Server/Service/Engine/Host/context'
tomcat是8.0版本. 在eclipse启动时,第二行报这个, 同时项目也没加载(tomcat启动成功了). 网上搜了半天, 试了半天, 没搞定. 最后不经意间发现: <Context do ...
- 个人Wiki搭建(Gitbook + GitHub Pages)
工具选择:Gitbook + GitHub Pages 大概流程: 首先在本地编写md文件,然后生成对应的html文件,最后将这些html文件推送到github对应的gitbook仓库. 具体步骤: ...