• Unity 行为树-管理


    引言

      在代码里面动态的操作单颗行为树 以及 管理所有的行为树,也是一个很重要的事情。


     一、操作单颗树

    这是我们项目里面,一个敌人绑定了行为树,自动创建的behavior tree 脚本。

     

    红框放大:

     

     

    行为树组件包含以下几个属性:

    当我们有需要的时候,如何代码操作这些变量呢?

    1)我们必须先找到要操作的树

    找树的方法1:定义一个Public的 BehaviorTree tree = new BehaviorTree();,然后面板拖拽赋值。

    找树的方法2:定义一个privarte的 BehaviorTree tree = new BehaviorTree();,然后通过GameObject的Find查找物体,然后获得物体上面的组件来得到的。

    2)代码操作该树

    using BehaviorDesigner.Runtime.Tasks;//引用不可少

    using BehaviorDesigner.Runtime;

     

    public class Tree : MonoBehaviour {

    public BehaviorTree tree = new BehaviorTree();

    void Start () {

        tree.enabled = false;

        var a = tree.GetAllVariables();

        tree.StartWhenEnabled = false;

        var b = tree.FindTasksWithName("AI_Daze");

      }

    }

    上面代码只是简单的演示一下,可以操作行为树的数据。其实 面板截图里面的所有变量都可以操作,除此之外,tree还有很多的属性和方法都可以操作。

     


     二、管理所有树

     

    当行为树运行时,将会自动创建一个带有行为管理器组件的新游戏对象,并且该对象上面绑有 behavior manager组件。此组件管理你场景中所有的执行的行为树

     你可以控制行为树的更新类型,以及更新时间等等

    Update Interval:更新频率

    • Every Frame:每帧都更新行为树
    • Specify Seconds:定义个一个更新间隔时间
    • Manual:手动调用更新,选择这个后需要通过脚本来调用行为树的更新

    Task Execution Type:任务执行类型

    • No Duplicates:不重复
    • Repeater Task:重复任务节点。如果设置成了5,那么每帧被执行5次

     
    BehaviorManager.instance.Tick();
    此外,如果你想让不同的行为树都有各自独立的更新间隔的话,可以这样:
    BehaviorManager.instance.Tick(BehaviorTree);

     更多方法,请查看BehaviorManager类

     

     

     

     

  • 相关阅读:
    java中Condition类的详细介绍(详解)
    Semaphore原理以及使用总结
    RocketMQ消息存储原理总结(一)
    Es Bucket聚合(桶聚合)总结
    "元素隐式具有 “any” 类型,因为类型“Shared”没有索引签名"问题解决思路
    有关生产环境tomcat java应用报错Caused by: java.lang.OutOfMemoryError: Java heap space的调研
    docker 实践02
    正睿比赛总结day1
    【水】一个神秘玩意:如何分辨出差别很小的颜色?
    AtCoder Regular Contest 125 比赛记录(vp)
  • 原文地址:https://www.cnblogs.com/01zxs/p/9886008.html
Copyright © 2020-2023  润新知