Bladeren bron

增加行为树使用例子

tanghai 9 jaren geleden
bovenliggende
commit
94d5a40052
29 gewijzigde bestanden met toevoegingen van 692 en 12 verwijderingen
  1. 13 0
      Unity/Assets/Bundles/UI/Lobby.prefab
  2. 1 1
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorManager.cs
  3. 2 2
      Unity/Assets/Editor/BehaviorTreeEditor/BehaviorNodeConfigExtension.cs
  4. 1 1
      Unity/Assets/Editor/BehaviorTreeEditor/Event/BehaviorTreeRunTreeEvent_ShowDebugInfo.cs
  5. 3 4
      Unity/Assets/Editor/BehaviorTreeEditor/ExportNodeTypeConfig.cs
  6. 9 0
      Unity/Assets/Res/BT.meta
  7. 253 0
      Unity/Assets/Res/BT/BT_大厅UI创建时执行行为树.prefab
  8. 8 0
      Unity/Assets/Res/BT/BT_大厅UI创建时执行行为树.prefab.meta
  9. 92 0
      Unity/Assets/Res/UI/Lobby大厅特效.prefab
  10. 8 0
      Unity/Assets/Res/UI/Lobby大厅特效.prefab.meta
  11. 0 2
      Unity/Assets/Scripts/BehaviorTree/BehaviorNodeConfig.cs
  12. 25 0
      Unity/Assets/Scripts/BehaviorTreeNode/CreateUIEffect.cs
  13. 12 0
      Unity/Assets/Scripts/BehaviorTreeNode/CreateUIEffect.cs.meta
  14. 9 0
      Unity/Assets/Scripts/BehaviorTreeNode/Root.meta
  15. 0 0
      Unity/Assets/Scripts/BehaviorTreeNode/Root/Root.cs
  16. 0 0
      Unity/Assets/Scripts/BehaviorTreeNode/Root/Root.cs.meta
  17. 22 0
      Unity/Assets/Scripts/BehaviorTreeNode/Root/UICreateRoot.cs
  18. 12 0
      Unity/Assets/Scripts/BehaviorTreeNode/Root/UICreateRoot.cs.meta
  19. 25 0
      Unity/Assets/Scripts/BehaviorTreeNode/UIScale.cs
  20. 12 0
      Unity/Assets/Scripts/BehaviorTreeNode/UIScale.cs.meta
  21. 129 0
      Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs
  22. 12 0
      Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs.meta
  23. 13 0
      Unity/Assets/Scripts/Component/UIComponent.cs
  24. 1 0
      Unity/Assets/Scripts/Init.cs
  25. 1 0
      Unity/Assets/Scripts/Other/EntityEventId.cs
  26. 9 0
      Unity/Assets/Scripts/UIConfig.cs
  27. 12 0
      Unity/Assets/Scripts/UIConfig.cs.meta
  28. 2 1
      Unity/ProjectSettings/ProjectSettings.asset
  29. 6 1
      Unity/Unity.csproj

+ 13 - 0
Unity/Assets/Bundles/UI/Lobby.prefab

@@ -175,6 +175,7 @@ GameObject:
   - 222: {fileID: 222000012393644854}
   - 114: {fileID: 114000012430220302}
   - 114: {fileID: 114000011231987512}
+  - 114: {fileID: 114000010131133460}
   m_Layer: 5
   m_Name: Lobby
   m_TagString: Untagged
@@ -328,6 +329,18 @@ MonoBehaviour:
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
+--- !u!114 &114000010131133460
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000012140906046}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 92184f0259e287441a0abea0928c2057, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  CreateBT: {fileID: 1000012987241756, guid: 5dfe2c32bf2efc044a7f3f57c34ab334, type: 2}
 --- !u!114 &114000010390865150
 MonoBehaviour:
   m_ObjectHideFlags: 1

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

@@ -276,7 +276,7 @@ namespace MyEditor
 		{
 			BehaviorNodeData nodeData = new BehaviorNodeData();
 			nodeData.nodeId = nodeProto.id;
-			nodeData.name = ((Object) nodeProto).name;
+			nodeData.name = nodeProto.name;
 			nodeData.describe = nodeProto.describe;
 			nodeData.args_dict = nodeProto.GetArgsDict();
 			nodeData.children = new List<BehaviorNodeData>();

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

@@ -13,7 +13,7 @@ namespace Model
 			GameObject go = new GameObject();
 			BehaviorNodeConfig nodeConfig = go.AddComponent<BehaviorNodeConfig>();
 			nodeConfig.id = nodeData.nodeId;
-			((UnityEngine.Object) nodeConfig).name = nodeData.name;
+			nodeConfig.name = nodeData.name;
 			go.name = nodeData.name;
 			nodeConfig.describe = nodeData.describe;
 			foreach (var args in nodeData.args_dict)
@@ -51,7 +51,7 @@ namespace Model
 		{
 			NodeProto nodeData = new NodeProto();
 			nodeData.nodeId = nodeProto.id;
-			nodeData.name = ((UnityEngine.Object) nodeProto).name;
+			nodeData.name = nodeProto.name;
 			nodeData.describe = nodeProto.describe;
 			nodeData.args_dict = nodeProto.GetArgsDict();
 			nodeData.children = new List<NodeProto>();

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

@@ -2,7 +2,7 @@
 using Model;
 using MyEditor;
 
-namespace Controller
+namespace MyEditor
 {
 	[Event(EventIdType.BehaviorTreeRunTreeEvent)]
 	public class BehaviorTreeRunTreeEvent_ShowDebugInfo: IEvent<BehaviorTree, List<long>>

+ 3 - 4
Unity/Assets/Editor/BehaviorTreeEditor/ExportNodeTypeConfig.cs

@@ -30,8 +30,7 @@ namespace MyEditor
 		public static Dictionary<string, ClientNodeTypeProto> ExportToDict()
 		{
 			Dictionary<string, ClientNodeTypeProto> name2NodeProtoDict = new Dictionary<string, ClientNodeTypeProto>();
-			Assembly assembly = GetControllerAssembly();
-			Type[] types = assembly.GetTypes();
+			Type[] types = DllHelper.GetMonoTypes();
 			foreach (Type type in types)
 			{
 				ClientNodeTypeProto proto = GetNodeTypeProtoFromType(type);
@@ -44,7 +43,7 @@ namespace MyEditor
 			return name2NodeProtoDict;
 		}
 
-		public static Assembly GetControllerAssembly()
+		public static Assembly GetModelAssembly()
 		{
 			return Game.EntityEventManager.GetAssembly("Model");
 		}
@@ -267,7 +266,7 @@ namespace MyEditor
 
 		public static Type GetNodeType(string nodeName)
 		{
-			Assembly assembly = GetControllerAssembly();
+			Assembly assembly = GetModelAssembly();
 			Type nodeType = assembly.GetType("Model." + nodeName);
 			if (nodeType == null)
 			{

+ 9 - 0
Unity/Assets/Res/BT.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 7a44c0f96769be647a390e2f03a6bc03
+folderAsset: yes
+timeCreated: 1487665014
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

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

@@ -0,0 +1,253 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 1000012987241756}
+  m_IsPrefabParent: 1
+--- !u!1 &1000010648217578
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 4000012502268996}
+  - 114: {fileID: 114000012927878958}
+  - 114: {fileID: 114000012831209000}
+  - 114: {fileID: 114000012254895660}
+  m_Layer: 0
+  m_Name: UIScale
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1000011153220328
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 4000010573939176}
+  - 114: {fileID: 114000012101497390}
+  - 114: {fileID: 114000012687440004}
+  - 114: {fileID: 114000013925923264}
+  m_Layer: 0
+  m_Name: CreateUIEffect
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1000012663018806
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 4000012504621142}
+  - 114: {fileID: 114000012710832806}
+  - 114: {fileID: 114000010724577698}
+  m_Layer: 0
+  m_Name: UICreateRoot
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1000012987241756
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 4000013585351022}
+  - 114: {fileID: 114000011653782440}
+  m_Layer: 0
+  m_Name: "BT_\u5927\u5385UI\u521B\u5EFA\u65F6\u6267\u884C\u884C\u4E3A\u6811"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4000010573939176
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000011153220328}
+  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
+--- !u!4 &4000012502268996
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000010648217578}
+  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
+--- !u!4 &4000012504621142
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000012663018806}
+  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}
+  m_Father: {fileID: 4000013585351022}
+  m_RootOrder: 0
+--- !u!4 &4000013585351022
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000012987241756}
+  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
+--- !u!114 &114000010724577698
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000012663018806}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 872ab75cd8949824c994b1fb31d221f1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  fieldName: ui
+  fieldValue: UI
+--- !u!114 &114000011653782440
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000012987241756}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 450b9a4ed562c1546b663af4135cc7e7, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  RootNodeConfig: {fileID: 114000012710832806}
+--- !u!114 &114000012101497390
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000011153220328}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  id: 100003
+  describe: 
+--- !u!114 &114000012254895660
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000010648217578}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 543f3ab39de095e4e80a0c5bbff4242e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  fieldName: scale
+  fieldValue: 1
+--- !u!114 &114000012687440004
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000011153220328}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 872ab75cd8949824c994b1fb31d221f1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  fieldName: uiKey
+  fieldValue: UI
+--- !u!114 &114000012710832806
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000012663018806}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  id: 100001
+  describe: "\u5927\u5385UI\u521B\u5EFA\u65F6\u6267\u884C\u884C\u4E3A\u6811"
+--- !u!114 &114000012831209000
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000010648217578}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 872ab75cd8949824c994b1fb31d221f1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  fieldName: uiKey
+  fieldValue: UI
+--- !u!114 &114000012927878958
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000010648217578}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  id: 100002
+  describe: 
+--- !u!114 &114000013925923264
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000011153220328}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 7be3fccf10005084b99360e730465802, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  fieldName: effect
+  fieldValue: {fileID: 1000013439777610, guid: ec75b784e8d7596478790f42fd4d9937, type: 2}

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

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5dfe2c32bf2efc044a7f3f57c34ab334
+timeCreated: 1487666017
+licenseType: Pro
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 92 - 0
Unity/Assets/Res/UI/Lobby大厅特效.prefab

@@ -0,0 +1,92 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 1000013439777610}
+  m_IsPrefabParent: 1
+--- !u!1 &1000013439777610
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 4000010987857940}
+  - 33: {fileID: 33000010877027698}
+  - 65: {fileID: 65000011576423460}
+  - 23: {fileID: 23000013374129096}
+  m_Layer: 0
+  m_Name: "Lobby\u5927\u5385\u7279\u6548"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &4000010987857940
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013439777610}
+  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
+--- !u!23 &23000013374129096
+MeshRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013439777610}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_Materials:
+  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+  m_SubsetIndices: 
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 1
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_SelectedWireframeHidden: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+--- !u!33 &33000010877027698
+MeshFilter:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013439777610}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!65 &65000011576423460
+BoxCollider:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013439777610}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}

+ 8 - 0
Unity/Assets/Res/UI/Lobby大厅特效.prefab.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ec75b784e8d7596478790f42fd4d9937
+timeCreated: 1487667431
+licenseType: Pro
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 0 - 2
Unity/Assets/Scripts/BehaviorTree/BehaviorNodeConfig.cs

@@ -9,8 +9,6 @@ namespace Model
 	{
 		public int id;
 
-		public string name;
-
 		public string describe;
 
 		public BehaviorNodeConfig(string name, string _desc, int _id = 0)

+ 25 - 0
Unity/Assets/Scripts/BehaviorTreeNode/CreateUIEffect.cs

@@ -0,0 +1,25 @@
+using Base;
+using UnityEngine;
+
+namespace Model
+{
+	[Node(NodeClassifyType.Action, "创建UI特效")]
+	public class CreateUIEffect : Node
+	{
+		[NodeInput("传入的UI参数", typeof(UI))]
+		private string uiKey;
+
+		[NodeField("特效")]
+		private GameObject effect;
+
+		public CreateUIEffect(NodeProto nodeProto): base(nodeProto)
+		{
+		}
+
+		protected override bool Run(BehaviorTree behaviorTree, BTEnv env)
+		{
+			Log.Debug($"创建UI特效: {this.effect.name}");
+			return true;
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Scripts/BehaviorTreeNode/CreateUIEffect.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: eb00729ada592b44e9a226d0812a4568
+timeCreated: 1487667249
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Unity/Assets/Scripts/BehaviorTreeNode/Root.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: c55fbdca15ef07548b28462fa2446af3
+folderAsset: yes
+timeCreated: 1487666950
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 0 - 0
Unity/Assets/Scripts/BehaviorTreeNode/Root.cs → Unity/Assets/Scripts/BehaviorTreeNode/Root/Root.cs


+ 0 - 0
Unity/Assets/Scripts/BehaviorTreeNode/Root.cs.meta → Unity/Assets/Scripts/BehaviorTreeNode/Root/Root.cs.meta


+ 22 - 0
Unity/Assets/Scripts/BehaviorTreeNode/Root/UICreateRoot.cs

@@ -0,0 +1,22 @@
+namespace Model
+{
+	[Node(NodeClassifyType.Root, "UI创建时执行的行为树")]
+	public class UICreateRoot : Node
+	{
+		[NodeOutput("UI", typeof(UI), "UI")]
+		public string ui;
+
+		public UICreateRoot(NodeProto nodeProto): base(nodeProto)
+		{
+		}
+
+		protected override bool Run(BehaviorTree behaviorTree, BTEnv env)
+		{
+			foreach (Node node in this.children)
+			{
+				node.DoRun(behaviorTree, env);
+			}
+			return true;
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Scripts/BehaviorTreeNode/Root/UICreateRoot.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f2c5979a98d6d3e4e9a4933419461305
+timeCreated: 1487664336
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 25 - 0
Unity/Assets/Scripts/BehaviorTreeNode/UIScale.cs

@@ -0,0 +1,25 @@
+using UnityEngine;
+
+namespace Model
+{
+	[Node(NodeClassifyType.Action, "将UI缩放")]
+	public class UIScale : Node
+	{
+		[NodeInput("传入的UI参数", typeof(UI))]
+		private string uiKey;
+
+		[NodeField("缩放倍数")]
+		private float scale;
+
+		public UIScale(NodeProto nodeProto): base(nodeProto)
+		{
+		}
+
+		protected override bool Run(BehaviorTree behaviorTree, BTEnv env)
+		{
+			UI ui = env.Get<UI>(this.uiKey);
+			ui.GameObject.transform.localScale = new Vector3(this.scale, this.scale, this.scale);
+			return true;
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Scripts/BehaviorTreeNode/UIScale.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 42493e9ddba97254d965d1cc4367f5a8
+timeCreated: 1487664771
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 129 - 0
Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs

@@ -0,0 +1,129 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using UnityEngine;
+
+namespace Model
+{
+	[EntityEvent(EntityEventId.BehaviorTreeComponent)]
+	public class BehaviorTreeComponent : Component
+	{
+		private Dictionary<string, Func<NodeProto, Node>> dictionary;
+		private Dictionary<GameObject, BehaviorTree> treeCache;
+
+		public void Awake()
+		{
+			this.Load();
+		}
+
+		public void Load()
+		{
+			this.dictionary = new Dictionary<string, Func<NodeProto, Node>>();
+			this.treeCache = new Dictionary<GameObject, BehaviorTree>();
+
+		
+			Type[] types = DllHelper.GetMonoTypes();
+			foreach (Type type in types)
+			{
+				object[] attrs = type.GetCustomAttributes(typeof(NodeAttribute), false);
+				if (attrs.Length == 0)
+				{
+					continue;
+				}
+
+				Type classType = type;
+				if (this.dictionary.ContainsKey(type.Name))
+				{
+					throw new GameException($"已经存在同类节点: {classType.Name}");
+				}
+				this.dictionary.Add(type.Name, config =>
+				{
+					Node node = (Node)Activator.CreateInstance(classType, config);
+					try
+					{
+						InitFieldValue(ref node, config);
+					}
+					catch (Exception e)
+					{
+						throw new GameException($"InitFieldValue error, node: {node.Id} {node.Type}", e);
+					}
+					return node;
+				});
+			}
+			
+		}
+
+		private static void InitFieldValue(ref Node node, NodeProto nodeProto)
+		{
+			Type type = Game.EntityEventManager.GetAssembly("Model").GetType("Model." + nodeProto.name);
+
+			foreach (var args_item in nodeProto.args_dict)
+			{
+				FieldInfo fieldInfo = type.GetField(args_item.Key, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
+				if (fieldInfo == null)
+				{
+					continue;
+				}
+				NewSetValue(ref node, fieldInfo, args_item.Value, nodeProto.name);
+			}
+		}
+
+		private static void NewSetValue(ref Node node, FieldInfo field, ValueBase valueBase, string nodeName)
+		{
+			field.SetValue(node, valueBase.GetValueByType(field.FieldType));
+		}
+
+		private Node CreateOneNode(NodeProto proto)
+		{
+			if (!this.dictionary.ContainsKey(proto.name))
+			{
+				throw new KeyNotFoundException($"NodeType没有定义该节点: {proto.name}");
+			}
+			return this.dictionary[proto.name](proto);
+		}
+
+		private Node CreateTreeNode(NodeProto proto)
+		{
+			Node node = this.CreateOneNode(proto);
+			node.EndInit(this.GetOwner<Scene>());
+
+			if (proto.Children == null)
+			{
+				return node;
+			}
+
+			foreach (NodeProto nodeProto in proto.Children)
+			{
+				Node childNode = this.CreateTreeNode(nodeProto);
+				node.AddChild(childNode);
+			}
+			return node;
+		}
+
+		public BehaviorTree CreateTree(Scene scene, GameObject treeGo)
+		{
+			try
+			{
+				BehaviorTree tree;
+				if (this.treeCache.TryGetValue(treeGo, out tree))
+				{
+					return tree;
+				}
+
+				BehaviorTreeConfig behaviorTreeConfig = treeGo.GetComponent<BehaviorTreeConfig>();
+				Node node = this.CreateTreeNode(behaviorTreeConfig.RootNodeProto);
+				tree = new BehaviorTree(scene, node);
+				tree.behaviorTreeConfig = behaviorTreeConfig;
+				if (Define.LoadResourceType == LoadResourceType.Async)
+				{
+					this.treeCache.Add(treeGo, tree);
+				}
+				return tree;
+			}
+			catch (Exception e)
+			{
+				throw new ConfigException($"行为树配置错误: {treeGo.name}", e);
+			}
+		}
+	}
+}

+ 12 - 0
Unity/Assets/Scripts/Component/BehaviorTreeComponent.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e9bbdaba5951975479fcb38781fe8a83
+timeCreated: 1487663913
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 13 - 0
Unity/Assets/Scripts/Component/UIComponent.cs

@@ -129,6 +129,19 @@ namespace Model
 			{
 				UI ui = this.UiTypes[type].Create(this.GetOwner<Scene>(), type, this.Root);
 				this.uis.Add(type, ui);
+
+				// 假如UI有配置行为树,执行之
+				UIConfig uiConfig = ui.GameObject.GetComponent<UIConfig>();
+				if (uiConfig != null)
+				{
+					BehaviorTree behaviorTree = Game.Scene.GetComponent<BehaviorTreeComponent>().CreateTree(this.GetOwner<Scene>(), uiConfig.CreateBT);
+					BTEnv env = new BTEnv
+					{
+						{"UI", ui}
+					};
+					behaviorTree.Run(env);
+				}
+
 				return ui;
 			}
 			catch (Exception e)

+ 1 - 0
Unity/Assets/Scripts/Init.cs

@@ -18,6 +18,7 @@ namespace Model
 			Game.Scene.AddComponent<ResourcesComponent>();
 			Game.Scene.AddComponent<UIComponent>();
 			Game.Scene.AddComponent<UnitComponent>();
+			Game.Scene.AddComponent<BehaviorTreeComponent>();
 
 			EventHelper.Run(EventIdType.InitSceneStart);
 		}

+ 1 - 0
Unity/Assets/Scripts/Other/EntityEventId.cs

@@ -25,5 +25,6 @@
 		public const int MasterComponent = 20;
 		public const int RealmGateAddressComponent = 21;
 		public const int UILobbyComponent = 22;
+		public const int BehaviorTreeComponent = 23;
 	}
 }

+ 9 - 0
Unity/Assets/Scripts/UIConfig.cs

@@ -0,0 +1,9 @@
+using UnityEngine;
+
+namespace Model
+{
+	public class UIConfig : MonoBehaviour
+	{
+		public GameObject CreateBT;
+	}
+}

+ 12 - 0
Unity/Assets/Scripts/UIConfig.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 92184f0259e287441a0abea0928c2057
+timeCreated: 1487664183
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 2 - 1
Unity/ProjectSettings/ProjectSettings.asset

@@ -358,7 +358,8 @@ PlayerSettings:
   psp2UseDebugIl2cppLibs: 0
   psmSplashimage: {fileID: 0}
   spritePackerPolicy: 
-  scriptingDefineSymbols: {}
+  scriptingDefineSymbols:
+    1: 
   metroPackageName: Unity
   metroPackageVersion: 
   metroCertificatePath: 

+ 6 - 1
Unity/Unity.csproj

@@ -322,6 +322,9 @@
     <Compile Include="Assets\ILRuntime\Mono.Cecil.Pdb\pdb\Mono.Cecil.Pdb\PdbWriter.cs" />
     <Compile Include="Assets\ILRuntime\Mono.Cecil.Pdb\pdb\Mono.Cecil.Pdb\SymDocumentWriter.cs" />
     <Compile Include="Assets\ILRuntime\Mono.Cecil.Pdb\pdb\Mono.Cecil.Pdb\SymWriter.cs" />
+    <Compile Include="Assets\Scripts\BehaviorTreeNode\CreateUIEffect.cs" />
+    <Compile Include="Assets\Scripts\BehaviorTreeNode\UIScale.cs" />
+    <Compile Include="Assets\Scripts\BehaviorTreeNode\Root\UICreateRoot.cs" />
     <Compile Include="Assets\Scripts\BehaviorTree\BTEnv.cs" />
     <Compile Include="Assets\Scripts\BehaviorTree\BTEnvKey.cs" />
     <Compile Include="Assets\Scripts\BehaviorTree\BehaviorNodeConfig.cs" />
@@ -372,10 +375,11 @@
     <Compile Include="Assets\Scripts\BehaviorTree\NodePropAttribute.cs" />
     <Compile Include="Assets\Scripts\BehaviorTree\NodeProto.cs" />
     <Compile Include="Assets\Scripts\BehaviorTree\ValueBase.cs" />
-    <Compile Include="Assets\Scripts\BehaviorTreeNode\Root.cs" />
+    <Compile Include="Assets\Scripts\BehaviorTreeNode\Root\Root.cs" />
     <Compile Include="Assets\Scripts\BehaviorTreeNode\Selector.cs" />
     <Compile Include="Assets\Scripts\BehaviorTreeNode\Sequence.cs" />
     <Compile Include="Assets\Scripts\BehaviorTreeNode\True.cs" />
+    <Compile Include="Assets\Scripts\Component\BehaviorTreeComponent.cs" />
     <Compile Include="Assets\Scripts\Component\BenchmarkComponent.cs" />
     <Compile Include="Assets\Scripts\Component\ChildrenComponent.cs" />
     <Compile Include="Assets\Scripts\Component\ClientConfigComponent.cs" />
@@ -442,6 +446,7 @@
     <Compile Include="Assets\Scripts\ILGenerated\System_Single_Binding.cs" />
     <Compile Include="Assets\Scripts\ILGenerated\System_String_Binding.cs" />
     <Compile Include="Assets\Scripts\ILGenerated\System_Type_Binding.cs" />
+    <Compile Include="Assets\Scripts\UIConfig.cs" />
     <Compile Include="Assets\Scripts\Init.cs" />
     <Compile Include="Assets\Scripts\Message\AMHandler.cs" />
     <Compile Include="Assets\Scripts\Message\AMessage.cs" />