Unity3D 中构建行为树插件详解
前言
在Unity3D中,行为树(Behavior Tree)是一种用于游戏AI设计和实现的高级工具,它提供了一种结构化和模块化的方式来管理游戏实体的行为。行为树通过树状结构组织了一系列节点,每个节点代表了一个决策或动作。这种结构使得AI逻辑既清晰又易于扩展和维护。
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!
技术详解
行为树的基本概念:
- 根节点:行为树的起点,通常是一个选择器(Selector)或序列(Sequence)节点。
- 选择器节点:从子节点中选择一个执行,直到其中一个成功为止。常用于多种策略中选择一个执行。
- 序列节点:按顺序执行子节点,直到所有子节点都成功执行完毕。任何子节点失败都会停止执行序列。
- 动作节点:执行具体动作或命令的节点,如移动、攻击等。
- 条件节点:根据条件判断是否执行子节点。
- 装饰器节点:修改子节点的行为,如重复执行、倒序执行、失败重试等。
实现步骤:
- 定义节点基类:所有节点类型都继承自一个共同的基类,该类包含执行逻辑和状态管理(如成功、失败、运行中)。
- 实现节点类型:创建选择器、序列、动作、条件等不同类型的节点。
- 树结构管理:实现一个行为树管理器,负责构建、执行和销毁行为树。
- 集成到Unity:通过Unity的组件系统和编辑器扩展(如自定义编辑器窗口)来集成行为树编辑器。
代码实现
以下是行为树节点基类和几个核心节点类型的简单实现示例:
| // 行为树节点基类 | |
| public abstract class BTNode | |
| { | |
| public enum Status | |
| { | |
| Success, | |
| Failure, | |
| Running | |
| } | |
| public abstract Status Tick(); | |
| } | |
| // 序列节点 | |
| public class Sequence : BTNode | |
| { | |
| private List<BTNode> children = new List<BTNode>(); | |
| private int currentIndex = 0; | |
| public void AddChild(BTNode child) | |
| { | |
| children.Add(child); | |
| } | |
| public override Status Tick() | |
| { | |
| while (currentIndex < children.Count) | |
| { | |
| var status = children[currentIndex].Tick(); | |
| if (status == Status.Failure) | |
| return Status.Failure; | |
| if (status == Status.Success) | |
| currentIndex++; | |
| } | |
| return Status.Success; | |
| } | |
| } | |
| // 动作节点示例:移动 | |
| public class MoveAction : BTNode | |
| { | |
| public Vector3 targetPosition; | |
| private GameObject agent; | |
| public MoveAction(GameObject agent) | |
| { | |
| this.agent = agent; | |
| } | |
| public override Status Tick() | |
| { | |
| // 假设有一个MoveTo的函数来移动agent | |
| if (MoveTo(targetPosition)) | |
| return Status.Success; | |
| return Status.Running; | |
| } | |
| private bool MoveTo(Vector3 position) | |
| { | |
| // 实现移动到目标位置的逻辑 | |
| // 返回是否成功到达 | |
| return true; // 示例中总是成功 | |
| } | |
| } |
编辑器集成
要在Unity编辑器中创建和编辑行为树,你需要编写自定义的编辑器窗口和Inspector面板来显示和编辑行为树的结构和属性。这通常涉及到使用Unity的Editor和EditorGUI类来绘制UI元素,并处理用户输入。
结论
行为树在Unity3D中的实现提供了强大的AI管理能力,使得复杂的AI逻辑变得易于理解和维护。通过上面的示例,你可以开始构建自己的行为树系统,并根据项目的具体需求进行扩展和优化。记得在开发过程中,不断优化节点和树的结构,以提高性能和可维护性。
更多教学视频
Unity3Dwww.bycwedu.com/promotion_channels/2146264125
相关文章:
Unity3D 中构建行为树插件详解
前言 在Unity3D中,行为树(Behavior Tree)是一种用于游戏AI设计和实现的高级工具,它提供了一种结构化和模块化的方式来管理游戏实体的行为。行为树通过树状结构组织了一系列节点,每个节点代表了一个决策或动作。这种结…...
数学符号练习-函数连续性与导数
前言 其实主要的目的是可以在文本中输出各种数学符号,便于以后用到的时候有现成的例子拿过来抄~~ 函数的连续性 设函数 y f ( x ) yf(x) yf(x)在点 x 0 x_0 x0的某邻域内有定义,如果当自变量的改变 Δ x Δx Δx趋近于0时,相应函数的改变量也趋近于…...
笔记本维修与拆解(一)
清灰: 拆螺丝: 拔掉电池供电: 多按几次开机键,放电: 涂抹硅胶的时候,千万不要涂很多,溢出CPU,如果硅胶溢到焊盘上去的话很容易热胀冷缩短路 【联想拯救者Y9000P和R9000P最简单清灰教程…...
【JavaSE系列】IO流
目录 前言 一、IO流概述 二、IO流体系结构 三、File相关的流 1. FileInputStream 2. FileOutputStream 3. FileReader 4. FileWriter 四、缓冲流 五、转换流 1. InputStreamReader 2. OutputStreamWriter 六、数据流 七、对象流 八、打印流 九、标准输入输出流…...
深入探讨在线教育系统源码:搭建知识付费平台实战方案详解
知识付费平台是软件开发行业内炙手可热的项目,其受众群体非常广,也是很多小伙伴提问比较多的,今天小编将从在线教育系统源码开始,为大家讲解一个知识付费平台的搭建开发实战方案。 一、系统架构设计 搭建在线教育系统需考虑以下几…...
前端全屏模式切换
前端全屏模式切换 const isBigScreen ref(false) const handleScreen () > {if (isBigScreen.value) {document.exitFullscreen()isBigScreen.value false} else {isBigScreen.value truedocument.documentElement.requestFullscreen() // 请求全屏模式} }...
构建高可用和高防御力的云服务架构第二部分:SLB负载均衡(2/5)
在现代云服务中,负载均衡(Load Balancing)是一种关键技术,用于优化资源利用、最小化响应时间、提高系统的可伸缩性和可靠性。负载均衡器位于客户端和服务器之间,根据预设的策略将请求分发到多个服务器上,以…...
计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计
《PythonSpark知识图谱微博舆情预测》开题报告 一、课题背景与意义 随着互联网技术的飞速发展,社交媒体平台如微博已成为人们表达观点、交流信息的重要渠道。微博每天产生海量的数据,这些数据中蕴含着丰富的社会情绪、事件动态等信息,对于政…...
excel-VBA知识点记录
1、计算机硬件的组成部分 内存,一旦断电,存储在里面的数据就消失了,而硬盘是永久存储数据的,所以刚开始我们在文件里面编辑没有按保存的时候,数据是在内存里面的,一旦断电数据就没了,但我们点了…...
RabbitMQ——消息的可靠性处理
1.业务分析 在业务的开发中,我们通常将业务的非核心业务交给MQ来处理,比如支付,在支付过后,我们需要扣减余额,修改支付单状态,修改订单状态,发送短信提醒用户,给用户增加积分等等&am…...
babylon.js-1:入门篇
最近项目中使用到了 Babylon.js 这门技术,从今天开始,抽取自己写的比较好的拿出来,作为分享案例: 记录学习成果通过笔记的方式记录技术积累方便工作中查找翻阅实现案例 是什么 Babylon.js是一个基于WebGL的开源3D渲染引擎&…...
VS Code调整字体大小
##在工程目录底下.vscode/settings.json添加设置参数 {"editor.fontSize": 15,"window.zoomLevel": 1.5 }...
Python基础语句教学
Python是一种高级的编程语言,由Guido van Rossum于1991年创建。它以简单易读的语法和强大的功能而闻名,被广泛用于科学计算、Web开发、数据分析等领域。 Python的应用领域广泛,可以用于开发桌面应用程序、Web应用、游戏、数据分析、人工智能等…...
ansible 配置
目录 1.集群自动化维护工具 ansible 2.ansible管理架构 3.安装ansible 4.Iventory主机模式 5.通过ping验证 6.ansible常用模块 7.命令行模块 7.1command模块 7.2shell模块 7.3scripts模块 7.4file模块 7.5copy模块 7.6yum模块 1.集群自动化维护工具 ansibl…...
堆排序算法详解:原理与Python实现
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…...
[论文阅读] ChartInstruct: Instruction Tuning for Chart Comprehension and Reasoning
原文链接:http://arxiv.org/abs/2403.09028 源码链接:https://github.com/vis-nlp/ChartInstruct 启发:本文构建的instruction-tuning数据集以及使用该数据集对模型进行微调的过程都值得学习。 Abstract 研究对象:图表 研究…...
基于springboot+vue学生宿舍管理系统设计与实现
博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…...
【Android】模糊搜索与数据处理
【Android】模糊搜索与数据处理 本篇博客主要以根据输入内容动态获取城市为例进行讲解。 获取城市 这一部分主要是根据输入的信息去动态获取城市信息 首先定义了一个名为 NetUtil 的类,主要用于通过 HTTP 请求获取城市信息。 public class NetUtil {private stat…...
机器学习-KNN
KNN:K最邻近算法(K-Nearest Neighbor,KNN) 用特征空间中距离待分类对象的最近的K个样例点的类别来预测。 投票法:K 个样例的对数类别。 k1:最近邻分类 k 通常是奇数(因为我们根据这个K数据判断类别,如果…...
python 安装包 site-packages
1. site-packages 文件夹的位置 当我们通过 pip 或其他方式安装一个 Python 包时,这些包的文件就会被复制到 site-packages 文件夹下。 site-packages 文件夹通常位于 Python 的安装目录下的 Lib 文件夹内。具体的路径会根据你使用的操作系统和 Python 版本的不同而…...
AI赋能无障碍:CYBER-VISION在智能导盲场景中的落地实践
AI赋能无障碍:CYBER-VISION在智能导盲场景中的落地实践 1. 引言:当科技照亮黑暗 想象一下,当你闭上眼睛走在繁忙的街道上,周围是川流不息的人群和车辆。对于全球2.85亿视障人士来说,这不仅是想象,而是每天…...
Phi-4-mini-reasoning+ollama打造教育AI助手:中小学奥数题自动解析案例
Phi-4-mini-reasoningollama打造教育AI助手:中小学奥数题自动解析案例 1. 为什么需要教育AI助手? 中小学奥数题解析一直是家长和老师的痛点。传统方式需要专业老师一对一辅导,成本高且效率低。很多家长自己也不会解题,辅导孩子作…...
Qwen3-TTS-12Hz-1.7B-Base真实案例:为视障开发者生成无障碍编程教程语音
Qwen3-TTS-12Hz-1.7B-Base真实案例:为视障开发者生成无障碍编程教程语音 1. 这不是“读出来就行”的语音,而是真正听得懂代码的语音助手 你有没有想过,一段Python函数说明、一个React组件生命周期图解、甚至一段带缩进和符号的JSON结构&…...
百度网盘直链解析技术全解析:从原理到实践的开源解决方案
百度网盘直链解析技术全解析:从原理到实践的开源解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 1. 问题本质:云存储限速的技术困局 1.1 限速…...
小龙虾使用手册(蓝皮书)实战案例版
扫描下载文档详情页: https://www.didaidea.com/wenku/16656.html...
MusePublic显存利用率提升方案:CPU卸载+自动清理策略详解
MusePublic显存利用率提升方案:CPU卸载自动清理策略详解 1. 项目背景与显存挑战 MusePublic是一款专为艺术感时尚人像创作设计的轻量化文本生成图像系统。基于专属大模型和safetensors格式封装,系统针对艺术人像的优雅姿态、细腻光影和故事感画面进行了…...
Nano-Banana效果展示:多款产品高清拆解图生成作品集
Nano-Banana效果展示:多款产品高清拆解图生成作品集 1. 专业级拆解效果惊艳呈现 想象一下,只需简单输入文字描述,就能获得堪比专业设计师制作的产品爆炸图。Nano-Banana产品拆解引擎让这一想象成为现实,它专为产品拆解、平铺展示…...
从零构建企业级Text2Sql应用:Vanna私有化部署与Dify工作流集成
1. 企业级Text2Sql应用的核心价值 想象一下,财务部门的同事对着Excel表格发愁:"能不能帮我找出上季度华东区销售额超过50万的所有客户?"传统做法需要找IT部门提需求,等开发人员写SQL查询,流程可能长达数三天…...
ComfyUI-VideoHelperSuite:AI视频工作流的全栈解决方案
ComfyUI-VideoHelperSuite:AI视频工作流的全栈解决方案 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 1. 核心价值解析:图像序列到视频的…...
OpenClaw+GLM-4.7-Flash:科研数据收集与处理自动化方案
OpenClawGLM-4.7-Flash:科研数据收集与处理自动化方案 1. 为什么科研需要自动化助手 去年冬天,我在整理一篇跨学科综述论文时,经历了连续三周每天14小时的手动文献筛选和数据提取。当我在凌晨三点对着第237篇PDF文件发呆时,突然…...
