A little over a month ago I shipped Behave 2 after having spent quite a while rewiring a lot of the core of the project. Today you get to see even more benefit of this work as already I am ready with version 2.1.
I would like to take this opportunity to thank the members of the AngryAnt community who have been a great help in identifying bugs I had not found and properly corner those I had.
Contents
While the full changelist will follow the body of this post as per usual, I would still like to draw out a few of the main changes in 2.1:
- Auto complete on contexts, action names and string parameters makes for faster editing and helps guard against typos.
- Partial library export and import-to-library makes moving trees between projects a breeze.
- Parameterised trees increase tree re-usability even more by exposing select node settings as tree parameters, tweak-able per reference.
Onwards
While 2.1 brings great additions to the solid feature set of Behave 2, I am far from done.
I realise that many currently still on the fence with regards to upgrading from 1.x have asked for more in terms of examples and demos and I will do my best to get to that as soon as possible.
As always, I greatly appreciate any feedback you might have.
Changelist:
2.1:
- Added autocomplete on action names, string parameters and component contexts.
- Added mandatory actions (present in library regardless of use in trees).
- Added partial library export and library merging / import-to-library.
- Added Behave stripping - leave behind only a very lean Behave runtime, for redistribution or super slim deploy.
- Added parameterised trees - get even more re-use out of your trees by overriding context and variables per reference.
- Behavioural change: Tree.Reset will now delay resetting tree variables until after complete component reset.
- Behavioural change: Tree.Tick will no longer automatically reset the tree upon completion. This plays very well with:
- Added Tree.TickContinuously (int iterationCap = 1024) - ticks tree till completion or iteration cap is reached.
- Added BehaveResult Tree.Result (bool value) utility function to side with Tree.Invert (BehaveResult value).
- Added int Debugging.Local.ConnectionCount property - facilitating debug behaviour dependent on Behave debugger presence.
- Moved default install path from Assets/Behave to Assets/Plugins/Behave.
- WARNING: See Readme.txt upgrade guide.
- Fixed decorator control node removal resulting in detached control connection.
- Fixed decorator incorrectly not forwarding the instant status of its child node.
- Fixed scenario where agent classes would get reflected for handlers even if blueprint derived.
- Fixed unexpected corner cases of bad library configuration failing compiles (now causing warnings or simply being ignored).
- Fixed Behave window breaking down when exiting play mode after having been active there.
- Fixes to context getting incorrectly reset in some scenarios.
- Fixed copy / paste functionality missing in some text fields.
- Lots of UI polish and minor fixes.
2.0:
- New editor.
- Unified all controls into one window.
- Completely customised look - compatible with both Unity light and dark skin.
- Keyboard authoring interface in addition to drag & drop.
- Debugger upgrade.
- Remote debugging.
- Tick and reset.
- "Unplug" for debugger-only control.
- Breakpoints.
- Action overrides - override the return values of specified actions.
- Decorator rewrite.
- Deprecated old decorator.
- Still compiles, but cannot be added.
- Decorators are now control-type components.
- No specific decorator handlers on agents.
- Control is achieved via third connection socket.
- Two initial decorator types: Repeater and Interrupter.
- Asset restructuring.
- No more collections - for nesting, use paths in tree names.
- New serialization format - see Readme.txt for upgrade instructions.
- Collections are gone. Use Unix-style path names for tree organisation.
- IAgent.Tick (Tree, bool) changed to IAgent.Tick (Tree)
- Init calls can now only be handled explicitly
- Full coverage online documentation and other community resources.
- Countless fixes and polish items.
1.5:
- Added Tree.TickActive - indicating if a tree is currently executing a tick or if it has completed evaluation.
- In-tick tree reset requests now result in a reset at the end of tree evaluation rather than an immediate one.
- Removed the legacy compatibility assembly (for compatibility with pre-1.2 assets) from the default distribution.
- Fixed "X must be instantiated using the ScriptableObject.CreateInstance method instead of new X" warnings.
1.4:
- Fixed decorator incorrectly initializing on every returning tick when tick handler returned Running.
- Fixed debugger view dependency on active tree editor - causing reported null reference exception.
- Fixed missing scrollbars on browser window.
- Reduced logging noise from debug builds.
- Agent blueprints can now be MonoBehaviour based.
- Clarified wording on "library not loaded".
- Now handling reset a bit cleverer - potential performance boost.
- Changed the default success criteria of Parallel components from SuccessOrFailure to Success.
- Added "instant" flag to components. Components marked instant will affect sequences and selectors when moving between child nodes. When a child node marked "instant" completes, rather than waiting for the next tree tick to tick the following child node, the sequence or selector does it immediately.
- The compiler progress bar returns.
- Editing a Behave asset now focuses the asset browser last instead of the tree editor.
- Behave can now be installed in any subfolder of Assets - provided its internal folder structure remains intact.
- Compilation speed improvements.
- Enabled references across collection borders.
- Added Tree.DataSize - returning the number of bytes used by a tree instance. This is also displayed in the debugger window.
1.3:
- Fixed priority selector init flag resetting.
- Fixed reference handling on tree renaming and deletion.
- Fixed references still pointing at old collection post collection duplication.
- Fixed compilation of actions and decorators with non-integral float parameters.
- Fixed GUI list behaviours.
- Fixed passing context back and forth between referenced trees and referrer.
- Fixed reordering connections not causing save state to be set.
- Various GUI tweaks.
- Runtime optimisations.
- Enabled scrolling of the tree list in the debugger window.
- Exposed Tree.ReflectForwards.
- Added Tree.ResetForwards.
- Added agent blueprints - connecting to agent handlers through virtual methods rather than reflected handlers.
- Made connections selectable in the tree editor via the connection nub.
- Moved connection managing from the inspector to the tree editor, where it is more visible and handy.
- Added support for disabling connections - for faster, less destructive debugging.
- Double-click reference component to jump to referenced tree.
- Changed "Cannot update unregistered tree" handling from an exception to an error message. Still need more info.
- Now showing string and float parameters in the tree editor if either is set.
1.2:
- Fixed release building.
- Added the priority selector, introducing the API points:
- int IAgent.SelectTopPriority (Tree sender, params int[] IDs);
- enum BL[LibraryName].PriorityType { PriorityName, ..., Unknown };
- Added support for branch contexts, introducing the API points:
- enum BL[LibraryName].ContextType { ContextName, ..., Unknown };
- int Tree.ActiveContext { get; }
- Changed IAgent interface:
- Tick (bool init, Tree sender) -> Tick (Tree sender, bool init)
- Added "Select asset" button to the standard inspector.
- Interface polish.
1.1:
- Made compatible with Unity 3.0 - including ensuring that the 2.5-2.6.1 bug preventing compilation on Windows is fixed on the Unity side.
- UI tweaks and polish.
- Added the option to have return values of nodes be inverted.
- Fixed compiler bug when facing sequence or selector with only one child node.
- Renamed Library.Tree -> Library.InstantiateTree.
- Added Tree.Tick () and Tree.Reset () methods using the IAgent instance given at instantiation of the tree.
- Removed the abstract Library class.
- Changed generated library class:
- Trees -> TreeType.
- Actions -> ActionType.
- Decorators -> DecoratorType.
- Tree InstantiateTree (int, IAgent) -> static Tree InstantiateTree (TreeType, IAgent)
- int TreeID (Tree) -> static TreeType Type (Tree)
- bool IsAction (int) -> static bool IsAction (int)
- bool IsDecorator (int) -> static bool IsDecorator (int)
- Upped editor performance.
- New asset structure change with automatic import of Behave 1.0 assets.
- Changed action and decorator handlers. These are now the handlers mapped:
- public BehaveResult Init[Name][Action/Decorator] (Tree sender, string stringParameter, float floatParameter, IAgent agent, object data);
- public BehaveResult Tick[Name][Action/Decorator] (Tree sender, string stringParameter, float floatParameter, IAgent agent, object data);
- public void Reset[Name][Action/Decorator] (Tree sender, string stringParameter, float floatParameter, IAgent agent, object data);
- public BehaveResult Init[Name][Action/Decorator] (Tree sender);
- public BehaveResult Tick[Name][Action/Decorator] (Tree sender);
- public void Reset[Name][Action/Decorator] (Tree sender);
- public BehaveResult [Name][Action/Decorator] {get; set;}
- Added support for collection duplication.
- Moved debug rendering into the editor with its own dedicated debugger window, including actor listing.
- Debugger now renders active sub-trees as well.
1.0:
- Lots o fixes for Unity 2.5 compatibility.
- Closer editor integration with new UI.
- Component bar.
- Node inspection.
- Runtime tree debugging.
- Direct mapping of action and delegate handlers via reflection.
- Kitty demo.
0.3b:
- Various tweaks to the editor UI.
- Optimised the compiler.
- Fixed the following editor bugs from the bug list:
- When the editor scrips are recompiled and when the user enters and exits play mode, running editors will loose references, causing undetermined behaviour.
- When a compile fails, the Behave compiler is locked and unusable – requiring a unity relaunch.
- Implemented the following wishlist items:
- Behaviour tree decorators.
- Stand-alone edition of the Behave editor.
- Behaviour tree debugging features.
0.2b:
- Made the demo project a whole lot more interesting.
- Implemented the editor wish list item: Ability to move trees between collections.
- Various tweaks to the editor UI.
- Fixed a ton of bugs in the compiler.
- Fixed the following editor bugs from the bug list:
- Not able to delete collections from library.
- Not able to delete trees from library.
- Not able to rename collections from library.
- Not able to rename trees from library.
- Missing "tree has been changed, save changes?" dialog.
0.1b:
- Some documentation is available.
- Compiler is now creating sensible output.
- A simple test tree and script using it is provided with the demo.
- Documentation is linked directly from the unity help menu.
- Less spamming of the log with debug information.
Pre-release:
- Magic happened. Behave was born.
