当前位置: 首页 > news >正文

unity行为决策树实战详解

一、行为决策树的概念

行为决策树是一种用于游戏AI的决策模型,它将游戏AI的行为分解为一系列的决策节点,并通过节点之间的连接关系来描述游戏AI的行为逻辑。在行为决策树中,每个节点都代表一个行为或决策,例如移动、攻击、逃跑等,而节点之间的连接关系则代表了不同行为之间的优先级和逻辑关系。

行为决策树的优点在于它可以帮助游戏开发者更轻松地设计和实现游戏中的AI。通过行为决策树,游戏开发者可以将游戏AI的行为分解为一系列的决策节点,并通过节点之间的连接关系来描述游戏AI的行为逻辑,从而更加方便地管理和调整游戏AI的行为。

二、行为决策树的实现

在Unity中,我们可以使用Behavior Designer插件来实现行为决策树。Behavior Designer是Unity中一款强大的行为树编辑器,它提供了丰富的节点和条件,可以帮助我们轻松地设计和实现游戏中的AI。

下面我们将以一个简单的示例来介绍如何使用Behavior Designer插件实现行为决策树。

  1. 创建一个新的行为决策树

首先,我们需要在Unity中创建一个新的行为决策树。在Unity中,我们可以通过菜单栏中的Assets > Create > Behavior Designer来创建一个新的行为决策树。

  1. 添加节点

接下来,我们需要向行为决策树中添加节点。在Behavior Designer中,节点分为行为节点和条件节点两种类型。行为节点用于执行具体的行为或任务,例如移动、攻击、逃跑等,而条件节点用于判断当前的状态或环境,例如是否有敌人、是否受到攻击等。

在Behavior Designer中,我们可以通过右键菜单来添加节点。在右键菜单中,我们可以选择添加行为节点或条件节点,并选择对应的类型。

  1. 连接节点

添加完节点之后,我们需要通过连接节点来描述游戏AI的行为逻辑。在Behavior Designer中,我们可以通过拖拽节点来连接节点,从而描述它们之间的优先级和逻辑关系。

  1. 调整节点属性

在连接节点之后,我们需要调整节点的属性,以便它们能够正确地执行游戏AI的行为逻辑。在Behavior Designer中,我们可以通过选中节点来打开节点的属性面板,并调整对应的属性值。

  1. 运行行为决策树

最后,我们需要将行为决策树与游戏中的AI进行关联,并运行它。在Behavior Designer中,我们可以通过将行为决策树添加到AI对象的Behavior Designer组件中,并在游戏运行时启用它来实现游戏AI的行为控制。

三、行为决策树的代码实现

除了使用Behavior Designer插件外,我们还可以通过代码来实现行为决策树。在Unity中,我们可以使用C#语言来编写行为决策树的代码,从而实现游戏AI的行为控制。

下面我们将以一个简单的示例来介绍如何使用C#语言实现行为决策树。

  1. 创建一个新的行为决策树类

首先,我们需要创建一个新的行为决策树类,并继承自MonoBehaviour类。在行为决策树类中,我们可以定义行为节点和条件节点,并通过节点之间的连接关系来描述游戏AI的行为逻辑。

public class BehaviorTree : MonoBehaviour
{// 行为节点public abstract class ActionNode{public abstract bool Execute();}// 条件节点public abstract class ConditionNode{public abstract bool Check();}
}

  1. 实现行为节点和条件节点

接下来,我们需要实现行为节点和条件节点,并在节点中编写对应的行为和条件逻辑。在行为节点中,我们可以编写具体的行为逻辑,例如移动、攻击、逃跑等。在条件节点中,我们可以编写判断当前状态或环境的逻辑,例如是否有敌人、是否受到攻击等。

public class BehaviorTree : MonoBehaviour
{// 行为节点public abstract class ActionNode{public abstract bool Execute();}// 条件节点public abstract class ConditionNode{public abstract bool Check();}
}

  1. 连接节点

实现完行为节点和条件节点后,我们需要通过连接节点来描述游戏AI的行为逻辑。在代码中,我们可以使用列表来存储节点,并通过节点之间的连接关系来描述它们之间的优先级和逻辑关系。

public class BehaviorTree : MonoBehaviour
{// 行为节点public abstract class ActionNode{public abstract bool Execute();}// 条件节点public abstract class ConditionNode{public abstract bool Check();}// 节点列表private List<Node> nodes = new List<Node>();// 节点连接关系private class Node{public ActionNode actionNode;public ConditionNode conditionNode;public List<Node> children = new List<Node>();}
}

  1. 调整节点属性

连接节点之后,我们需要调整节点的属性,以便它们能够正确地执行游戏AI的行为逻辑。在代码中,我们可以在节点类中添加对应的属性,并在节点的执行方法中使用它们。

public class MoveNode : ActionNode
{public Transform target;public override bool Execute(){// 移动逻辑return true;}
}public class HasEnemyNode : ConditionNode
{public Transform target;public override bool Check(){// 判断是否有敌人return true;}
}

  1. 运行行为决策树

最后,我们需要将行为决策树与游戏中的AI进行关联,并运行它。在代码中,我们可以在AI类中创建行为决策树对象,并在AI的Update方法中调用行为决策树的执行方法,从而实现游戏AI的行为控制。

public class MoveNode : ActionNode
{public Transform target;public override bool Execute(){// 移动逻辑return true;}
}public class HasEnemyNode : ConditionNode
{public Transform target;public override bool Check(){// 判断是否有敌人return true;}
}

相关文章:

unity行为决策树实战详解

一、行为决策树的概念 行为决策树是一种用于游戏AI的决策模型&#xff0c;它将游戏AI的行为分解为一系列的决策节点&#xff0c;并通过节点之间的连接关系来描述游戏AI的行为逻辑。在行为决策树中&#xff0c;每个节点都代表一个行为或决策&#xff0c;例如移动、攻击、逃跑等…...

Spring学习记录

目录 bean的单例与多例 设置 工厂模式的三种形态 简单工厂模式 代码&#xff1a; 运行结果&#xff1a; 总结&#xff1a; 工厂模式 代码&#xff1a; 运行结果&#xff1a; 总结&#xff1a; 抽象工厂模式 代码&#xff1a; 运行结果&#xff1a; 总结&#xff1a; …...

模板方法-

定义&#xff1a;又叫模板模式,是指定义一个算法骨架,并允许子类为其中的一个或多个步骤提供实现。 适用场景&#xff1a; 1、一次性实现一个算法不变的部分,并将可变的行为留给子类来实现 2、各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复 优点…...

[Kubernetes] - RabbitMQ学习

1.消息队列 消息&#xff1a; 在应用间传送的数据队列&#xff0c;先进先出 1.2. 作用 好处&#xff1a;解耦&#xff0c; 容错&#xff0c;削峰坏处&#xff1a;降低系统可用性&#xff0c;系统复杂度提高&#xff0c;一致性问题&#xff1b; RabbitMQ组成部分&#xff1a…...

swagger页面 doc.html出不来,swagger-ui/index.html能出来

swagger页面 doc.html出不来&#xff0c;swagger-ui/index.html能出来。前前后后折腾了很久&#xff0c;jar包冲突&#xff0c;jar包版本&#xff0c;添加路径啥的都弄了&#xff0c;就是出不来。 后来全局搜索“doc.html”页面发现能出来的项目能搜到这个页面&#xff1a; 定…...

IEEE802.3和IEEE802.11的分类(仅为分类)

IEEE802.3标准 IEEE802.3:10兆以太网 ●10Base&#xff0d;5 使用粗同轴电缆&#xff0c;最大网段长度为500m&#xff0c;基带传输方法&#xff1b; ●10Base&#xff0d;2 使用细同轴电缆&#xff0c;最大网段长度为185m&#xff0c;基带传输方法&#xff1b; ●10Base&am…...

c# cad二次开发通过获取excel数据 在CAD绘图,将CAD属性导出到excel

c# cad二次开发通过获取excel数据 在CAD绘图&#xff0c;将CAD属性导出到excel using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq; us…...

LLM之高性能向量检索库

LLM向量数据库 高性能向量检索库milvus简介安装调用 faiss简介安装调用 高性能向量检索库 milvus 简介 Milvus 是一个开源的向量数据库引擎&#xff0c;旨在提供高效的向量存储、检索和分析能力。它被设计用于处理大规模的高维向量数据&#xff0c;常用于机器学习、计算机视觉…...

实体类注解

目录 一、TableField注解 二、TableId注解 三、Table注解 四、TableLogic注解 五、Getter与Setter注解 六、EqualsAndHashCode注解 七、Accessors注解 一、TableField注解 Data NoArgsConstructor //空参构造方法 AllArgsConstructor //全参构造方法 TableName("t…...

常见数据结构种类

常见数据结构种类 数据存储的常用结构有&#xff1a;栈、队列、数组、链表和红黑树 a.队列&#xff08;queue&#xff09; – 先进先出&#xff0c;后进后出。 – 场景&#xff1a;各种排队。叫号系统。 – 有很多集合可以实现队列。 b.栈&#xff08;stack&#xff09; – …...

linux高级---k8s中的五种控制器

文章目录 一、k8s的控制器类型二、pod与控制器之间的关系三、状态与无状态化对特点四、Deployment1、Deployment的资源清单文件2、在配置清单中调用deployment控制器3、镜像更新4、金丝雀发布5、删除Deployment 五、Statefulset六、DaemonSet1、daemonset的资源清单文件2、在配…...

记一次udp服务性能优化经历

目录 概述磁盘io网络io减少重复计算减少内存复制减少互斥锁 概述 手上有个go项目&#xff0c;接收udp信息&#xff08;主要是syslog和snmp trap&#xff09;并查询设备信息&#xff0c;将信息结构化&#xff08;设备ip名称&#xff0c;匹配了什么规则之类的&#xff09;后发送…...

uniapp和VueI18n多语言H5项目语言国际化功能搭建流程

uniapp多语言项目国家化功能搭建流程 说明&#xff1a;uniapp多语言项目功能搭建分为应用部分和框架部分。 应用部分&#xff0c;即开发者自己的代码里涉及的界面部分的语言翻译。框架部分&#xff0c;即uni-app内置组件和API涉及界面的部分的语言翻译。 功能的搭建是需要un…...

C# | 凸包算法之Jarvis,寻找一组点的边界/轮廓

C#实现凸包算法之Jarvis 文章目录 C#实现凸包算法之Jarvis前言示例代码实现思路测试结果结束语 前言 这篇关于凸包算法的文章&#xff0c;本文使用C#和Jarvis算法来实现凸包算法。 首先消除两个最基本的问题&#xff1a; 什么是凸包呢&#xff1f; 凸包是一个包围一组点的凸多…...

SpringBoot接收请求参数的方式

【方式一】原始方式 因为SpringBoot封装了Servlet&#xff0c;所以也允许使用HttpServletRequest类中的方法来获取 /*** 【方式一】原始方式*/RequestMapping("/demo01")public String demo01(HttpServletRequest request) {// 参数名要与页面提交的参数名一致Strin…...

MKS SERVO4257D 闭环步进电机_系列5 CAN指令说明

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&am…...

安捷伦E4440A(Agilent) e4440a 3HZ-26.5G频谱分析仪

Agilent E4440A、Keysight E4440A、HP E4440A频谱分析仪&#xff0c;3 Hz - 26.5 GHz&#xff08;PSA 系列&#xff09; ​Agilent / Keysight PSA 系列 E4440A 高性能频谱分析仪提供强大的一键式测量、多功能功能集和前沿技术&#xff0c;可满足您的项目和需求。选项可供您选…...

华为OD机试真题 Java 实现【最长子字符串的长度】【2022Q4 100分】,附详细解题思路

一、题目描述 给你一个字符串s,字符串s首尾相连组成一个环形,请你在环形中找出‘o’字符出现了偶数次最长子字符串的长度。 二、输入描述 输入一串小写字母组成的字符串。 三、输出描述 输出一个整数。 四、解题思路 题目要求在给定的环形字符串中找出字符’o’出现了…...

【iOS】--对象的底层结构

源码 先转一下源码 //#import <Foundation/Foundation.h> #import <objc/runtime.h>interface LGPerson : NSObject property (nonatomic, strong) NSString *KCName; endimplementation LGPersonendint main(int argc, const char * argv[]) {autoreleasepool {…...

高并发内存池设计_内存池

高并发内存池设计 1. 常用的内存操作函数2. 高性能内存池设计_弊端解决之道弊端一弊端二弊端三弊端四3. 弊端解决之道内存管理维度分析内存管理组件选型4. 高并发内存管理最佳实践内存池技术内存池如何解决弊端?高并发时内存池如何实现?5. 高效内存池设计和实现实现思路 (分而…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...