فهرست منبع

整理行为树编辑器代码

tanghai 8 سال پیش
والد
کامیت
8ebb054dc1
23فایلهای تغییر یافته به همراه439 افزوده شده و 386 حذف شده
  1. 1 0
      .gitignore
  2. 1 1
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorBatchOperation.cs
  3. 4 4
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorDesignerWindow.cs
  4. 75 74
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorManager.cs
  5. 2 2
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorNodeConfigExtension.cs
  6. 5 5
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorNodeData.cs
  7. 1 1
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeConfigEditor.cs
  8. 1 1
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeConfigExtension.cs
  9. 1 1
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeMenu.cs
  10. 4 4
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeNodeClassPopup.cs
  11. 2 2
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeOperateUtility.cs
  12. 4 4
      Unity/Assets/Editor/BehaviorTreeEditor/Event/BehaviorTreeRunTreeEvent_ShowDebugInfo.cs
  13. 1 1
      Unity/Assets/Editor/BehaviorTreeEditor/ExportNodeTypeConfig.cs
  14. 54 54
      Unity/Assets/Editor/BehaviorTreeEditor/GraphDesigner.cs
  15. 14 14
      Unity/Assets/Editor/BehaviorTreeEditor/NodeDesigner.cs
  16. 3 3
      Unity/Assets/Editor/BehaviorTreeEditor/NodeExtension.cs
  17. 18 18
      Unity/Assets/Editor/BehaviorTreeEditor/PropertyDesigner.cs
  18. 11 11
      Unity/Assets/Editor/BehaviorTreeEditor/RightDesigner.cs
  19. 150 21
      Unity/Assets/Res/BT/BT_大厅UI创建时执行行为树.prefab
  20. 64 43
      Unity/Assets/Scenes/Init.unity
  21. 15 13
      Unity/Assets/Scripts/BehaviorTree/BehaviorNodeConfig.cs
  22. 4 107
      Unity/Assets/Scripts/BehaviorTree/NodeProto.cs
  23. 4 2
      Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs

+ 1 - 0
.gitignore

@@ -34,3 +34,4 @@ _ReSharper.CSharp/
 /Logs
 /Unity/CSharp60Support/compilation.log
 /.vs
+/Unity/.vs/

+ 1 - 1
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorBatchOperation.cs

@@ -68,7 +68,7 @@ namespace MyEditor
 		public static bool HasNodeField(NodeProto node, Type searchType, string prefabPath)
 		{
 			FieldInfo[] fieldInfos = ExportNodeTypeConfig.GetFieldInfos(node.name);
-			foreach (var fieldInfo in fieldInfos)
+			foreach (FieldInfo fieldInfo in fieldInfos)
 			{
 				if (fieldInfo.FieldType == searchType)
 				{

+ 4 - 4
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorDesignerWindow.cs

@@ -106,17 +106,17 @@ namespace MyEditor
 
 		public void HandleEvents()
 		{
-			var e = Event.current;
+			Event e = Event.current;
 			switch (e.type)
 			{
 				case EventType.KeyUp:
 					if (e.keyCode == KeyCode.Escape || (e.keyCode == KeyCode.S && e.control))
 					{
-						BehaviorManager.GetInstance().SaveAll();
+						BehaviorManager.Instance.SaveAll();
 					}
 					else if (e.keyCode == KeyCode.F4)
 					{
-						BehaviorManager.GetInstance().SaveAll();
+						BehaviorManager.Instance.SaveAll();
 					}
 					break;
 				case EventType.MouseDown:
@@ -127,7 +127,7 @@ namespace MyEditor
 
 		public void OnDestroy()
 		{
-			BehaviorManager.GetInstance().Clear();
+			BehaviorManager.Instance.Clear();
 		}
 
 		public void onUpdatePropList(params object[] list)

+ 75 - 74
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorManager.cs

@@ -16,10 +16,9 @@ namespace MyEditor
 		public BehaviorTreeData CurTree { get; set; }
 		public const int NodeIdStartIndex = 100000;
 		private int AutoID = NodeIdStartIndex;
-		private Dictionary<string, ClientNodeTypeProto> mName2NodeProtoDict = new Dictionary<string, ClientNodeTypeProto>(); //节点类型 name索引
-		private Dictionary<string, List<ClientNodeTypeProto>> mClassify2NodeProtoList = new Dictionary<string, List<ClientNodeTypeProto>>(); //节点分类 分类名索引
-		private readonly Dictionary<int, NodeDesignerProto> mId2DesignerDict = new Dictionary<int, NodeDesignerProto>();
-		private static BehaviorManager mInstance = new BehaviorManager();
+		private Dictionary<string, ClientNodeTypeProto> name2NodeProtoDict = new Dictionary<string, ClientNodeTypeProto>(); //节点类型 name索引
+		private Dictionary<string, List<ClientNodeTypeProto>> classify2NodeProtoList = new Dictionary<string, List<ClientNodeTypeProto>>(); //节点分类 分类名索引
+		private static readonly BehaviorManager instance = new BehaviorManager();
 		public static List<List<long>> treePathList = new List<List<long>>();
 		public string selectNodeName;
 		public string selectNodeType;
@@ -33,20 +32,19 @@ namespace MyEditor
 			}
 		}
 
-		public static BehaviorManager GetInstance()
+		public static BehaviorManager Instance
 		{
-			if (mInstance == null)
+			get
 			{
-				mInstance = new BehaviorManager();
+				return instance;
 			}
-			return mInstance;
 		}
 
 		public Dictionary<string, List<ClientNodeTypeProto>> Classify2NodeProtoList
 		{
 			get
 			{
-				return mClassify2NodeProtoList;
+				return this.classify2NodeProtoList;
 			}
 		}
 
@@ -55,9 +53,9 @@ namespace MyEditor
 			get
 			{
 				List<ClientNodeTypeProto> list = new List<ClientNodeTypeProto>();
-				foreach (var item in GetInstance().Classify2NodeProtoList)
+				foreach (KeyValuePair<string, List<ClientNodeTypeProto>> item in Instance.Classify2NodeProtoList)
 				{
-					foreach (var proto in item.Value)
+					foreach (ClientNodeTypeProto proto in item.Value)
 					{
 						list.Add(proto);
 					}
@@ -75,8 +73,8 @@ namespace MyEditor
 
 		public void FilterClassify()
 		{
-			mClassify2NodeProtoList = new Dictionary<string, List<ClientNodeTypeProto>>();
-			foreach (var nodeType in mName2NodeProtoDict.Values)
+			this.classify2NodeProtoList = new Dictionary<string, List<ClientNodeTypeProto>>();
+			foreach (ClientNodeTypeProto nodeType in this.name2NodeProtoDict.Values)
 			{
 				if (nodeType.isDeprecated)
 				{
@@ -87,11 +85,11 @@ namespace MyEditor
 				{
 					classify = "未分类";
 				}
-				if (!mClassify2NodeProtoList.ContainsKey(classify))
+				if (!this.classify2NodeProtoList.ContainsKey(classify))
 				{
-					mClassify2NodeProtoList.Add(classify, new List<ClientNodeTypeProto>());
+					this.classify2NodeProtoList.Add(classify, new List<ClientNodeTypeProto>());
 				}
-				mClassify2NodeProtoList[classify].Add(nodeType);
+				this.classify2NodeProtoList[classify].Add(nodeType);
 			}
 		}
 
@@ -109,7 +107,7 @@ namespace MyEditor
 
 		public void LoadNodeTypeProto()
 		{
-			mName2NodeProtoDict = ExportNodeTypeConfig.ExportToDict();
+			this.name2NodeProtoDict = ExportNodeTypeConfig.ExportToDict();
 		}
 
 		public void NewLoadPrefabTree()
@@ -120,15 +118,17 @@ namespace MyEditor
 
 		public BehaviorTreeData BehaviorTreeConfigToTreeData(BehaviorTreeConfig config)
 		{
-			BehaviorTreeData tree = new BehaviorTreeData();
-			tree.Root = NodeConfigToNodeData(config.RootNodeConfig);
+			BehaviorTreeData tree = new BehaviorTreeData
+			{
+				Root = NodeConfigToNodeData(config.RootNodeConfig)
+			};
 			return tree;
 		}
 
 		public void printTree(BehaviorNodeData nodeData)
 		{
 			Log.Info($"printTree  :  {nodeData.nodeId} {nodeData}");
-			foreach (var data in nodeData.children)
+			foreach (BehaviorNodeData data in nodeData.children)
 			{
 				printTree(data);
 			}
@@ -143,7 +143,7 @@ namespace MyEditor
 		public bool CheckNodeInput(NodeProto nodeProto)
 		{
 			List<NodeFieldDesc> list = ExportNodeTypeConfig.GetNodeFieldInOutPutDescList(nodeProto.name, typeof (NodeInputAttribute));
-			foreach (var desc in list)
+			foreach (NodeFieldDesc desc in list)
 			{
 				List<string> canInputList = GetCanInPutEnvKeyList(NodeProtoToNodeData(nodeProto), desc);
 				string value = nodeProto.args_dict.GetTreeDictValue(desc.type, desc.name)?.ToString();
@@ -154,7 +154,7 @@ namespace MyEditor
 					return false;
 				}
 			}
-			foreach (var child in nodeProto.children)
+			foreach (NodeProto child in nodeProto.children)
 			{
 				if (!CheckNodeInput(child))
 				{
@@ -185,7 +185,7 @@ namespace MyEditor
 
 			BehaviorTreeConfig config = BehaviorTreeDataToConfig(CurTree);
 			RenameTree(config);
-			GameObject.DestroyImmediate(config.gameObject);
+			Object.DestroyImmediate(config.gameObject);
 		}
 
 		public void ResetTreeId()
@@ -202,14 +202,14 @@ namespace MyEditor
 		{
 			ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(nodeProto.name);
 			List<string> unUsedList = new List<string>();
-			foreach (var item in nodeProto.args_dict)
+			foreach (KeyValuePair<string, ValueBase> item in nodeProto.args_dict)
 			{
 				if (!proto.new_args_desc.Exists(a => (a.name == item.Key)))
 				{
 					unUsedList.Add(item.Key);
 				}
 			}
-			foreach (var item in unUsedList)
+			foreach (string item in unUsedList)
 			{
 				nodeProto.args_dict.Remove(item);
 			}
@@ -249,7 +249,7 @@ namespace MyEditor
 
 		public BehaviorTreeConfig BehaviorTreeDataToConfig(BehaviorTreeData tree)
 		{
-			GameObject curTreeGo = GameObject.Instantiate(CurTreeGO);
+			GameObject curTreeGo = Object.Instantiate(CurTreeGO);
 			BehaviorTreeConfig config = curTreeGo.GetComponent<BehaviorTreeConfig>();
 			if (config == null)
 			{
@@ -257,7 +257,7 @@ namespace MyEditor
 			}
 			foreach (Transform child in config.gameObject.transform)
 			{
-				GameObject.DestroyImmediate(child.gameObject);
+				Object.DestroyImmediate(child.gameObject);
 			}
 			try
 			{
@@ -302,7 +302,7 @@ namespace MyEditor
 			go.name = nodeData.name;
 			nodeConfig.describe = nodeData.describe;
 			List<string> unUseList = new List<string>();
-			foreach (var args in nodeData.args_dict)
+			foreach (KeyValuePair<string, ValueBase> args in nodeData.args_dict)
 			{
 				if (!ExportNodeTypeConfig.NodeHasField(nodeData.name, args.Key))
 				{
@@ -334,7 +334,7 @@ namespace MyEditor
 			{
 				nodeData.args_dict.Remove(key);
 			}
-			foreach (var child in nodeData.children)
+			foreach (BehaviorNodeData child in nodeData.children)
 			{
 				BehaviorNodeConfig childConfig = NodeDataToNodeConfig(child);
 				childConfig.gameObject.transform.parent = nodeConfig.gameObject.transform;
@@ -344,13 +344,15 @@ namespace MyEditor
 
 		public BehaviorNodeData NodeProtoToNodeData(NodeProto nodeProto)
 		{
-			BehaviorNodeData nodeData = new BehaviorNodeData();
-			nodeData.nodeId = nodeProto.nodeId;
-			nodeData.name = nodeProto.name;
-			nodeData.describe = nodeProto.describe;
-			nodeData.args_dict = nodeProto.args_dict;
-			nodeData.children = new List<BehaviorNodeData>();
-			foreach (var child in nodeProto.children)
+			BehaviorNodeData nodeData = new BehaviorNodeData
+			{
+				nodeId = nodeProto.nodeId,
+				name = nodeProto.name,
+				describe = nodeProto.describe,
+				args_dict = nodeProto.args_dict,
+				children = new List<BehaviorNodeData>()
+			};
+			foreach (NodeProto child in nodeProto.children)
 			{
 				nodeData.children.Add(this.NodeProtoToNodeData(child));
 			}
@@ -359,35 +361,34 @@ namespace MyEditor
 
 		public NodeProto NodeDataToNodeProto(BehaviorNodeData nodeData)
 		{
-			NodeProto nodeProto = new NodeProto();
-			nodeProto.nodeId = nodeData.nodeId;
-			nodeProto.name = nodeData.name;
-			nodeProto.describe = nodeData.describe;
-
-			nodeProto.nodeIdList = new List<int>();
-			nodeProto.args_dict = nodeData.args_dict;
-			nodeProto.children = new List<NodeProto>();
-			foreach (var child in nodeData.children)
+			NodeProto nodeProto = new NodeProto
+			{
+				nodeId = nodeData.nodeId,
+				name = nodeData.name,
+				describe = nodeData.describe,
+				args_dict = nodeData.args_dict,
+				children = new List<NodeProto>()
+			};
+			foreach (BehaviorNodeData child in nodeData.children)
 			{
 				nodeProto.children.Add(NodeDataToNodeProto(child));
-				nodeProto.nodeIdList.Add(child.nodeId);
 			}
 			return nodeProto;
 		}
 
-		private List<NodeFieldDesc> GetFieldDescList(NodeProto nodeProto, Type type)
-		{
-			List<NodeFieldDesc> list = ExportNodeTypeConfig.GetNodeFieldInOutPutDescList(nodeProto.name, type);
-			foreach (NodeProto childProto in nodeProto.children)
-			{
-				list.AddRange(GetFieldDescList(childProto, type));
-			}
-			return list;
-		}
+		//private List<NodeFieldDesc> GetFieldDescList(NodeProto nodeProto, Type type)
+		//{
+		//	List<NodeFieldDesc> list = ExportNodeTypeConfig.GetNodeFieldInOutPutDescList(nodeProto.name, type);
+		//	foreach (NodeProto childProto in nodeProto.children)
+		//	{
+		//		list.AddRange(GetFieldDescList(childProto, type));
+		//	}
+		//	return list;
+		//}
 
 		public BehaviorNodeData CreateNode(int treeId, string nodeName)
 		{
-			if (!mName2NodeProtoDict.ContainsKey(nodeName))
+			if (!this.name2NodeProtoDict.ContainsKey(nodeName))
 			{
 				Debug.LogError($"节点类型:{nodeName}不存在");
 				return null;
@@ -405,17 +406,17 @@ namespace MyEditor
 			copyNode.describe = node.describe;
 			copyNode.Pos = node.Pos;
 			copyNode.args_dict = new BehaviorTreeArgsDict();
-			foreach (var item in node.args_dict)
+			foreach (KeyValuePair<string, ValueBase> item in node.args_dict)
 			{
 				ValueBase valueBase = ValueBase.Clone(item.Value);
 				copyNode.args_dict.Add(item.Key, valueBase);
 			}
 			List<BehaviorNodeData> list = new List<BehaviorNodeData>();
-			foreach (var item in node.children)
+			foreach (BehaviorNodeData item in node.children)
 			{
 				list.Add(item);
 			}
-			foreach (var child in list)
+			foreach (BehaviorNodeData child in list)
 			{
 				copyNode.AddChild(CopyNode(child));
 			}
@@ -439,10 +440,10 @@ namespace MyEditor
 		public string[] GetCanInPutEnvKeyArray(BehaviorNodeData nodeData, NodeFieldDesc desc)
 		{
 			List<string> list1 = new List<string>();
-			list1.AddRange(GetInstance().GetNodeOutPutEnvKeyList(nodeData, desc));
+			list1.AddRange(Instance.GetNodeOutPutEnvKeyList(nodeData, desc));
 			list1.Add(BTEnvKey.None);
 			HashSet<string> hashSet = new HashSet<string>();
-			foreach (var item in list1)
+			foreach (string item in list1)
 			{
 				hashSet.Add(item);
 			}
@@ -458,14 +459,14 @@ namespace MyEditor
 
 		public List<string> GetCanInPutEnvKeyList(BehaviorNodeData nodeData, NodeFieldDesc desc)
 		{
-			List<string> list1 = GetInstance().GetNodeOutPutEnvKeyList(nodeData, desc);
+			List<string> list1 = Instance.GetNodeOutPutEnvKeyList(nodeData, desc);
 			HashSet<string> hashSet = new HashSet<string>();
-			foreach (var item in list1)
+			foreach (string item in list1)
 			{
 				hashSet.Add(item);
 			}
 			List<string> resultList = new List<string>();
-			foreach (var item in hashSet)
+			foreach (string item in hashSet)
 			{
 				resultList.Add(item);
 			}
@@ -478,7 +479,7 @@ namespace MyEditor
 			NodeProto inputNode = NodeDataToNodeProto(nodeData);
 			List<NodeFieldDesc> descList = _GetNodeOutPutEnvKeyList(rootNode, inputNode, desc);
 			List<string> list = new List<string>();
-			foreach (var item in descList)
+			foreach (NodeFieldDesc item in descList)
 			{
 				string str = item.value?.ToString() ?? "";
 				list.Add(str);
@@ -486,7 +487,7 @@ namespace MyEditor
 			return list;
 		}
 
-		private List<NodeFieldDesc> _GetNodeOutPutEnvKeyList(NodeProto nodeProto, NodeProto inputNode, NodeFieldDesc desc = null)
+		private static List<NodeFieldDesc> _GetNodeOutPutEnvKeyList(NodeProto nodeProto, NodeProto inputNode, NodeFieldDesc desc = null)
 		{
 			if (nodeProto.nodeId >= inputNode.nodeId)
 			{
@@ -520,7 +521,7 @@ namespace MyEditor
 			List<string> resultList = new List<string>();
 			List<NodeFieldDesc> list = ExportNodeTypeConfig.GetNodeFieldInOutPutDescList(nodeProto.name, typeof (NodeInputAttribute));
 
-			foreach (var desc in list)
+			foreach (NodeFieldDesc desc in list)
 			{
 				if (!nodeProto.args_dict.ContainsKey(desc.name))
 				{
@@ -551,7 +552,7 @@ namespace MyEditor
 		{
 			NodeProto nodeProto = NodeDataToNodeProto(node);
 			List<NodeFieldDesc> list = ExportNodeTypeConfig.GetNodeFieldInOutPutDescList(nodeProto.name, typeof (NodeOutputAttribute));
-			foreach (var desc in list)
+			foreach (NodeFieldDesc desc in list)
 			{
 				if (!nodeProto.args_dict.ContainsKey(desc.name))
 				{
@@ -570,9 +571,9 @@ namespace MyEditor
 		public void SetDebugState(BehaviorTree tree, List<long> pathList)
 		{
 			CurBehaviorTree = tree;
-			foreach (var nodeId in pathList)
+			foreach (long nodeId in pathList)
 			{
-				GetInstance().SetDebugState(tree, (int) nodeId);
+				Instance.SetDebugState(tree, (int) nodeId);
 			}
 		}
 
@@ -593,10 +594,10 @@ namespace MyEditor
 			_ClearDebugState(CurTree.Root);
 		}
 
-		private void _ClearDebugState(BehaviorNodeData nodeData)
+		private static void _ClearDebugState(BehaviorNodeData nodeData)
 		{
 			nodeData.NodeDeubgState = DebugState.Normal;
-			foreach (var child in nodeData.children)
+			foreach (BehaviorNodeData child in nodeData.children)
 			{
 				_ClearDebugState(child);
 			}
@@ -609,7 +610,7 @@ namespace MyEditor
 			{
 				return nodeData;
 			}
-			foreach (var child in nodeData.children)
+			foreach (BehaviorNodeData child in nodeData.children)
 			{
 				result = GetNodeData(child, nodeId);
 				if (result != null)
@@ -626,7 +627,7 @@ namespace MyEditor
 			{
 				return nodeData;
 			}
-			foreach (var data in nodeData.children)
+			foreach (BehaviorNodeData data in nodeData.children)
 			{
 				return GetNode(data, nodeId);
 			}

+ 2 - 2
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorNodeConfigExtension.cs

@@ -16,7 +16,7 @@ namespace Model
 			nodeConfig.name = nodeData.name;
 			go.name = nodeData.name;
 			nodeConfig.describe = nodeData.describe;
-			foreach (var args in nodeData.args_dict)
+			foreach (KeyValuePair<string, ValueBase> args in nodeData.args_dict)
 			{
 				Type originType = ExportNodeTypeConfig.GetFieldType(nodeData.name, args.Key);
 				try
@@ -39,7 +39,7 @@ namespace Model
 					throw new GameException($"transform failed,nodeName:{nodeData.name}  fieldName:{args.Key} fieldType:{originType}");
 				}
 			}
-			foreach (var child in nodeData.children)
+			foreach (NodeProto child in nodeData.children)
 			{
 				BehaviorNodeConfig childConfig = ProtoToConfig(child);
 				childConfig.gameObject.transform.parent = nodeConfig.gameObject.transform;

+ 5 - 5
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorNodeData.cs

@@ -65,15 +65,15 @@ namespace MyEditor
 		public BehaviorNodeData(string proto_name)
 		{
 			name = proto_name;
-			this.Proto = BehaviorManager.GetInstance().GetNodeTypeProto(proto_name);
+			this.Proto = BehaviorManager.Instance.GetNodeTypeProto(proto_name);
 			if (this.Proto == null)
 			{
-				this.Proto = BehaviorManager.GetInstance().GetNodeTypeProto("Unknow");
+				this.Proto = BehaviorManager.Instance.GetNodeTypeProto("Unknow");
 				return;
 			}
 			mClassify = this.Proto.classify;
 
-			foreach (var args_desc in this.Proto.new_args_desc)
+			foreach (NodeFieldDesc args_desc in this.Proto.new_args_desc)
 			{
 				args_dict.SetKeyValueComp(args_desc.type, args_desc.name, args_desc.value);
 			}
@@ -120,8 +120,8 @@ namespace MyEditor
 
 		public void ResetId()
 		{
-			this.nodeId = BehaviorManager.GetInstance().AutoNodeId();
-			foreach (var child in children)
+			this.nodeId = BehaviorManager.Instance.AutoNodeId();
+			foreach (BehaviorNodeData child in children)
 			{
 				child.ResetId();
 			}

+ 1 - 1
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeConfigEditor.cs

@@ -14,7 +14,7 @@ namespace MyEditor
 
 			if (GUILayout.Button("打开行为树"))
 			{
-				BehaviorManager.GetInstance().OpenBehaviorEditor(config.gameObject);
+				BehaviorManager.Instance.OpenBehaviorEditor(config.gameObject);
 			}
 			EditorUtility.SetDirty(config);
 		}

+ 1 - 1
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeConfigExtension.cs

@@ -41,7 +41,7 @@ namespace Model
 			node.name = name;
 			node.describe = proto.describe;
 
-			foreach (var args in proto.new_args_desc)
+			foreach (NodeFieldDesc args in proto.new_args_desc)
 			{
 				Type type = BTTypeManager.GetBTType(args.type);
 				UnityEngine.Component comp = go.AddComponent(type);

+ 1 - 1
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeMenu.cs

@@ -9,7 +9,7 @@ namespace MyEditor
 		[MenuItem("Assets/Create/创建行为树")]
 		private static void CreateBehaviorTree()
 		{
-			var folderPath = AssetDatabase.GetAssetPath(Selection.activeObject);
+			string folderPath = AssetDatabase.GetAssetPath(Selection.activeObject);
 			if ((File.GetAttributes(folderPath) & FileAttributes.Directory) != FileAttributes.Directory)
 			{
 				GUILayout.Label("请选择一个文件夹");

+ 4 - 4
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeNodeClassPopup.cs

@@ -49,7 +49,7 @@ namespace MyEditor
 			Array strArr = Enum.GetValues(typeof (NodeClassifyType));
 			List<string> strList = new List<string>();
 			strList.Add("All");
-			foreach (var str in strArr)
+			foreach (object str in strArr)
 			{
 				strList.Add(str.ToString());
 			}
@@ -68,7 +68,7 @@ namespace MyEditor
 			this.mTreeScrollPos = GUI.BeginScrollView(new Rect(0f, topSpace, windowRect.width, windowRect.height - topSpace), this.mTreeScrollPos,
 					new Rect(0f, 0f, windowRect.width - 20f, nodeNameList.Count * 19), false, true);
 
-			foreach (var name in nodeNameList)
+			foreach (string name in nodeNameList)
 			{
 				ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(name);
 				if (GUILayout.Button(name + $"({proto.describe})", GetButtonStyle()))
@@ -109,7 +109,7 @@ namespace MyEditor
 			else
 			{
 				selectType = Enum.GetName(typeof (NodeClassifyType), mEnumNodeTypeSelection - 1);
-				foreach (var name in list)
+				foreach (string name in list)
 				{
 					ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(name);
 					if (selectType == proto.classify)
@@ -125,7 +125,7 @@ namespace MyEditor
 			}
 
 			List<string> result2 = new List<string>();
-			foreach (var name in result1)
+			foreach (string name in result1)
 			{
 				ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(name);
 				if (name.ToUpper().Contains(text.ToUpper()) || proto.describe.ToUpper().Contains(text.ToUpper()))

+ 2 - 2
Unity/Assets/Editor/BehaviorTreeEditor/BehaviorTreeOperateUtility.cs

@@ -42,7 +42,7 @@ namespace MyEditor
 
 		public void UpdateData()
 		{
-			foreach (var argsItem in Proto.args_dict)
+			foreach (KeyValuePair<string, ValueBase> argsItem in Proto.args_dict)
 			{
 				FieldInfo fieldInfo = typeof (T).GetField(argsItem.Key, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
 				fieldInfo.SetValue(Node, argsItem.Value.GetValueByType(fieldInfo.FieldType));
@@ -60,7 +60,7 @@ namespace MyEditor
 		public static NodeProto NodeProtoParamClone(NodeProto p)
 		{
 			NodeProto newP = new NodeProto();
-			foreach (var dict in p.args_dict)
+			foreach (KeyValuePair<string, ValueBase> dict in p.args_dict)
 			{
 				string key = dict.Key;
 				ValueBase value = ValueBase.Clone(dict.Value);

+ 4 - 4
Unity/Assets/Editor/BehaviorTreeEditor/Event/BehaviorTreeRunTreeEvent_ShowDebugInfo.cs

@@ -9,12 +9,12 @@ namespace MyEditor
 	{
 		public void Run(BehaviorTree tree, List<long> pathList)
 		{
-			if (BehaviorManager.GetInstance().BehaviorTreeConfig != null &&
-			    tree.behaviorTreeConfig.name == BehaviorManager.GetInstance().BehaviorTreeConfig.name)
+			if (BehaviorManager.Instance.BehaviorTreeConfig != null &&
+			    tree.behaviorTreeConfig.name == BehaviorManager.Instance.BehaviorTreeConfig.name)
 			{
 				BehaviorManager.treePathList.Add(pathList);
-				BehaviorManager.GetInstance().ClearDebugState();
-				BehaviorManager.GetInstance().SetDebugState(tree, pathList);
+				BehaviorManager.Instance.ClearDebugState();
+				BehaviorManager.Instance.SetDebugState(tree, pathList);
 			}
 		}
 	}

+ 1 - 1
Unity/Assets/Editor/BehaviorTreeEditor/ExportNodeTypeConfig.cs

@@ -107,7 +107,7 @@ namespace MyEditor
 		{
 			List<NodeFieldDesc> list = GetNodeFieldInOutPutDescList(nodeName, fieldAttributeType);
 			List<NodeFieldDesc> filterList = new List<NodeFieldDesc>();
-			foreach (var item in list)
+			foreach (NodeFieldDesc item in list)
 			{
 				if (item.envKeyType == paramType || item.envKeyType.IsSubclassOf(paramType) || paramType.IsAssignableFrom(item.envKeyType))
 				{

+ 54 - 54
Unity/Assets/Editor/BehaviorTreeEditor/GraphDesigner.cs

@@ -64,7 +64,7 @@ namespace MyEditor
 		public void DrawNodes()
 		{
 			RootNode?.Draw();
-			foreach (var node in mDetachedNodes)
+			foreach (NodeDesigner node in mDetachedNodes)
 			{
 				node.Draw();
 			}
@@ -77,7 +77,7 @@ namespace MyEditor
 			{
 				return;
 			}
-			var curPos = Event.current.mousePosition; //MousePosToGraphPos(Event.current.mousePosition);
+			Vector2 curPos = Event.current.mousePosition; //MousePosToGraphPos(Event.current.mousePosition);
 			if (mState == State.ConnectLeft)
 			{
 				BehaviorDesignerUtility.DrawConnection(mSelectedNode.LeftPos, curPos);
@@ -96,7 +96,7 @@ namespace MyEditor
 
 		public void HandleEvents()
 		{
-			var e = Event.current;
+			Event e = Event.current;
 			switch (e.type)
 			{
 				case EventType.MouseDown:
@@ -253,11 +253,11 @@ namespace MyEditor
 
 		public void CheckMouseInNode()
 		{
-			var pos = MousePosToGraphPos(Event.current.mousePosition);
+			Vector2 pos = MousePosToGraphPos(Event.current.mousePosition);
 			RootNode?.OnMousePos(pos);
 			for (int i = 0; i < mDetachedNodes.Count; i++)
 			{
-				var node = mDetachedNodes[i];
+				NodeDesigner node = mDetachedNodes[i];
 				node.OnMousePos(pos);
 			}
 		}
@@ -299,7 +299,7 @@ namespace MyEditor
 
 		public Vector2 CenterPosInBorder()
 		{
-			var pos = new Vector2();
+			Vector2 pos = new Vector2();
 			pos.x = mScrollPosition.x + mBorderRect.width / 2;
 			pos.y = mScrollPosition.y + mBorderRect.height / 2;
 			return pos;
@@ -308,10 +308,10 @@ namespace MyEditor
 		public void DrawBackground()
 		{
 			float width = 15f;
-			var bgTex = BehaviorDesignerUtility.GetTexture("Bg");
+			Texture2D bgTex = BehaviorDesignerUtility.GetTexture("Bg");
 			GUI.DrawTexture(new Rect(0, 0, mGraphRect.width, mGraphRect.height), bgTex);
 
-			var lineTex = BehaviorDesignerUtility.GetTexture("BgLine");
+			Texture2D lineTex = BehaviorDesignerUtility.GetTexture("BgLine");
 			for (int i = 0; i < mGraphRect.width / width; i++)
 			{
 				GUI.DrawTexture(new Rect(width * i, 0, 1f, mGraphRect.height), lineTex);
@@ -328,9 +328,9 @@ namespace MyEditor
 			if (mSelectedNode != null)
 			{
 				if (mSelectedNode.NodeData.Proto.classify == NodeClassifyType.Root.ToString() ||
-				    BehaviorManager.GetInstance().CurTree.Root.nodeId == mSelectedNode.NodeData.nodeId)
+				    BehaviorManager.Instance.CurTree.Root.nodeId == mSelectedNode.NodeData.nodeId)
 				{
-					List<ClientNodeTypeProto> list = BehaviorManager.GetInstance().Classify2NodeProtoList[NodeClassifyType.Root.ToString()];
+					List<ClientNodeTypeProto> list = BehaviorManager.Instance.Classify2NodeProtoList[NodeClassifyType.Root.ToString()];
 					foreach (ClientNodeTypeProto nodeType in list)
 					{
 						result.Add(nodeType.name);
@@ -340,7 +340,7 @@ namespace MyEditor
 				else
 				{
 					// NodeChildLimitType nodeChildLimitType = mSelectedNode.NodeData.IsLeaf() ? NodeChildLimitType.All : NodeChildLimitType.WithChild;
-					List<ClientNodeTypeProto> canSubtituteList = BehaviorManager.GetInstance().AllNodeProtoList;
+					List<ClientNodeTypeProto> canSubtituteList = BehaviorManager.Instance.AllNodeProtoList;
 					canSubtituteList.Sort(CompareShowName);
 					foreach (ClientNodeTypeProto nodeType in canSubtituteList)
 					{
@@ -363,7 +363,7 @@ namespace MyEditor
 		{
 			List<string> result = new List<string>();
 
-			foreach (KeyValuePair<string, List<ClientNodeTypeProto>> kv in BehaviorManager.GetInstance().Classify2NodeProtoList)
+			foreach (KeyValuePair<string, List<ClientNodeTypeProto>> kv in BehaviorManager.Instance.Classify2NodeProtoList)
 			{
 				string classify = kv.Key;
 				List<ClientNodeTypeProto> nodeProtoList = kv.Value;
@@ -372,7 +372,7 @@ namespace MyEditor
 				{
 					continue;
 				}
-				foreach (var node in nodeProtoList)
+				foreach (ClientNodeTypeProto node in nodeProtoList)
 				{
 					if (mSelectedNode != null && mSelectedNode.NodeData.Children.Count < mSelectedNode.NodeData.Proto.child_limit)
 					{
@@ -386,12 +386,12 @@ namespace MyEditor
 		///菜单相关
 		public void PopMenu()
 		{
-			var menu = new GenericMenu();
+			GenericMenu menu = new GenericMenu();
 
 			menu.AddItem(new GUIContent("创建子节点"), false, this.PopUpCreate);
 			menu.AddItem(new GUIContent("替换当前节点"), false, this.PopUpReplace);
-			string selectNodeName = BehaviorManager.GetInstance().selectNodeName;
-			string selectNodeType = BehaviorManager.GetInstance().selectNodeType;
+			string selectNodeName = BehaviorManager.Instance.selectNodeName;
+			string selectNodeType = BehaviorManager.Instance.selectNodeType;
 			if (mSelectedNode != null && selectNodeName != "")
 			{
 				if (selectNodeType != NodeClassifyType.Root.ToString() && mSelectedNode.NodeData.Children.Count < mSelectedNode.NodeData.Proto.child_limit)
@@ -469,16 +469,16 @@ namespace MyEditor
 		private void AddNodeMenuCallback(object obj)
 		{
 			string nodeType = (string) obj;
-			var nodeProto = BehaviorManager.GetInstance().GetNodeTypeProto(nodeType);
-			var nodeData = BehaviorManager.GetInstance().CreateNode((int) BehaviorManager.GetInstance().CurTree.Id, nodeProto.name);
-			var node = CreateNode(nodeData, MousePosToGraphPos(mMousePos));
+			ClientNodeTypeProto nodeProto = BehaviorManager.Instance.GetNodeTypeProto(nodeType);
+			BehaviorNodeData nodeData = BehaviorManager.Instance.CreateNode((int) BehaviorManager.Instance.CurTree.Id, nodeProto.name);
+			NodeDesigner node = CreateNode(nodeData, MousePosToGraphPos(mMousePos));
 		}
 
 		private void CreateNode()
 		{
-			var nodeProto = BehaviorManager.GetInstance().GetNodeTypeProto(BehaviorManager.GetInstance().selectNodeName);
-			var nodeData = BehaviorManager.GetInstance().CreateNode((int) BehaviorManager.GetInstance().CurTree.Id, nodeProto.name);
-			var node = CreateNode(nodeData, MousePosToGraphPos(mMousePos));
+			ClientNodeTypeProto nodeProto = BehaviorManager.Instance.GetNodeTypeProto(BehaviorManager.Instance.selectNodeName);
+			BehaviorNodeData nodeData = BehaviorManager.Instance.CreateNode((int) BehaviorManager.Instance.CurTree.Id, nodeProto.name);
+			NodeDesigner node = CreateNode(nodeData, MousePosToGraphPos(mMousePos));
 		}
 
 		public void CopyNode()
@@ -509,9 +509,9 @@ namespace MyEditor
 			}
 			if (mCopyNode != null && mCopyNode != mSelectedNode)
 			{
-				var data = BehaviorManager.GetInstance().CopyNode(mCopyNode.NodeData);
-				BehaviorManager.GetInstance().ResetTreeId();
-				var node = CreateNode(data, Vector2.zero);
+				BehaviorNodeData data = BehaviorManager.Instance.CopyNode(mCopyNode.NodeData);
+				BehaviorManager.Instance.ResetTreeId();
+				NodeDesigner node = CreateNode(data, Vector2.zero);
 				ConnectNode(node, mSelectedNode);
 			}
 		}
@@ -523,7 +523,7 @@ namespace MyEditor
 				return;
 			}
 
-			foreach (var node in mDetachedNodes)
+			foreach (NodeDesigner node in mDetachedNodes)
 			{
 				if (node == mSelectedNode)
 				{
@@ -546,32 +546,32 @@ namespace MyEditor
 				return;
 			}
 			mDetachedNodes.Remove(mSelectedNode);
-			BehaviorManager.GetInstance().ResetTreeId();
+			BehaviorManager.Instance.ResetTreeId();
 		}
 
 		private void ChangeNodeType()
 		{
-			ChangeNodeType(BehaviorManager.GetInstance().selectNodeName);
+			ChangeNodeType(BehaviorManager.Instance.selectNodeName);
 		}
 
 		//有待优化
 		private void ChangeNodeType(object obj)
 		{
 			string nodeType = (string) obj;
-			var nodeProto = BehaviorManager.GetInstance().GetNodeTypeProto(nodeType);
-			var nodeData = BehaviorManager.GetInstance().CreateNode((int) BehaviorManager.GetInstance().CurTree.Id, nodeProto.name);
-			var oldNode = mSelectedNode;
-			var newNode = new NodeDesigner(nodeData);
+			ClientNodeTypeProto nodeProto = BehaviorManager.Instance.GetNodeTypeProto(nodeType);
+			BehaviorNodeData nodeData = BehaviorManager.Instance.CreateNode((int) BehaviorManager.Instance.CurTree.Id, nodeProto.name);
+			NodeDesigner oldNode = mSelectedNode;
+			NodeDesigner newNode = new NodeDesigner(nodeData);
 
 			if (oldNode == RootNode)
 			{
 				newNode.NodeData.nodeId = RootNode.NodeData.nodeId;
 				RootNode = newNode;
-				var oldTree = BehaviorManager.GetInstance().CurTree;
-				var newTree = new BehaviorTreeData(oldTree.Id);
+				BehaviorTreeData oldTree = BehaviorManager.Instance.CurTree;
+				BehaviorTreeData newTree = new BehaviorTreeData(oldTree.Id);
 				newTree.classify = oldTree.classify;
 				newTree.Root = nodeData;
-				BehaviorManager.GetInstance().CurTree = newTree;
+				BehaviorManager.Instance.CurTree = newTree;
 			}
 			else
 			{
@@ -580,11 +580,11 @@ namespace MyEditor
 				oldNode.Parent.RemoveChild(oldNode);
 			}
 
-			foreach (var child in oldNode.Children)
+			foreach (NodeDesigner child in oldNode.Children)
 			{
 				newNode.AddChild(child);
 			}
-			BehaviorManager.GetInstance().ResetTreeId();
+			BehaviorManager.Instance.ResetTreeId();
 			Game.Scene.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeAfterChangeNodeType);
 		}
 
@@ -626,7 +626,7 @@ namespace MyEditor
 			{
 				mDetachedNodes.Add(node);
 			}
-			BehaviorManager.GetInstance().ResetTreeId();
+			BehaviorManager.Instance.ResetTreeId();
 			Game.Scene.GetComponent<EventComponent>().Run(EventIdType.BehaviorTreeCreateNode, node);
 			return node;
 		}
@@ -634,12 +634,12 @@ namespace MyEditor
 		/// 事件相关
 		public NodeDesigner onCreateTree(params object[] list)
 		{
-			if (BehaviorManager.GetInstance().CurTree == null)
+			if (BehaviorManager.Instance.CurTree == null)
 			{
 				Log.Error($"CurTree can not be null");
 				return null;
 			}
-			RootNode = new NodeDesigner(BehaviorManager.GetInstance().CurTree.Root);
+			RootNode = new NodeDesigner(BehaviorManager.Instance.CurTree.Root);
 			CalcGraphRect();
 			return RootNode;
 		}
@@ -656,15 +656,15 @@ namespace MyEditor
 			string name = (string) list[0];
 			Vector2 pos = (Vector2) list[1];
 
-			var nodeProto = BehaviorManager.GetInstance().GetNodeTypeProto(name);
-			var nodeData = BehaviorManager.GetInstance().CreateNode((int) BehaviorManager.GetInstance().CurTree.Id, nodeProto.name);
+			ClientNodeTypeProto nodeProto = BehaviorManager.Instance.GetNodeTypeProto(name);
+			BehaviorNodeData nodeData = BehaviorManager.Instance.CreateNode((int) BehaviorManager.Instance.CurTree.Id, nodeProto.name);
 			CreateNode(nodeData, pos);
 		}
 
 		public void onStartConnect(params object[] list)
 		{
-			var node = (NodeDesigner) list[0];
-			var state = (State) list[1];
+			NodeDesigner node = (NodeDesigner) list[0];
+			State state = (State) list[1];
 			if (node == RootNode && state == State.ConnectLeft) //根节点不让左连接
 			{
 				return;
@@ -674,7 +674,7 @@ namespace MyEditor
 
 		public void onMouseInNode(params object[] list)
 		{
-			var dstNode = (NodeDesigner) list[1];
+			NodeDesigner dstNode = (NodeDesigner) list[1];
 			if (dstNode == mSelectedNode || dstNode == null)
 			{
 				return;
@@ -715,7 +715,7 @@ namespace MyEditor
 				return;
 			}
 
-			var parent = srcNode.Parent;
+			NodeDesigner parent = srcNode.Parent;
 			if (parent != null)
 			{
 				parent.RemoveChild(srcNode);
@@ -739,10 +739,10 @@ namespace MyEditor
 			{
 				return;
 			}
-			var node1 = dstNode;
-			var node2 = mSelectedNode;
-			var parent1 = node1.Parent;
-			var parent2 = node2.Parent;
+			NodeDesigner node1 = dstNode;
+			NodeDesigner node2 = mSelectedNode;
+			NodeDesigner parent1 = node1.Parent;
+			NodeDesigner parent2 = node2.Parent;
 			//根节点不可交换
 			if (parent2 == null)
 			{
@@ -777,10 +777,10 @@ namespace MyEditor
 			{
 				return;
 			}
-			var node1 = dstNode;
-			var node2 = mSelectedNode;
-			var parent1 = node1.Parent;
-			var parent2 = node2.Parent;
+			NodeDesigner node1 = dstNode;
+			NodeDesigner node2 = mSelectedNode;
+			NodeDesigner parent1 = node1.Parent;
+			NodeDesigner parent2 = node2.Parent;
 			//根节点不可交换
 			if (parent2 == null)
 			{

+ 14 - 14
Unity/Assets/Editor/BehaviorTreeEditor/NodeDesigner.cs

@@ -42,9 +42,9 @@ namespace MyEditor
 			if (!DesignerData.fold)
 			{
 				this.Children.Clear();
-				foreach (var childData in NodeData.Children)
+				foreach (BehaviorNodeData childData in NodeData.Children)
 				{
-					var child = new NodeDesigner(childData);
+					NodeDesigner child = new NodeDesigner(childData);
 					this.Children.Add(child);
 					child.Parent = this;
 				}
@@ -101,7 +101,7 @@ namespace MyEditor
 
 		public void Init()
 		{
-			NodeData.Proto = BehaviorManager.GetInstance().GetNodeTypeProto(NodeData.name);
+			NodeData.Proto = BehaviorManager.Instance.GetNodeTypeProto(NodeData.name);
 			string[] arr = NodeData.Proto.style.Split('/');
 			if (arr.Length > 1 && arr[1] == "value")
 			{
@@ -156,7 +156,7 @@ namespace MyEditor
 
 		public void Draw()
 		{
-			foreach (var child in this.Children)
+			foreach (NodeDesigner child in this.Children)
 			{
 				//先画子节点,让线条在最低层
 				BehaviorDesignerUtility.DrawConnection(this.RightPos, child.LeftPos);
@@ -164,8 +164,8 @@ namespace MyEditor
 			}
 
 			//左链接
-			var tex = mLeftConnectTex;
-			var rect = new Rect(Pos.x - Width / 2 - tex.width / 6, Pos.y - tex.height / 4, tex.width / 2, tex.height / 2);
+			Texture2D tex = mLeftConnectTex;
+			Rect rect = new Rect(Pos.x - Width / 2 - tex.width / 6, Pos.y - tex.height / 4, tex.width / 2, tex.height / 2);
 			GUI.DrawTexture(rect, tex);
 			//右链接
 			if (NodeData.Proto.child_limit > 0)
@@ -193,7 +193,7 @@ namespace MyEditor
 			{
 				GUI.DrawTexture(rect, mBoxSelectHighLight);
 			}
-			else if (BehaviorManager.GetInstance().IsHighLight(this.NodeData))
+			else if (BehaviorManager.Instance.IsHighLight(this.NodeData))
 			{
 				GUI.DrawTexture(rect, mBoxHighLight);
 			}
@@ -258,20 +258,20 @@ namespace MyEditor
 			{
 				return;
 			}
-			foreach (var child in this.Children)
+			foreach (NodeDesigner child in this.Children)
 			{
 				child.UpdateSize();
 			}
 
 			float max = 0;
-			foreach (var child in this.Children)
+			foreach (NodeDesigner child in this.Children)
 			{
 				max = max < child.Size.width? child.Size.width : max;
 			}
 			Size.width += max;
 
 			Size.height = 0;
-			foreach (var child in this.Children)
+			foreach (NodeDesigner child in this.Children)
 			{
 				Size.height += child.Size.height;
 			}
@@ -281,7 +281,7 @@ namespace MyEditor
 		{
 			UpdateSize();
 			float y = this.Pos.y - this.Size.height / 2;
-			foreach (var child in this.Children)
+			foreach (NodeDesigner child in this.Children)
 			{
 				child.Pos.x = this.Pos.x + Width * 1.5f + child.Offset.x;
 				child.Pos.y = y + child.Size.height / 2 + child.Offset.y;
@@ -320,7 +320,7 @@ namespace MyEditor
 			isSelected = flag;
 			if (flag)
 			{
-				BehaviorManager.GetInstance().SelectNode(this.NodeData);
+				BehaviorManager.Instance.SelectNode(this.NodeData);
 			}
 		}
 
@@ -343,7 +343,7 @@ namespace MyEditor
 		public void AutoSort()
 		{
 			this.Offset = Vector2.zero;
-			foreach (var child in this.Children)
+			foreach (NodeDesigner child in this.Children)
 			{
 				child.AutoSort();
 			}
@@ -356,7 +356,7 @@ namespace MyEditor
 			{
 				return true;
 			}
-			foreach (var child in this.Children)
+			foreach (NodeDesigner child in this.Children)
 			{
 				if (child.FindChild(dstNode))
 				{

+ 3 - 3
Unity/Assets/Editor/BehaviorTreeEditor/NodeExtension.cs

@@ -26,7 +26,7 @@ namespace Model
 				NodeProto p = protoStack.Dequeue();
 				Node node = nodeStack.Dequeue();
 
-				foreach (var argsItem in p.args_dict)
+				foreach (KeyValuePair<string, ValueBase> argsItem in p.args_dict)
 				{
 					FieldInfo fieldInfo = node.GetType().GetField(argsItem.Key, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
 					fieldInfo.SetValue(node, argsItem.Value.GetValueByType(fieldInfo.FieldType));
@@ -153,12 +153,12 @@ namespace Model
 		{
 			if (IsPrefab(this.BTConfig.gameObject))
 			{
-				GameObject go = GameObject.Instantiate(this.BTConfig.gameObject);
+				GameObject go = UnityEngine.Object.Instantiate(this.BTConfig.gameObject);
 				go.name = this.BTConfig.gameObject.name;
 				BehaviorTreeConfig newConfig = go.GetComponent<BehaviorTreeConfig>();
 				_root.Serialize(newConfig);
 				PrefabUtility.ReplacePrefab(go, this.BTConfig, ReplacePrefabOptions.ReplaceNameBased);
-				GameObject.DestroyImmediate(go);
+				UnityEngine.Object.DestroyImmediate(go);
 			}
 			else
 			{

+ 18 - 18
Unity/Assets/Editor/BehaviorTreeEditor/PropertyDesigner.cs

@@ -31,7 +31,7 @@ namespace MyEditor
 
 		public void HandleEvents()
 		{
-			var e = Event.current;
+			Event e = Event.current;
 			switch (e.type)
 			{
 				case EventType.MouseDown:
@@ -114,15 +114,15 @@ namespace MyEditor
 			mNodeFoldout = new FoldoutFolder("所有节点", SelectNodeFolderCallback);
 			mNodeFoldout.Fold = true;
 
-			foreach (var kv in BehaviorManager.GetInstance().Classify2NodeProtoList)
+			foreach (KeyValuePair<string, List<ClientNodeTypeProto>> kv in BehaviorManager.Instance.Classify2NodeProtoList)
 			{
 				string classify = kv.Key;
-				var nodeTypeList = kv.Value;
+				List<ClientNodeTypeProto> nodeTypeList = kv.Value;
 				FoldoutFolder folder = mNodeFoldout.AddFolder(classify, SelectNodeFolderCallback);
 				folder.Fold = true;
 
 				mNodeCount++;
-				foreach (var nodeType in nodeTypeList)
+				foreach (ClientNodeTypeProto nodeType in nodeTypeList)
 				{
 					folder.AddNode(classify, nodeType.name + " (" + nodeType.describe + ")", SelectNodeCallback);
 					mNodeCount++;
@@ -167,7 +167,7 @@ namespace MyEditor
 			Array strArr = Enum.GetValues(typeof (NodeClassifyType));
 			List<string> strList = new List<string>();
 			strList.Add("All");
-			foreach (var str in strArr)
+			foreach (object str in strArr)
 			{
 				strList.Add(str.ToString());
 			}
@@ -199,13 +199,13 @@ namespace MyEditor
 		{
 			Rect boxRect = new Rect(0f, Screen.height - offset + 15f, this.mWidth, 200f);
 			GUILayout.BeginArea(boxRect);
-			BehaviorManager.GetInstance().selectNodeName = "";
+			BehaviorManager.Instance.selectNodeName = "";
 			if (mCurNode != null)
 			{
 				string[] arr = mCurNode.Text.Split(' ');
 				string name = arr[0];
-				BehaviorManager.GetInstance().selectNodeName = name;
-				BehaviorManager.GetInstance().selectNodeType = mCurNode.folderName;
+				BehaviorManager.Instance.selectNodeName = name;
+				BehaviorManager.Instance.selectNodeType = mCurNode.folderName;
 				if (mCurNode.folderName != NodeClassifyType.Root.ToString())
 				{
 					if (GUILayout.Button("新建"))
@@ -224,9 +224,9 @@ namespace MyEditor
 
 				if (GUILayout.Button("保存"))
 				{
-					BehaviorManager.GetInstance().SaveAll();
+					BehaviorManager.Instance.SaveAll();
 				}
-				var node = BehaviorManager.GetInstance().GetNodeTypeProto(name);
+				ClientNodeTypeProto node = BehaviorManager.Instance.GetNodeTypeProto(name);
 				GUILayout.Label("节点名:" + node.name);
 				GUILayout.Label("描述:" + node.describe);
 			}
@@ -236,7 +236,7 @@ namespace MyEditor
 
 		private void ClearNodes()
 		{
-			BehaviorManager.GetInstance().selectNodeName = "";
+			BehaviorManager.Instance.selectNodeName = "";
 			mEnumNodeTypeSelection = 0;
 			mSearchNode = "";
 			foreach (FoldoutFolder folder in mNodeFoldout.Folders)
@@ -319,7 +319,7 @@ namespace MyEditor
 			value = (GameObject) EditorGUILayout.ObjectField(desc, value, typeof (GameObject), false);
 			if (value.GetComponent<BehaviorTreeConfig>() != null && GUILayout.Button("打开行为树"))
 			{
-				BehaviorManager.GetInstance().OpenBehaviorEditor(value);
+				BehaviorManager.Instance.OpenBehaviorEditor(value);
 				SetToolBar(2);
 			}
 			EditorGUILayout.EndHorizontal();
@@ -334,7 +334,7 @@ namespace MyEditor
 			}
 			if (GUILayout.Button("保存行为树"))
 			{
-				BehaviorManager.GetInstance().SaveAll();
+				BehaviorManager.Instance.SaveAll();
 			}
 			ClientNodeTypeProto proto = mCurBehaviorNode.Proto;
 			GUILayout.Space(10f);
@@ -648,7 +648,7 @@ namespace MyEditor
 		private object InputEnumFieldValue(NodeFieldDesc desc)
 		{
 			string oldValue = mCurBehaviorNode.args_dict.GetTreeDictValue(desc.type, desc.name)?.ToString();
-			string[] enumValueArr = BehaviorManager.GetInstance().GetCanInPutEnvKeyArray(mCurBehaviorNode, desc);
+			string[] enumValueArr = BehaviorManager.Instance.GetCanInPutEnvKeyArray(mCurBehaviorNode, desc);
 			if (enumValueArr.Length == 0)
 			{
 				enumValueArr = new string[1] { BTEnvKey.None };
@@ -723,14 +723,14 @@ namespace MyEditor
 
 		public void DrawDebugView()
 		{
-			if (BehaviorManager.GetInstance().CurBehaviorTree == null)
+			if (BehaviorManager.Instance.CurBehaviorTree == null)
 			{
 				return;
 			}
 			if (GUILayout.Button($"清空执行记录"))
 			{
 				BehaviorManager.treePathList.Clear();
-				BehaviorManager.GetInstance().ClearDebugState();
+				BehaviorManager.Instance.ClearDebugState();
 			}
 			float offset = 55f;
 			GUILayout.BeginArea(new Rect(0f, 20f, this.mWidth, Screen.height - offset));
@@ -741,8 +741,8 @@ namespace MyEditor
 			{
 				if (GUILayout.Button($"frame{i}"))
 				{
-					BehaviorManager.GetInstance().ClearDebugState();
-					BehaviorManager.GetInstance().SetDebugState(BehaviorManager.GetInstance().CurBehaviorTree, BehaviorManager.treePathList[i]);
+					BehaviorManager.Instance.ClearDebugState();
+					BehaviorManager.Instance.SetDebugState(BehaviorManager.Instance.CurBehaviorTree, BehaviorManager.treePathList[i]);
 				}
 			}
 			GUI.EndScrollView();

+ 11 - 11
Unity/Assets/Editor/BehaviorTreeEditor/RightDesigner.cs

@@ -109,7 +109,7 @@ namespace MyEditor
 			value = (GameObject) EditorGUILayout.ObjectField(desc, value, typeof (GameObject), false);
 			if (value.GetComponent<BehaviorTreeConfig>() != null && GUILayout.Button("打开行为树"))
 			{
-				BehaviorManager.GetInstance().OpenBehaviorEditor(value);
+				BehaviorManager.Instance.OpenBehaviorEditor(value);
 				SetToolBar(2);
 			}
 			EditorGUILayout.EndHorizontal();
@@ -137,7 +137,7 @@ namespace MyEditor
 			Array strArr = Enum.GetValues(typeof (NodeClassifyType));
 			List<string> strList = new List<string>();
 			strList.Add("All");
-			foreach (var str in strArr)
+			foreach (object str in strArr)
 			{
 				strList.Add(str.ToString());
 			}
@@ -167,7 +167,7 @@ namespace MyEditor
 
 		private void ClearNodes()
 		{
-			BehaviorManager.GetInstance().selectNodeName = "";
+			BehaviorManager.Instance.selectNodeName = "";
 			mEnumNodeTypeSelection = 0;
 			mSearchNode = "";
 			foreach (FoldoutFolder folder in mNodeFoldout.Folders)
@@ -183,13 +183,13 @@ namespace MyEditor
 		{
 			Rect boxRect = new Rect(0f, Screen.height - offset + 15f, this.mWidth, 200f);
 			GUILayout.BeginArea(boxRect);
-			BehaviorManager.GetInstance().selectNodeName = "";
+			BehaviorManager.Instance.selectNodeName = "";
 			if (mCurNode != null)
 			{
 				string[] arr = mCurNode.Text.Split(' ');
 				string name = arr[0];
-				BehaviorManager.GetInstance().selectNodeName = name;
-				BehaviorManager.GetInstance().selectNodeType = mCurNode.folderName;
+				BehaviorManager.Instance.selectNodeName = name;
+				BehaviorManager.Instance.selectNodeType = mCurNode.folderName;
 				if (mCurNode.folderName != NodeClassifyType.Root.ToString())
 				{
 					if (GUILayout.Button("新建"))
@@ -208,9 +208,9 @@ namespace MyEditor
 
 				if (GUILayout.Button("保存"))
 				{
-					BehaviorManager.GetInstance().SaveAll();
+					BehaviorManager.Instance.SaveAll();
 				}
-				var node = BehaviorManager.GetInstance().GetNodeTypeProto(name);
+				ClientNodeTypeProto node = BehaviorManager.Instance.GetNodeTypeProto(name);
 				GUILayout.Label("节点名:" + node.name);
 				GUILayout.Label("描述:" + node.describe);
 			}
@@ -223,15 +223,15 @@ namespace MyEditor
 			mNodeFoldout = new FoldoutFolder("所有节点", SelectNodeFolderCallback);
 			mNodeFoldout.Fold = true;
 
-			foreach (var kv in BehaviorManager.GetInstance().Classify2NodeProtoList)
+			foreach (KeyValuePair<string, List<ClientNodeTypeProto>> kv in BehaviorManager.Instance.Classify2NodeProtoList)
 			{
 				string classify = kv.Key;
-				var nodeTypeList = kv.Value;
+				List<ClientNodeTypeProto> nodeTypeList = kv.Value;
 				FoldoutFolder folder = mNodeFoldout.AddFolder(classify, SelectNodeFolderCallback);
 				folder.Fold = true;
 
 				mNodeCount++;
-				foreach (var nodeType in nodeTypeList)
+				foreach (ClientNodeTypeProto nodeType in nodeTypeList)
 				{
 					folder.AddNode(classify, nodeType.name + " (" + nodeType.describe + ")", SelectNodeCallback);
 					mNodeCount++;

+ 150 - 21
Unity/Assets/Res/BT/BT_大厅UI创建时执行行为树.prefab

@@ -16,12 +16,12 @@ GameObject:
   m_ObjectHideFlags: 1
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 4000012502268996}
-  - 114: {fileID: 114000012927878958}
-  - 114: {fileID: 114000012831209000}
-  - 114: {fileID: 114000012254895660}
+  - component: {fileID: 4000012502268996}
+  - component: {fileID: 114000012927878958}
+  - component: {fileID: 114000012831209000}
+  - component: {fileID: 114000012254895660}
   m_Layer: 0
   m_Name: UIScale
   m_TagString: Untagged
@@ -34,12 +34,12 @@ GameObject:
   m_ObjectHideFlags: 1
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 4000010573939176}
-  - 114: {fileID: 114000012101497390}
-  - 114: {fileID: 114000012687440004}
-  - 114: {fileID: 114000013925923264}
+  - component: {fileID: 4000010573939176}
+  - component: {fileID: 114000012101497390}
+  - component: {fileID: 114000012687440004}
+  - component: {fileID: 114000013925923264}
   m_Layer: 0
   m_Name: CreateUIEffect
   m_TagString: Untagged
@@ -52,11 +52,11 @@ GameObject:
   m_ObjectHideFlags: 0
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 4000012504621142}
-  - 114: {fileID: 114000012710832806}
-  - 114: {fileID: 114000010724577698}
+  - component: {fileID: 4000012504621142}
+  - component: {fileID: 114000012710832806}
+  - component: {fileID: 114000010724577698}
   m_Layer: 0
   m_Name: UICreateRoot
   m_TagString: Untagged
@@ -69,10 +69,10 @@ GameObject:
   m_ObjectHideFlags: 0
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 4000013585351022}
-  - 114: {fileID: 114000011653782440}
+  - component: {fileID: 4000013585351022}
+  - component: {fileID: 114000011653782440}
   m_Layer: 0
   m_Name: "BT_\u5927\u5385UI\u521B\u5EFA\u65F6\u6267\u884C\u884C\u4E3A\u6811"
   m_TagString: Untagged
@@ -80,6 +80,54 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
+--- !u!1 &1163409429689796
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 4777383378286486}
+  - component: {fileID: 114089724657400710}
+  m_Layer: 0
+  m_Name: Selector
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1859411246719846
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 4489196859550532}
+  - component: {fileID: 114749116948314830}
+  m_Layer: 0
+  m_Name: Selector
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1898199888956378
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 4203174777903220}
+  - component: {fileID: 114016773258390882}
+  m_Layer: 0
+  m_Name: Selector
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
 --- !u!4 &4000010573939176
 Transform:
   m_ObjectHideFlags: 1
@@ -89,10 +137,10 @@ Transform:
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children: []
   m_Father: {fileID: 4000012504621142}
   m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!4 &4000012502268996
 Transform:
   m_ObjectHideFlags: 1
@@ -102,10 +150,10 @@ Transform:
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children: []
   m_Father: {fileID: 4000012504621142}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!4 &4000012504621142
 Transform:
   m_ObjectHideFlags: 1
@@ -115,12 +163,13 @@ Transform:
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children:
   - {fileID: 4000012502268996}
   - {fileID: 4000010573939176}
+  - {fileID: 4777383378286486}
   m_Father: {fileID: 4000013585351022}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!4 &4000013585351022
 Transform:
   m_ObjectHideFlags: 1
@@ -130,11 +179,52 @@ Transform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children:
   - {fileID: 4000012504621142}
   m_Father: {fileID: 0}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!4 &4203174777903220
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1898199888956378}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 4777383378286486}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!4 &4489196859550532
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1859411246719846}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 4777383378286486}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!4 &4777383378286486
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1163409429689796}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 4489196859550532}
+  - {fileID: 4203174777903220}
+  m_Father: {fileID: 4000012504621142}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!114 &114000010724577698
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -251,3 +341,42 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   fieldName: effect
   fieldValue: {fileID: 1000013439777610, guid: ec75b784e8d7596478790f42fd4d9937, type: 2}
+--- !u!114 &114016773258390882
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1898199888956378}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  id: 100006
+  describe: 
+--- !u!114 &114089724657400710
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1163409429689796}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  id: 100004
+  describe: 
+--- !u!114 &114749116948314830
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1859411246719846}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  id: 100005
+  describe: 

+ 64 - 43
Unity/Assets/Scenes/Init.unity

@@ -1,19 +1,19 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
 --- !u!29 &1
-SceneSettings:
+OcclusionCullingSettings:
   m_ObjectHideFlags: 0
-  m_PVSData: 
-  m_PVSObjectsArray: []
-  m_PVSPortalsArray: []
+  serializedVersion: 2
   m_OcclusionBakeSettings:
     smallestOccluder: 5
     smallestHole: 0.25
     backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
 --- !u!104 &2
 RenderSettings:
   m_ObjectHideFlags: 0
-  serializedVersion: 7
+  serializedVersion: 8
   m_Fog: 0
   m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
   m_FogMode: 3
@@ -25,6 +25,7 @@ RenderSettings:
   m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
   m_AmbientIntensity: 1
   m_AmbientMode: 0
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
   m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
   m_HaloStrength: 0.5
   m_FlareStrength: 1
@@ -37,11 +38,11 @@ RenderSettings:
   m_ReflectionIntensity: 1
   m_CustomReflection: {fileID: 0}
   m_Sun: {fileID: 0}
-  m_IndirectSpecularColor: {r: 0.37356448, g: 0.3811204, b: 0.35887685, a: 1}
+  m_IndirectSpecularColor: {r: 0.37311953, g: 0.38074014, b: 0.3587274, a: 1}
 --- !u!157 &3
 LightmapSettings:
   m_ObjectHideFlags: 0
-  serializedVersion: 7
+  serializedVersion: 11
   m_GIWorkflowMode: 0
   m_GISettings:
     serializedVersion: 2
@@ -53,7 +54,7 @@ LightmapSettings:
     m_EnableBakedLightmaps: 1
     m_EnableRealtimeLightmaps: 1
   m_LightmapEditorSettings:
-    serializedVersion: 4
+    serializedVersion: 9
     m_Resolution: 2
     m_BakeResolution: 40
     m_TextureWidth: 1024
@@ -66,42 +67,59 @@ LightmapSettings:
     m_LightmapParameters: {fileID: 0}
     m_LightmapsBakeMode: 1
     m_TextureCompression: 1
-    m_DirectLightInLightProbes: 1
     m_FinalGather: 0
     m_FinalGatherFiltering: 1
     m_FinalGatherRayCount: 1024
     m_ReflectionCompression: 2
+    m_MixedBakeMode: 1
+    m_BakeBackend: 0
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 500
+    m_PVRBounces: 2
+    m_PVRFiltering: 0
+    m_PVRFilteringMode: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousColorSigma: 1
+    m_PVRFilteringAtrousNormalSigma: 1
+    m_PVRFilteringAtrousPositionSigma: 1
   m_LightingDataAsset: {fileID: 0}
-  m_RuntimeCPUUsage: 25
+  m_UseShadowmask: 0
 --- !u!196 &4
 NavMeshSettings:
   serializedVersion: 2
   m_ObjectHideFlags: 0
   m_BuildSettings:
     serializedVersion: 2
+    agentTypeID: 0
     agentRadius: 0.5
     agentHeight: 2
     agentSlope: 45
     agentClimb: 0.4
     ledgeDropHeight: 0
     maxJumpAcrossDistance: 0
-    accuratePlacement: 0
     minRegionArea: 2
-    cellSize: 0.16666667
     manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
   m_NavMeshData: {fileID: 0}
 --- !u!1 &29794235
 GameObject:
   m_ObjectHideFlags: 0
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 29794240}
-  - 20: {fileID: 29794239}
-  - 124: {fileID: 29794238}
-  - 92: {fileID: 29794237}
-  - 81: {fileID: 29794236}
+  - component: {fileID: 29794240}
+  - component: {fileID: 29794239}
+  - component: {fileID: 29794238}
+  - component: {fileID: 29794237}
+  - component: {fileID: 29794236}
   m_Layer: 0
   m_Name: MainCamera
   m_TagString: Untagged
@@ -160,6 +178,8 @@ Camera:
   m_TargetDisplay: 0
   m_TargetEye: 3
   m_HDR: 0
+  m_AllowMSAA: 1
+  m_ForceIntoRT: 0
   m_OcclusionCulling: 1
   m_StereoConvergence: 10
   m_StereoSeparation: 0.022
@@ -173,20 +193,20 @@ Transform:
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children: []
   m_Father: {fileID: 1518071807}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &429867060
 GameObject:
   m_ObjectHideFlags: 0
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 429867063}
-  - 114: {fileID: 429867062}
-  - 114: {fileID: 429867061}
+  - component: {fileID: 429867063}
+  - component: {fileID: 429867062}
+  - component: {fileID: 429867061}
   m_Layer: 0
   m_Name: EventSystem
   m_TagString: Untagged
@@ -235,21 +255,21 @@ Transform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children: []
   m_Father: {fileID: 0}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &575235018
 GameObject:
   m_ObjectHideFlags: 0
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 575235020}
-  - 114: {fileID: 575235019}
-  - 114: {fileID: 575235021}
-  - 114: {fileID: 575235022}
+  - component: {fileID: 575235020}
+  - component: {fileID: 575235019}
+  - component: {fileID: 575235021}
+  - component: {fileID: 575235022}
   m_Layer: 0
   m_Name: Global
   m_TagString: Untagged
@@ -277,12 +297,12 @@ Transform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children:
   - {fileID: 1472883029}
   - {fileID: 1518071807}
   m_Father: {fileID: 0}
   m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!114 &575235021
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -391,9 +411,9 @@ GameObject:
   m_ObjectHideFlags: 0
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 1472883029}
+  - component: {fileID: 1472883029}
   m_Layer: 0
   m_Name: UI
   m_TagString: Untagged
@@ -410,19 +430,19 @@ Transform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children:
   - {fileID: 1848209002}
   m_Father: {fileID: 575235020}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1518071806
 GameObject:
   m_ObjectHideFlags: 0
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 4: {fileID: 1518071807}
+  - component: {fileID: 1518071807}
   m_Layer: 0
   m_Name: Camera
   m_TagString: Untagged
@@ -439,22 +459,22 @@ Transform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children:
   - {fileID: 29794240}
   m_Father: {fileID: 575235020}
   m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1848209001
 GameObject:
   m_ObjectHideFlags: 0
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  serializedVersion: 5
   m_Component:
-  - 224: {fileID: 1848209002}
-  - 223: {fileID: 1848209005}
-  - 114: {fileID: 1848209004}
-  - 114: {fileID: 1848209003}
+  - component: {fileID: 1848209002}
+  - component: {fileID: 1848209005}
+  - component: {fileID: 1848209004}
+  - component: {fileID: 1848209003}
   m_Layer: 5
   m_Name: UICanvas
   m_TagString: Untagged
@@ -471,10 +491,10 @@ RectTransform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 0, y: 0, z: 0}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_Children: []
   m_Father: {fileID: 1472883029}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
@@ -524,7 +544,7 @@ Canvas:
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 1848209001}
   m_Enabled: 1
-  serializedVersion: 2
+  serializedVersion: 3
   m_RenderMode: 1
   m_Camera: {fileID: 29794239}
   m_PlaneDistance: 100
@@ -533,6 +553,7 @@ Canvas:
   m_OverrideSorting: 0
   m_OverridePixelPerfect: 0
   m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 25
   m_SortingLayerID: 0
   m_SortingOrder: 0
   m_TargetDisplay: 0

+ 15 - 13
Unity/Assets/Scripts/BehaviorTree/BehaviorNodeConfig.cs

@@ -21,7 +21,7 @@ namespace Model
 		public BehaviorTreeArgsDict GetArgsDict()
 		{
 			BehaviorTreeArgsDict dict = new BehaviorTreeArgsDict();
-			foreach (var item in gameObject.GetComponents<BTTypeBaseComponent>())
+			foreach (BTTypeBaseComponent item in gameObject.GetComponents<BTTypeBaseComponent>())
 			{
 				FieldInfo info = item.GetType().GetField("fieldValue");
 				ValueBase valueBase = new ValueBase();
@@ -72,24 +72,26 @@ namespace Model
 
 		public NodeProto ToNodeProto()
 		{
-			return NodeConfigToNodeProto(this);
+			return BehaviorNodeConfigToNodeProto(this);
 		}
 
-		private static NodeProto NodeConfigToNodeProto(BehaviorNodeConfig nodeProto)
+		private static NodeProto BehaviorNodeConfigToNodeProto(BehaviorNodeConfig behaviorNodeConfig)
 		{
-			NodeProto nodeData = new NodeProto();
-			nodeData.nodeId = nodeProto.id;
-			nodeData.name = nodeProto.name;
-			nodeData.describe = nodeProto.describe;
-			nodeData.args_dict = nodeProto.GetArgsDict();
-			nodeData.children = new List<NodeProto>();
-			foreach (Transform child in nodeProto.gameObject.transform)
+			NodeProto nodeProto = new NodeProto
+			{
+				nodeId = behaviorNodeConfig.id,
+				name = behaviorNodeConfig.name,
+				describe = behaviorNodeConfig.describe,
+				args_dict = behaviorNodeConfig.GetArgsDict(),
+				children = new List<NodeProto>()
+			};
+			foreach (Transform child in behaviorNodeConfig.gameObject.transform)
 			{
 				BehaviorNodeConfig nodeConfig = child.gameObject.GetComponent<BehaviorNodeConfig>();
-				NodeProto childData = NodeConfigToNodeProto(nodeConfig);
-				nodeData.children.Add(childData);
+				NodeProto childData = BehaviorNodeConfigToNodeProto(nodeConfig);
+				nodeProto.children.Add(childData);
 			}
-			return nodeData;
+			return nodeProto;
 		}
 	}
 }

+ 4 - 107
Unity/Assets/Scripts/BehaviorTree/NodeProto.cs

@@ -1,33 +1,17 @@
-using System;
-using System.Collections.Generic;
-using UnityEngine;
+using System.Collections.Generic;
 
 namespace Model
 {
-	[Serializable]
-	public class StrValueBasePair
-	{
-		public string key;
-		public ValueBase value;
-	}
-
-	[Serializable]
-	public class NodeProto: ISerializationCallbackReceiver
+	public class NodeProto
 	{
 		public int nodeId;
 
 		public string name;
 
 		public string describe = "";
-
-		public List<int> nodeIdList = new List<int>();
-
-		public List<StrValueBasePair> args_list = new List<StrValueBasePair>();
-
-		[NonSerialized]
+		
 		public BehaviorTreeArgsDict args_dict = new BehaviorTreeArgsDict();
-
-		[NonSerialized]
+		
 		public List<NodeProto> children = new List<NodeProto>();
 
 		public List<NodeProto> Children
@@ -41,92 +25,5 @@ namespace Model
 				this.children = value;
 			}
 		}
-
-		public void SetValue<T>(string key, T value)
-		{
-			Type type = typeof (T);
-			object newValue = value;
-			if (type == typeof (Enum) || type.IsSubclassOf(typeof (Enum)))
-			{
-				type = typeof (string);
-				newValue = value.ToString();
-			}
-			int index = args_list.FindIndex(item => { return item.key == key; });
-			bool hasKey = index != -1;
-			if (hasKey)
-			{
-				args_list[index].value.SetValueByType(typeof (T), newValue);
-			}
-			else
-			{
-				StrValueBasePair pair = new StrValueBasePair();
-				pair.key = key;
-				pair.value = new ValueBase();
-				pair.value.SetValueByType(typeof (T), newValue);
-				args_list.Add(pair);
-			}
-			if (!args_dict.ContainsKey(key))
-			{
-				args_dict.Add(key, new ValueBase());
-			}
-			args_dict[key].SetValueByType(typeof (T), newValue);
-		}
-
-		public T GetValue<T>(string key)
-		{
-			T value = default(T);
-			foreach (var item in args_list)
-			{
-				if (item.key == key)
-				{
-					value = (T) item.value.GetValueByType(typeof (T));
-				}
-			}
-			return value;
-		}
-
-		public void BuildChild(Dictionary<long, NodeProto> nodeDict)
-		{
-			this.children.Clear();
-			foreach (long nid in nodeIdList)
-			{
-				if (nodeDict.ContainsKey(nid))
-				{
-					this.children.Add(nodeDict[nid]);
-				}
-			}
-			foreach (var child in this.children)
-			{
-				child.BuildChild(nodeDict);
-			}
-		}
-
-		public void OnAfterDeserialize()
-		{
-			this.args_dict.Clear();
-			foreach (var item in this.args_list)
-			{
-				try
-				{
-					this.args_dict.Add(item.key, item.value);
-				}
-				catch (Exception e)
-				{
-					throw new ConfigException($"key 已存在: {this.name} {this.nodeId} {item.key}", e);
-				}
-			}
-		}
-
-		public void OnBeforeSerialize()
-		{
-			this.args_list.Clear();
-			foreach (var item in this.args_dict)
-			{
-				StrValueBasePair value = new StrValueBasePair();
-				value.key = item.Key;
-				value.value = item.Value;
-				this.args_list.Add(value);
-			}
-		}
 	}
 }

+ 4 - 2
Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs

@@ -112,8 +112,10 @@ namespace Model
 
 				BehaviorTreeConfig behaviorTreeConfig = treeGo.GetComponent<BehaviorTreeConfig>();
 				Node node = this.CreateTreeNode(behaviorTreeConfig.RootNodeProto);
-				tree = new BehaviorTree(scene, node);
-				tree.behaviorTreeConfig = behaviorTreeConfig;
+				tree = new BehaviorTree(scene, node)
+				{
+					behaviorTreeConfig = behaviorTreeConfig
+				};
 				if (Define.LoadResourceType == LoadResourceType.Async)
 				{
 					this.treeCache.Add(treeGo, tree);