unity行为决策树实战详解

一、行为决策树的概念

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

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

二、行为决策树的实现

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

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

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

  1. 添加节点

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

  1. 连接节点

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

  1. 调整节点属性

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

  1. 运行行为决策树

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

除了使用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;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/54286.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

穷举深搜暴搜回溯剪枝(2)

一)电话号码的字母组合 17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 1)画出决策树:只是需要对最终的决策树做一个深度优先遍历 把图画出来&#xff0c;知道每一层在干什么&#xff0c;代码就能写出来了 2)定义全局变量: 1)定义一个哈希表来处理数字和字符串…

MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容测评

今天给大家带来了 MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容 100 挑战赛 的视频&#xff0c;现在充电头再以文章的形式呈现给大家&#xff0c;让大家更清楚、直白的了解这款笔记本在升级系统后的兼容性如何。 MacBook Pro 16 M1 Max 配置了 140W 的 MagSafe 充电口&…

【数据预测】基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#54】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 白鲸优化算法BWO2. 变分模态分解VMD3. 核极限学习机KELM4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. 白鲸…

云原生应用里的服务发现

服务定义&#xff1a; 服务定义是声明给定服务如何被消费者/客户端使用的方式。在建立服务之间的同步通信通道之前&#xff0c;它会与消费者共享。 同步通信中的服务定义&#xff1a; 微服务可以将其服务定义发布到服务注册表&#xff08;或由微服务所有者手动发布&#xff09;…

MySQL 与MongoDB区别

一、什么是MongoDB呢 ? MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一…

8.1 配置环境/Linux进程管理总结/Argument/saveload Module/切片

文章目录 一、配置环境二、Linux 进程管理总结三、ArgumentParser四、Saving and Loading Models nn.ModulesWarmstarting Model Using Parameters from a Different Model五、切片&#xff01;拓展&#xff1a; 一、配置环境 github配置环境可以直接赋值到txt中&#xff0c;然…

【小沐学前端】VuePress制作在线电子书、技术文档(VuePress + Markdown + node)

文章目录 1、简介1.1 VuePress简介1.2 它是如何工作的&#xff1f; 2、安装node3、安装VuePress4、配置VuePress4.1 修改标题4.2 修改导航条4.3 修改右侧栏4.4 修改正文 结语 1、简介 Vue驱动的静态网站生成器&#xff0c;生成的网页内容放到自己服务器上管理&#xff0c;可用于…

HTML+CSS+JavaScript:渲染电商站购物车页面

一、需求 根据下图渲染购物车页面 二、代码素材 以下是缺失JS部分的代码&#xff0c;感兴趣的小伙伴可以先自己试着写一写 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatib…

【总结】p50蓝图概念、面向对象思想、函数事件宏的区别

p50蓝图概念、面向对象思想、函数事件宏的区别 函数的概念&#xff08;纯虚函数和函数&#xff09;宏的概念函数、事件、宏的区别变量的概念面向对象思想&#xff08;封装、继承、多态&#xff09;类和对象的关系Object、actor、pawn、Character、component之间的区别控制权、玩…

振弦传感器信号转换器应用山体滑坡安全监测

振弦传感器信号转换器应用山体滑坡安全监测 随着人类文明的进步&#xff0c;自然灾害对人们的生活和财产安全造成的威胁也越来越大。山体滑坡作为自然灾害中的一种&#xff0c;给人们的生活和财产安全带来了极大的威胁。因此&#xff0c;进行山体滑坡的安全监测显得尤为重要。振…

uniapp 持续获取定位(登录状态下才获取)(不采用定时器)(任意页面都可监听定位改变)

基于上次文章做了优化和改良,保证在登录状态下才获取定位信息 uniapp 小程序实时且持续获取定位信息(全局设置一次)(单页面监听定位改变)(不采用定时器)_uniapp小程序定位_前端小胡兔的博客-CSDN博客本篇文章实现了uniapp 微信小程序实时获取定位信息,小程序打开即可持续获取定…

补充JDK源码-IDEA集成工具

在阅读JDK8源码的时候发现&#xff0c;只有一小部分常用包是存在源码及其注释的&#xff0c;而很多内部包是没有源码&#xff0c;class文件在阅读的时候对阅读者十分不友好。在网上搜集了很多资料都没有解决问题。 解决问题办法&#xff1a;参考文档。本文主要是根据这篇文章记…