Пример #1
0
    public void setBT(BTGenotype btGenotype, int _treeIndex)
    {
        treeIndex = _treeIndex;
        BehaviorTree tree = gameObject.AddComponent <BehaviorTree>();

        if (tree != null)
        {
            //Debug.Log("Creando árbol con index " + _treeIndex);
            tree.StartWhenEnabled = false;
            tree.GetBehaviorSource().HasSerialized = false;
            EntryTask entryTask = new EntryTask();
            entryTask.NodeData = new NodeData();
            tree.GetBehaviorSource().EntryTask = entryTask;
            //Debug.Log("Árbol con index " + _treeIndex + ": " + btGenotype.ToString());
            Task rootTask = getBTfromGenotype(btGenotype.getRoot());
            rootTask.NodeData = new NodeData();
            tree.GetBehaviorSource().RootTask      = rootTask;
            tree.GetBehaviorSource().HasSerialized = true;
            tree.RestartWhenComplete = true;
            tree.EnableBehavior();
        }
        else
        {
            Debug.Log("No se pudo crear el árbol con index " + _treeIndex);
        }
    }
Пример #2
0
    void Awake()
    {
        BehaviorTree tree = gameObject.AddComponent <BehaviorTree> ();

        tree.StartWhenEnabled = false;

        EntryTask entryTask = new EntryTask();

        entryTask.NodeData = new NodeData();
        tree.GetBehaviorSource().EntryTask = entryTask;

        Sequence rootTask = new Sequence();

        rootTask.NodeData = new NodeData();

        tree.GetBehaviorSource().RootTask = rootTask;

        Wait myWait = new Wait();

        myWait.NodeData = new NodeData();
        rootTask.AddChild(myWait, 0);

        PatrollTask patroll = new PatrollTask();

        patroll.NodeData = new NodeData();
        rootTask.AddChild(patroll, 1);

        tree.GetBehaviorSource().HasSerialized = true;
        tree.EnableBehavior();
    }
Пример #3
0
    void Start()
    {
        BehaviorTree behaviorTree = gameObject.AddComponent <BehaviorTree>();

        behaviorTree.StartWhenEnabled = false;

        var entryTask = new EntryTask();

#if UNITY_EDITOR
        entryTask.NodeData = new NodeData();
#endif
        behaviorTree.GetBehaviorSource().EntryTask = entryTask;

        var rootTask = new Sequence();
#if UNITY_EDITOR
        rootTask.NodeData = new NodeData();
#endif
        behaviorTree.GetBehaviorSource().RootTask = rootTask;

        Log log = new Log();
#if UNITY_EDITOR
        log.NodeData = new NodeData();
#endif
        log.logError = new SharedBool();
        rootTask.AddChild(log, 0);
        log.text = "try me!...";

        behaviorTree.GetBehaviorSource().HasSerialized = true;
        behaviorTree.EnableBehavior();
    }
Пример #4
0
        public static void LoadGraph(SerializedGraph graph, BehaviourTree behaviourTree, BlackboardManager bbManager)
        {
            EntryTask graphEntry            = null;
            Dictionary <string, Task> tasks = new Dictionary <string, Task>();

            for (int i = 0; i < graph.Nodes.Count; i++)
            {
                var  serializedNode = graph.Nodes[i];
                Type behaviourType  = serializedNode.NodeRuntimeType;

                if (behaviourType == typeof(EntryTask))
                {
                    graphEntry = Activator.CreateInstance <EntryTask>();
                    tasks.Add(serializedNode.Guid, graphEntry);
                }
                else
                {
                    var task = (Task)JsonUtility.FromJson(graph.Nodes[i].NodeJSONData, behaviourType);//(Task)Activator.CreateInstance(behaviourType);
                    tasks.Add(serializedNode.Guid, task);
                    bbManager.BindTask(behaviourTree, task);
                }
            }

            for (int i = 0; i < graph.Edges.Count; i++)
            {
                var serializedEdge = graph.Edges[i];

                Debug.Log($"{serializedEdge.SourceNodeGUID} ---> {serializedEdge.TargetNodeGUID}");

                Task source = tasks[serializedEdge.SourceNodeGUID];
                Task target = tasks[serializedEdge.TargetNodeGUID];

                if (source is EntryTask)
                {
                    EntryTask entry = (EntryTask)source;
                    entry.TreeRoot = target;
                }
                else if (source is Composite)
                {
                    Composite composite = (Composite)source;
                    composite.AddChild(target);
                }
                else if (source is Decorator)
                {
                    Decorator decorator = (Decorator)source;
                    decorator.Decoratee = target;
                }
            }
            behaviourTree.Root = graphEntry;
        }