首页 > 其他分享 >[UnityAI]行为树的中断机制

[UnityAI]行为树的中断机制

时间:2023-01-08 17:56:42浏览次数:53  
标签:UnityAI 中断 TaskStatus blog position using 机制 BehaviorDesigner public

参考链接:

https://www.cnblogs.com/01zxs/p/9863715.html

https://blog.csdn.net/AcmHonor/article/details/123234763

https://blog.csdn.net/u012632851/article/details/89647097?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-89647097-blog-82943972.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-89647097-blog-82943972.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=3

https://blog.csdn.net/wuming2016/article/details/116858357

 

BehaviorDesigner下载

https://gitcode.net/linxinfa/unitybehaviordesigner

 

一.制作一颗简单的行为树

如下,是一颗简单的怪物行为树,当看见主角时,向主角移动;否则保持站立状态

AICanSeeObj.cs

 1 using BehaviorDesigner.Runtime;
 2 using BehaviorDesigner.Runtime.Tasks;
 3 using UnityEngine;
 4 
 5 public class AICanSeeObj : Conditional
 6 {
 7     public float distance = 2f;
 8     public SharedTransform target;
 9 
10     public override TaskStatus OnUpdate()
11     {
12         if (Vector3.Distance(transform.position, target.Value.position) < distance)
13         {
14             return TaskStatus.Success;
15         }
16         else
17         {
18             return TaskStatus.Failure;
19         }
20     }
21 }

AIMoveTo.cs

 1 using BehaviorDesigner.Runtime;
 2 using BehaviorDesigner.Runtime.Tasks;
 3 using UnityEngine;
 4 
 5 //移动到指定的目标
 6 public class AIMoveTo : Action
 7 {
 8     public float speed = 1f;
 9     public SharedTransform target;
10 
11     public override TaskStatus OnUpdate()
12     {
13         if (Vector3.Distance(transform.position, target.Value.position) < 0.1f)
14         {
15             return TaskStatus.Success;
16         }
17         transform.position = Vector3.MoveTowards(transform.position, target.Value.position, speed * Time.deltaTime);
18         return TaskStatus.Running;
19     }
20 }

AIIdle.cs

1 using BehaviorDesigner.Runtime.Tasks;
2 
3 public class AIIdle : Action
4 {
5     public override TaskStatus OnUpdate()
6     {
7         return TaskStatus.Running;
8     }
9 }

 

二.行为树的特点以及中断机制

在行为树中,一般一个节点返回Success或者Failure后,这个节点就不会再执行了(除非行为树重新执行或者该节点在Repeater节点下)

如下,白色是主角,红色是怪物,一开始两者距离较远,怪物处于Idle状态,即使后面拉近距离,AIIdle也不会被打断,不符合我们设定的AI逻辑(距离较近时向主角移动)

 

标签:UnityAI,中断,TaskStatus,blog,position,using,机制,BehaviorDesigner,public
From: https://www.cnblogs.com/lyh916/p/17034983.html

相关文章

  • ESP32中断的使用
    定时器中断硬件中断attachInterrupt(pin,ISR,mode);pin管脚号ISR中断处理函数mode触发中断的模式,可以使用的值有。LOW低电平触发CHANGE管脚电平变化......
  • [Docker] 将容器打包成镜像、镜像分层机制详解
    目录commit命令创建一个容器打包镜像联合文件系统联合文件系统实践前置准备不使用联合文件系统的挂载使用联合文件系统进行挂载写时复制机制commit命令#将容器打包成......
  • Spring5 IOC容器解析——事件监听机制
    一、事件驱动模型简介事件驱动模型,也即是我们通常说的观察者。基于发布-订阅模式的编程模型。概念定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖......
  • CPU 亲和性与中断亲和性
    预备知识超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPUcore)模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统......
  • 内核hung检测机制(3)
    实践编写ko在内核线程上下文中触发D状态死锁代码hungtask.c#include<linux/init.h>#include<linux/sched.h>//currentmacro#include<linux/module.h>voidhu......
  • spark中的持久化机制以及lineage和checkpoint(简含源码解析)
    spark相比MapReduce最大的优势是,spark是基于内存的计算模型,有的spark应用比较复杂,如果中间出错了,那么只能根据lineage从头开始计算,所以为了避免这种情况,spark提供了两种持......
  • 内核hung检测机制(2)
    实践部分编写ko触发D状态死锁hung_task.c#include<linux/init.h>#include<linux/module.h>DEFINE_MUTEX(ckw_hung_task_mutex);staticint__inithung_task_in......
  • 内核hung检测机制
    Hung检测为内核提供的debug机制,用来检测系统是否存在长期处于TASK_UNINTERRUPTIBLE的进程。Hung检测原理内核进程定期扫描状态为TASK_UNINTERRUPTIBLE的进程,如果在sysct......
  • 【分布式技术专题】「LVS负载均衡」全面透析Web基础架构负载均衡LVS机制的原理分析指
    前提概要在大规模互联网应用中,负载均衡设备是必不可少的组成部分,源于互联网应用的高并发和大流量的冲击压力场景下,通常会在服务端部署多个无状态的应用服务器和若干有状......
  • 【分布式技术专题】「LVS负载均衡」全面透析Web基础架构负载均衡LVS机制的原理分析指
    前提概要在大规模互联网应用中,负载均衡设备是必不可少的组成部分,源于互联网应用的高并发和大流量的冲击压力场景下,通常会在服务端部署多个无状态的应用服务器和若干有状态......