Task Migration

Behavior trees from version 1 of Behavior Designer cannot be migrated to Behavior Designer Pro, but you are able to update your tasks relatively easily. For this lets take a look at the following task from version 1:

using UnityEngine;
using BehaviorDesigner.Runtime;
using BehaviorDesigner.Runtime.Tasks;
using Tooltip = BehaviorDesigner.Runtime.Tasks.TooltipAttribute;

namespace MyNamespace
{
    [TaskCategory("Common")]
    [TaskIcon("Assets/MyIcon.png")]
    [TaskDescription("Logs to the console.")]
    public class MyTask : Action
    {
        [Tooltip("Text to output to the log")]
        public SharedString text;

        public override TaskStatus OnUpdate()
        {
            Debug.Log(text.Value);
            return TaskStatus.Success;
        }

        public override void OnReset()
        {
            // Reset the properties back to their original values
            text = "";
        }
    }
}

The following areas need to be updated in order for this task to be updated for Behavior Designer Pro:

  • Namespace Changes: BehaviorDesigner.Runtime no longer exists. We now have:
    • Opsive.BehaviorDesigner.Runtime.Tasks: includes the TaskStatus definition.
    • Opsive.BehaviorDesigner.Runtime.Tasks.Actions/Conditionals: includes the parent Action or Conditional task.
    • Opsive.GraphDesigner.Runtime: Includes the node attributes.
    • Opsive.GraphDesigner.Runtime.Variables: Includes the SharedVariable system.
  • Updated Attributes: With the Graph Designer separation some attribute names have also been updated:
    • TaskIcon: Now called NodeIcon.
    • TaskDescription: Now called NodeDescription.
    • TaskCategory: No longer exists.
    • HelpURL: No longer used.
    • Tooltip: Now uses Unity’s Tooltip attribute.
  • Shared Variable ChangesShared Variables can now be generic, meaning defined variables like SharedString are no longer necessary. SharedVariable<string> should now be used.
  • OnReset Renaming: Instead of OnReset, we now just have Reset.

With these changes the same task from above is now:

using UnityEngine;
using Opsive.BehaviorDesigner.Runtime.Tasks;
using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
using Opsive.GraphDesigner.Runtime;
using Opsive.GraphDesigner.Runtime.Variables;

namespace MyNamespace
{
    [NodeIcon("Assets/MyIcon.png")]
    [NodeDescription("Logs to the console.")]
    public class MyTask : Action
    {
        [Tooltip("Text to output to the log")]
        public SharedVariable<string> text;

        public override TaskStatus OnUpdate()
        {
            Debug.Log(text.Value);
            return TaskStatus.Success;
        }

        public override void Reset()
        {
            // Reset the properties back to their original values
            text = "";
        }
    }
}