• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

luis-l/BonsaiBehaviourTree: An advanced behaviour tree solution for the Unity ga ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

luis-l/BonsaiBehaviourTree

开源软件地址:

https://github.com/luis-l/BonsaiBehaviourTree

开源编程语言:

C# 100.0%

开源软件介绍:

License: MIT Join the chat at https://gitter.im/BonsaiBehaviourTree/community

Bonsai Behaviour Tree

Bonsai Logo

Advanced behavior tree solution with a graphical editor

Bonsai Editor

Goals of the project

  • Lightweight, robust, and fast behaviour trees.
  • Visual editor to build and view behaviour trees.
  • Seamless integration with the Unity workflow/environment.
  • No GC overhead.

Features Overview:

  • The core behaviour tree engine with a set of standard composite, decorator, and task nodes.
  • Blackboard to share data between tasks.
  • A visual editor to create, edit, view, and debug trees.
  • Conditional Aborts (observer aborts) which are event driven.
  • Includes: Parallel execution, Interrupts, Guards, Services, Timers.
  • Supports running Subtrees.
  • Can easily create custom Composites, Decorators, Tasks.
  • Behaviour trees are ScriptableObjects, so it integrates perfectly with the Unity Editor.

Behaviour tree running.

Behaviour tree running

Editor Features and Limitations

During Play mode you can view how the a tree executes and see which nodes are running, the statuses returned (sucesss, failure, aborted, interrupted).

You can also edit certain properties of a node, like changing the abort type, or setting a new waiting time for the wait task via the Unity Inspector.

Things that cannot be currently edited in Play mode:

  • Add or delete nodes
  • Changing the root
  • Changing connections between nodes

Overview

  • A canvas which can be panned and zoomed
  • Multi selection support so you can apply multi-edit/drag/duplicate/delete.
  • Grid snapping
  • Sub-tree dragging - when you drag a node, the entire sub-tree under it drags along.
  • Save and load behaviour tree assets.
  • Attributes which can be used on a custom node class to categorize and add an icon to your custom node.
  • A simple nicify feature which automatically lays out the tree neatly.
  • Multiple behaviour tree editors can be opened at once.
  • Viewing a running behaviour tree just requires clicking on a game object with behaviour tree component.
  • Behaviour tree assets can be opened by double clicking on the asset file.
  • Editor Preferences to change editor behaviour. Node look can be customized. Colors, size, and layouts can be changed.
  • View variables when tree is running. e.g. The time left for the Wait Task.

API and Custom Tasks

These are the base nodes which can be extended:

  • Composite
    • Parallel
  • Decorator
    • Services
    • Conditional Abort
  • Task

In order to add custom functionality you can override key methods:

    // Called only once when the tree is started.
    public virtual void OnStart() { }

    // The logic that the node executes.
    public abstract Status Run();

    // Called when a traversal begins on the node.
    public virtual void OnEnter() { }

    // Called when a traversal on the node ends.
    public virtual void OnExit() { }

    // Called when a child caused an abort.
    public virtual void OnAbort(ConditionalAbort aborter) { }

    // Call when a child finished executing
    public virtual void OnChildExit(int childIndex, Status childStatus) { }

Example of a simple, custom Wait task:

    [BonsaiNode("Tasks/", "Timer")]
    public class Wait : Task
    {
        private float timer = 0f;

        public float waitTime = 1f;

        public override void OnEnter()
        {
            timer = 0f;
        }

        public override Status Run()
        {
            timer += Time.deltaTime;

            if (timer >= waitTime) {
                return Status.Success;
            }

            return Status.Running;
        }
    }

Performance

This is a benchmark running 5000 trees. No GC after startup. The tree in the image is the tree used for benchmark. Tested on a Intel Core i7-4790 @ 4 GHz. (Windows)

Performance Benchmark

The same benchmark was run on a Linux laptop. Intel i5-6200U @ 2.30 GHz. The "Time ms" was on average 4 ms.

Limitations

Since the goal of this project was a lightweight system, a complete, built-in functionality for serialization is not provided. The tree and blackboard structure is saved as an asset, but changing data values will not be persistent between game runs. For example, if you have a blackboard variable ["timer", 0.0f] and during the game run, the value goes up to say 10.0, you would need to save and load that value manually so its persistent between game saves.

Old Screenshots and videos

Bonsai Behaviour Tree Showcase

Videos:

The IsKeyDown decorator has a lower priority abort type set, so the sub-trees to the right are highlighted since they can be aborted by the decorator.

Priority Abort

Here the semaphore guards are linked which highlight in orange, you can also see the custom inspector for the guard, making it easy to link other guards together.

Guards




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap