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); } }
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(); }
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(); }
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; }