首页 > 其他分享 >Unity 的行为决策树的技术原理

Unity 的行为决策树的技术原理

时间:2024-01-25 09:34:14浏览次数:22  
标签:游戏 public Unity 原理 行为 节点 决策树

Unity的行为决策树是一种强大的工具,用于创建复杂的游戏人工智能(AI)。行为决策树是一种图形化的编程工具,它可以将游戏角色的行为和决策过程可视化,从而使开发人员更容易理解和调试游戏AI。在本文中,我们将详细讲解Unity的行为决策树的技术原理,并给出相应的代码实现。

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

一、行为决策树的基本概念

行为决策树是一种树形结构,用于描述游戏角色的行为和决策过程。它由一系列节点组成,每个节点代表一个行为或决策。节点之间通过连接线相连,形成一个有向无环图(DAG),从而描述了游戏角色的行为和决策过程。

行为决策树的节点有多种类型,包括条件节点、动作节点、选择节点、序列节点等。条件节点表示一个条件,如“是否有敌人在视野范围内”;动作节点表示一个行为,如“向目标移动”;选择节点表示一个选择,如“选择攻击还是逃跑”;序列节点表示一个序列,如“先向目标移动,再进行攻击”。

行为决策树的执行过程是从根节点开始,逐级向下遍历,直到找到一个叶子节点为止。叶子节点表示一个行为,执行该行为并返回结果。如果该行为执行成功,则向上返回成功;否则向上返回失败。节点之间的连接线有多种类型,包括顺序连接、选择连接、并行连接等。顺序连接表示节点之间的顺序关系,如“先执行A节点,再执行B节点”;选择连接表示节点之间的选择关系,如“如果条件成立,则执行A节点,否则执行B节点”;并行连接表示节点之间的并行关系,如“同时执行A节点和B节点”。

二、行为决策树的实现

Unity中提供了一个行为决策树插件——Behavior Designer,它可以帮助开发人员创建复杂的游戏AI。Behavior Designer提供了一系列节点类型,包括条件节点、动作节点、选择节点、序列节点等。开发人员可以根据游戏需求自定义节点类型,并将它们添加到行为决策树中。

Behavior Designer的节点脚本使用C#编写,每个节点脚本继承自BehaviorDesigner.Runtime.Tasks.Task类。每个节点脚本都实现了一个Execute方法,该方法用于执行节点的行为或决策过程。在节点的Execute方法中,开发人员可以访问游戏对象的属性和方法,从而实现游戏AI的行为和决策过程。

Behavior Designer的行为决策树使用Unity的序列化机制进行保存和加载。开发人员可以将行为决策树保存为一个.asset文件,并在游戏中加载它。在游戏中加载行为决策树后,可以通过Behavior Designer提供的API来执行行为决策树并获取结果。

三、行为决策树的实例

下面我们来看一个简单的行为决策树实例,该实例描述了一个游戏角色的巡逻行为。

首先我们需要创建一个行为决策树,并添加一个序列节点。在序列节点中添加两个动作节点,分别表示“向目标移动”和“等待一段时间”。在“向目标移动”节点中,我们需要访问游戏对象的位置属性,并计算出与目标位置的距离。如果距离小于一定值,则返回成功;否则返回运行状态。在“等待一段时间”节点中,我们需要使用协程来实现等待功能。代码如下:

using UnityEngine;
using BehaviorDesigner.Runtime;
using BehaviorDesigner.Runtime.Tasks;
using System.Collections;

public class MoveToTarget : Action
{
    public SharedGameObject target;
    public float moveSpeed = 5f;
    public float stoppingDistance = 1f;

    private Transform targetTransform;
    private Transform agentTransform;

    public override void OnStart()
    {
        targetTransform = target.Value.transform;
        agentTransform = transform;
    }

    public override TaskStatus OnUpdate()
    {
        float distance = Vector3.Distance(targetTransform.position, agentTransform.position);
        if (distance < stoppingDistance)
        {
            return TaskStatus.Success;
        }
        else
        {
            agentTransform.position = Vector3.MoveTowards(agentTransform.position, targetTransform.position, moveSpeed * Time.deltaTime);
            return TaskStatus.Running;
        }
    }
}

public class WaitForSeconds : Action
{
    public float waitTime = 1f;

    public override IEnumerator GetEnumerator()
    {
        yield return new UnityEngine.WaitForSeconds(waitTime);
        yield return TaskStatus.Success;
    }
}

 

在上面的代码中,MoveToTarget节点表示“向目标移动”行为,WaitForSeconds节点表示“等待一段时间”行为。我们可以将这两个节点添加到行为决策树中,并设置相应的参数。

最后,我们需要将行为决策树添加到游戏对象上,并在游戏中执行它。代码如下:

using UnityEngine;
using BehaviorDesigner.Runtime;

public class Patrol : MonoBehaviour
{
    public BehaviorTree behaviorTree;

    void Start()
    {
        behaviorTree = GetComponent<BehaviorTree>();
        behaviorTree.EnableBehavior();
    }
}

 

在上面的代码中,Patrol脚本用于将行为决策树添加到游戏对象上,并在游戏中执行它。我们可以将该脚本添加到游戏对象上,并设置相应的参数。

标签:游戏,public,Unity,原理,行为,节点,决策树
From: https://www.cnblogs.com/bycw/p/17986351

相关文章

  • U3D外包Unity最新版本的官方技术文档
    Unity5.0新特性——物理系统Unity5.0已升级到PhysX3.3SDK。在对4.x项目采取任何操作之前,请快速查看此博文。 关于更新的概述Unity5.0物理系统的预计工作速度是以前版本的2倍。以前熟悉的大多数组件仍然存在,它们的工作方式也和以前一样。当然,有些行为不可能......
  • 参照DefenseGrid在Unity中实现合理的塔防寻路机制
    前言在一款TD游戏中,最重要的单位就两大类:防御塔(Tower)和敌人单位(Enemy)。在处理敌人单位的AI行为时,最基本也是最重要的就是自动寻路。在各式TD游戏中,防御塔的攻击方式以及敌人单位的Buff机制往往是能做出差异化的地方;而在寻路问题上,几乎是没有差异的,面对的都是同一套问题模型。以......
  • nfs服务的工作原理深入浅出讲解_
    1.NFS挂载原理详细介绍 2.什么是RPC服务 NFS的执行流程工作原理:  ......
  • Unity3D Rts游戏里的群体移动算法是如何实现的详解
    前言实时战略(RTS)游戏是一种以管理和控制虚拟军队为主题的游戏类型。在这类游戏中,玩家需要控制大量的单位进行战斗、资源采集和建设等操作。其中,群体移动算法是实现这些操作的关键之一。本文将详细介绍Unity3DRTS游戏中群体移动算法的实现原理和代码实现。对惹,这里有一个游戏开......
  • uboot-6_menuconfig/Kbuild图形化配置原理
    1ncurses库安装uboot或Linux内核可以通过输入“makemenuconfig”来打开图形化配置界面,menuconfig是一套图形化的配置工具,需要ncurses库支持。sudoapt-getinstallbuild-essentialsudoapt-getinstalllibncurses5-dev2menuconfig菜单使用说明和举例menuconfig重......
  • Linux7的启动原理和服务控制
    1、CentOS6的启动过程和原理BIOS/UEFI阶段--->GRUB阶段--->内核引导阶段--->Init阶段--->运行级别切换阶段--->服务启动阶段--->图形界面或命令行登录阶段--->用户登录BIOS/UEFI阶段:在计算机开机时,BIOS(或UEFI)会执行自检和硬件初始化,然后从启动设备(通常是硬盘)的MBR(主引导记......
  • Unity3D 游戏转场时如何保留节点信息详解
    Unity3D是一款非常强大的游戏开发引擎,它提供了丰富的功能和工具,使开发者能够轻松创建各种类型的游戏。在游戏开发过程中,转场是一个非常常见的需求,它可以使游戏过程更加流畅和连贯。然而,在转场过程中,如何保留节点信息是一个需要解决的问题。本文将详细介绍Unity3D游戏转场时如何保......
  • Unity3D 协程的优缺点详解
    Unity3D是一款强大的游戏开发引擎,它提供了许多功能和工具,以帮助开发者创建高质量的游戏。其中一个非常重要的功能就是协程(Coroutine)。协程是一种特殊的函数,它可以在执行过程中暂停并在稍后的时间点继续执行。在本文中,我们将详细探讨Unity3D协程的优缺点,并提供一些技术详解和代码实......
  • 文件系统(一):存储介质、原理与架构
    liwen01 2024.01.01前言从系统角度来看,文件系统是对文件存储器空间进行组织、分配、负责文件存储并对存入的文件进行保护和检索的一个系统。它的目的是使用户和应用程序能够方便地管理存储器上的文件和目录,比如常见的对文件的增、删、改、查。每当我们操作一个文件的时候,实......
  • Unity的StreamAssets文件夹
    StreamAssets是一个特殊的文件夹,其中的内容在Unity打包的时候并不会被压缩,完整的带入包体介绍在做一个根据可变配置进行操作的功能时,突然发现在windows中正常的功能在mac上失效了,而且还是部分mac失效。发现StreamAssets在mac某个版本以上就不支持写操作了,搜了一下网上的资料......