/// <summary> /// Do NOT call this directly! It's a only helper function for the other node creation methods. /// </summary> /// <param name="nodeType"></param> /// <returns></returns> BTNode CreateNode(Type nodeType) { BTNode newNode = (BTNode)ScriptableObject.CreateInstance(nodeType); newNode.id = newNode.GetInstanceID(); // generate a unique ID for the node. AssetDatabase.AddObjectToAsset(newNode, _behaviorTree); EditorUtility.SetDirty(_behaviorTree); return(newNode); }
public static void CreateBehaviorTreeAsset() { // Create behavior tree asset. BTTree behaviorTreeAsset = ScriptableObject.CreateInstance <BTTree>(); int i = 0; while (true) { if (AssetDatabase.LoadAssetAtPath <BTTree>("Assets/BT" + i.ToString() + ".asset")) { i++; if (i > 10000) { break; } } else { break; } } AssetDatabase.CreateAsset(behaviorTreeAsset, "Assets/BT" + i.ToString() + ".asset"); // Add root node to behavior tree. BTNode newNode = ScriptableObject.CreateInstance <BTActionBlank>(); newNode.id = newNode.GetInstanceID(); // generate a unique ID for the node. Debug.Log(behaviorTreeAsset._editorData); if (behaviorTreeAsset._editorData == null) { behaviorTreeAsset._editorData = new List <EditorData> (); } behaviorTreeAsset._editorData.Add(new EditorData(newNode, null)); behaviorTreeAsset.root = newNode; AssetDatabase.AddObjectToAsset(newNode, behaviorTreeAsset); // Set asset as the active object. AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = behaviorTreeAsset; }