提交 5a625678 编写于 作者: T tanghai

整理了行为树代码,暂时没发现bug

上级 8ebb054d
......@@ -202,7 +202,7 @@ namespace MyEditor
{
ClientNodeTypeProto proto = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(nodeProto.name);
List<string> unUsedList = new List<string>();
foreach (KeyValuePair<string, ValueBase> item in nodeProto.args_dict)
foreach (KeyValuePair<string, ValueBase> item in nodeProto.args_dict.Dict())
{
if (!proto.new_args_desc.Exists(a => (a.name == item.Key)))
{
......@@ -263,9 +263,9 @@ namespace MyEditor
{
config.RootNodeConfig = NodeDataToNodeConfig(tree.Root);
}
catch
catch (Exception e)
{
Debug.LogError($"tree name : {tree.BehaviorNodeData.name}");
Log.Error($"tree name : {tree.BehaviorNodeData.name} {e}");
}
config.RootNodeConfig.gameObject.transform.parent = config.gameObject.transform;
......@@ -302,7 +302,7 @@ namespace MyEditor
go.name = nodeData.name;
nodeConfig.describe = nodeData.describe;
List<string> unUseList = new List<string>();
foreach (KeyValuePair<string, ValueBase> args in nodeData.args_dict)
foreach (KeyValuePair<string, ValueBase> args in nodeData.args_dict.Dict())
{
if (!ExportNodeTypeConfig.NodeHasField(nodeData.name, args.Key))
{
......@@ -313,7 +313,7 @@ namespace MyEditor
try
{
string fieldName = args.Key;
object fieldValue = args.Value.GetValueByType(originType);
object fieldValue = args.Value.GetValue();
Type type = BTTypeManager.GetBTType(originType);
Component comp = go.AddComponent(type);
FieldInfo fieldNameInfo = type.GetField("fieldName");
......@@ -406,9 +406,9 @@ namespace MyEditor
copyNode.describe = node.describe;
copyNode.Pos = node.Pos;
copyNode.args_dict = new BehaviorTreeArgsDict();
foreach (KeyValuePair<string, ValueBase> item in node.args_dict)
foreach (KeyValuePair<string, ValueBase> item in node.args_dict.Dict())
{
ValueBase valueBase = ValueBase.Clone(item.Value);
ValueBase valueBase = item.Value.Clone();
copyNode.args_dict.Add(item.Key, valueBase);
}
List<BehaviorNodeData> list = new List<BehaviorNodeData>();
......@@ -523,15 +523,6 @@ namespace MyEditor
foreach (NodeFieldDesc desc in list)
{
if (!nodeProto.args_dict.ContainsKey(desc.name))
{
ValueBase valueBase = new ValueBase();
nodeProto.args_dict.Add(desc.name, valueBase);
}
if (string.IsNullOrEmpty(nodeProto.args_dict[desc.name].enumValue))
{
nodeProto.args_dict[desc.name].enumValue = BTEnvKey.None;
}
string value = nodeProto.args_dict.GetTreeDictValue(desc.type, desc.name)?.ToString();
resultList.Add(value);
}
......
......@@ -16,13 +16,13 @@ namespace Model
nodeConfig.name = nodeData.name;
go.name = nodeData.name;
nodeConfig.describe = nodeData.describe;
foreach (KeyValuePair<string, ValueBase> args in nodeData.args_dict)
foreach (KeyValuePair<string, ValueBase> args in nodeData.args_dict.Dict())
{
Type originType = ExportNodeTypeConfig.GetFieldType(nodeData.name, args.Key);
try
{
string fieldName = args.Key;
object fieldValue = args.Value.GetValueByType(originType);
object fieldValue = args.Value.GetValue();
Type type = BTTypeManager.GetBTType(originType);
UnityEngine.Component comp = go.AddComponent(type);
FieldInfo fieldNameInfo = type.GetField("fieldName");
......
......@@ -42,10 +42,10 @@ namespace MyEditor
public void UpdateData()
{
foreach (KeyValuePair<string, ValueBase> argsItem in Proto.args_dict)
foreach (KeyValuePair<string, ValueBase> argsItem in Proto.args_dict.Dict())
{
FieldInfo fieldInfo = typeof (T).GetField(argsItem.Key, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
fieldInfo.SetValue(Node, argsItem.Value.GetValueByType(fieldInfo.FieldType));
fieldInfo.SetValue(Node, argsItem.Value.GetValue());
}
}
}
......@@ -59,13 +59,7 @@ namespace MyEditor
/// <returns></returns>
public static NodeProto NodeProtoParamClone(NodeProto p)
{
NodeProto newP = new NodeProto();
foreach (KeyValuePair<string, ValueBase> dict in p.args_dict)
{
string key = dict.Key;
ValueBase value = ValueBase.Clone(dict.Value);
newP.args_dict.Add(key, value);
}
NodeProto newP = new NodeProto(p.args_dict.Clone());
return newP;
}
......
......@@ -245,7 +245,7 @@ namespace MyEditor
FieldInfo fieldInfo = nodeType.GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if (fieldInfo == null)
{
Log.Error(string.Format("{0}节点不存在此属性:{1}", nodeName, fieldName));
Log.Error($"{nodeName}节点不存在此属性:{fieldName}");
}
return fieldInfo.FieldType;
}
......
......@@ -26,10 +26,10 @@ namespace Model
NodeProto p = protoStack.Dequeue();
Node node = nodeStack.Dequeue();
foreach (KeyValuePair<string, ValueBase> argsItem in p.args_dict)
foreach (KeyValuePair<string, ValueBase> argsItem in p.args_dict.Dict())
{
FieldInfo fieldInfo = node.GetType().GetField(argsItem.Key, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
fieldInfo.SetValue(node, argsItem.Value.GetValueByType(fieldInfo.FieldType));
fieldInfo.SetValue(node, argsItem.Value.GetValue());
}
foreach (NodeProto child in p.Children)
{
......
......@@ -395,10 +395,6 @@ namespace MyEditor
Type fieldType = ExportNodeTypeConfig.GetFieldType(nodeName, desc.name);
ClientNodeTypeProto clientNode = ExportNodeTypeConfig.GetNodeTypeProtoFromDll(nodeName);
object newValue = null;
if (!mCurBehaviorNode.args_dict.ContainsKey(desc.name))
{
mCurBehaviorNode.args_dict.Add(desc.name, new ValueBase());
}
if (BehaviorTreeArgsDict.IsStringType(fieldType))
{
if (nodeParamType == NodeParamType.Input)
......
......@@ -11,219 +11,253 @@ Prefab:
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1000012987241756}
m_IsPrefabParent: 1
--- !u!1 &1000010648217578
--- !u!1 &1000012663018806
GameObject:
m_ObjectHideFlags: 1
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4000012502268996}
- component: {fileID: 114000012927878958}
- component: {fileID: 114000012831209000}
- component: {fileID: 114000012254895660}
- component: {fileID: 4000012504621142}
- component: {fileID: 114000012710832806}
- component: {fileID: 114000010724577698}
m_Layer: 0
m_Name: UIScale
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: 5
m_Component:
- 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
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1000011153220328
--- !u!1 &1034247352937670
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4000010573939176}
- component: {fileID: 114000012101497390}
- component: {fileID: 114000012687440004}
- component: {fileID: 114000013925923264}
- component: {fileID: 4457920297853128}
- component: {fileID: 114872844475027030}
- component: {fileID: 114110232272482830}
- component: {fileID: 114044811302282582}
m_Layer: 0
m_Name: CreateUIEffect
m_Name: UIScale
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1000012663018806
--- !u!1 &1066642639074170
GameObject:
m_ObjectHideFlags: 0
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4000012504621142}
- component: {fileID: 114000012710832806}
- component: {fileID: 114000010724577698}
- component: {fileID: 4745976513105564}
- component: {fileID: 114317227427338956}
m_Layer: 0
m_Name: UICreateRoot
m_Name: Sequence
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1000012987241756
--- !u!1 &1110138203716930
GameObject:
m_ObjectHideFlags: 0
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4000013585351022}
- component: {fileID: 114000011653782440}
- component: {fileID: 4560144792414304}
- component: {fileID: 114142340205944714}
- component: {fileID: 114725129530404376}
- component: {fileID: 114191766196617972}
m_Layer: 0
m_Name: "BT_\u5927\u5385UI\u521B\u5EFA\u65F6\u6267\u884C\u884C\u4E3A\u6811"
m_Name: UIScale
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1163409429689796
--- !u!1 &1267004197537310
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4777383378286486}
- component: {fileID: 114089724657400710}
- component: {fileID: 4435494203767800}
- component: {fileID: 114890143310458668}
m_Layer: 0
m_Name: Selector
m_Name: Sequence
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1859411246719846
--- !u!1 &1358106256802118
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4489196859550532}
- component: {fileID: 114749116948314830}
- component: {fileID: 4462160128095018}
- component: {fileID: 114014332988097306}
- component: {fileID: 114509115340170806}
- component: {fileID: 114530184371611064}
m_Layer: 0
m_Name: Selector
m_Name: CreateUIEffect
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &1898199888956378
--- !u!1 &1895040874724778
GameObject:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4203174777903220}
- component: {fileID: 114016773258390882}
- component: {fileID: 4490211137182780}
- component: {fileID: 114377559183498788}
- component: {fileID: 114803133420492300}
- component: {fileID: 114015794394339256}
m_Layer: 0
m_Name: Selector
m_Name: CreateUIEffect
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4000010573939176
--- !u!4 &4000012504621142
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000011153220328}
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_Children: []
m_Father: {fileID: 4000012504621142}
m_RootOrder: 1
m_Children:
- {fileID: 4435494203767800}
- {fileID: 4745976513105564}
m_Father: {fileID: 4000013585351022}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4000012502268996
--- !u!4 &4000013585351022
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_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_Children: []
m_Father: {fileID: 4000012504621142}
m_Children:
- {fileID: 4000012504621142}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4000012504621142
--- !u!4 &4435494203767800
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000012663018806}
m_GameObject: {fileID: 1267004197537310}
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: 4000012502268996}
- {fileID: 4000010573939176}
- {fileID: 4777383378286486}
m_Father: {fileID: 4000013585351022}
- {fileID: 4490211137182780}
- {fileID: 4560144792414304}
m_Father: {fileID: 4000012504621142}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4000013585351022
--- !u!4 &4457920297853128
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_GameObject: {fileID: 1034247352937670}
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: 4000012504621142}
m_Father: {fileID: 0}
m_RootOrder: 0
m_Children: []
m_Father: {fileID: 4745976513105564}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4203174777903220
--- !u!4 &4462160128095018
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1898199888956378}
m_GameObject: {fileID: 1358106256802118}
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_Father: {fileID: 4745976513105564}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4489196859550532
--- !u!4 &4490211137182780
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1859411246719846}
m_GameObject: {fileID: 1895040874724778}
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_Father: {fileID: 4435494203767800}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4777383378286486
--- !u!4 &4560144792414304
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1110138203716930}
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: 4435494203767800}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4745976513105564
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1163409429689796}
m_GameObject: {fileID: 1066642639074170}
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}
- {fileID: 4462160128095018}
- {fileID: 4457920297853128}
m_Father: {fileID: 4000012504621142}
m_RootOrder: 2
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &114000010724577698
MonoBehaviour:
......@@ -250,25 +284,51 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
RootNodeConfig: {fileID: 114000012710832806}
--- !u!114 &114000012101497390
--- !u!114 &114000012710832806
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000011153220328}
m_GameObject: {fileID: 1000012663018806}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
m_Name:
m_EditorClassIdentifier:
id: 100003
id: 100001
describe: "\u5927\u5385UI\u521B\u5EFA\u65F6\u6267\u884C\u884C\u4E3A\u6811"
--- !u!114 &114014332988097306
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1358106256802118}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
m_Name:
m_EditorClassIdentifier:
id: 100006
describe:
--- !u!114 &114000012254895660
--- !u!114 &114015794394339256
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1895040874724778}
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}
--- !u!114 &114044811302282582
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000010648217578}
m_GameObject: {fileID: 1034247352937670}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 543f3ab39de095e4e80a0c5bbff4242e, type: 3}
......@@ -276,12 +336,12 @@ MonoBehaviour:
m_EditorClassIdentifier:
fieldName: scale
fieldValue: 1
--- !u!114 &114000012687440004
--- !u!114 &114110232272482830
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000011153220328}
m_GameObject: {fileID: 1034247352937670}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 872ab75cd8949824c994b1fb31d221f1, type: 3}
......@@ -289,51 +349,77 @@ MonoBehaviour:
m_EditorClassIdentifier:
fieldName: uiKey
fieldValue: UI
--- !u!114 &114000012710832806
--- !u!114 &114142340205944714
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000012663018806}
m_GameObject: {fileID: 1110138203716930}
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
id: 100004
describe:
--- !u!114 &114191766196617972
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000010648217578}
m_GameObject: {fileID: 1110138203716930}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 872ab75cd8949824c994b1fb31d221f1, type: 3}
m_Script: {fileID: 11500000, guid: 543f3ab39de095e4e80a0c5bbff4242e, type: 3}
m_Name:
m_EditorClassIdentifier:
fieldName: uiKey
fieldValue: UI
--- !u!114 &114000012927878958
fieldName: scale
fieldValue: 1
--- !u!114 &114317227427338956
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000010648217578}
m_GameObject: {fileID: 1066642639074170}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
m_Name:
m_EditorClassIdentifier:
id: 100002
id: 100005
describe:
--- !u!114 &114000013925923264
--- !u!114 &114377559183498788
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1000011153220328}
m_GameObject: {fileID: 1895040874724778}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
m_Name:
m_EditorClassIdentifier:
id: 100003
describe:
--- !u!114 &114509115340170806
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1358106256802118}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 872ab75cd8949824c994b1fb31d221f1, type: 3}
m_Name:
m_EditorClassIdentifier:
fieldName: uiKey
fieldValue: UI
--- !u!114 &114530184371611064
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1358106256802118}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7be3fccf10005084b99360e730465802, type: 3}
......@@ -341,42 +427,55 @@ MonoBehaviour:
m_EditorClassIdentifier:
fieldName: effect
fieldValue: {fileID: 1000013439777610, guid: ec75b784e8d7596478790f42fd4d9937, type: 2}
--- !u!114 &114016773258390882
--- !u!114 &114725129530404376
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1898199888956378}
m_GameObject: {fileID: 1110138203716930}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
m_Script: {fileID: 11500000, guid: 872ab75cd8949824c994b1fb31d221f1, type: 3}
m_Name:
m_EditorClassIdentifier:
id: 100006
describe:
--- !u!114 &114089724657400710
fieldName: uiKey
fieldValue: UI
--- !u!114 &114803133420492300
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1163409429689796}
m_GameObject: {fileID: 1895040874724778}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 872ab75cd8949824c994b1fb31d221f1, type: 3}
m_Name:
m_EditorClassIdentifier:
fieldName: uiKey
fieldValue: UI
--- !u!114 &114872844475027030
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1034247352937670}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
m_Name:
m_EditorClassIdentifier:
id: 100004
id: 100007
describe:
--- !u!114 &114749116948314830
--- !u!114 &114890143310458668
MonoBehaviour:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1859411246719846}
m_GameObject: {fileID: 1267004197537310}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2d74453161f00b24287b1f1fb56b0778, type: 3}
m_Name:
m_EditorClassIdentifier:
id: 100005
id: 100002
describe:
......@@ -24,14 +24,14 @@ namespace Model
foreach (BTTypeBaseComponent item in gameObject.GetComponents<BTTypeBaseComponent>())
{
FieldInfo info = item.GetType().GetField("fieldValue");
ValueBase valueBase = new ValueBase();
ValueBase valueBase;
if (item.GetType() == typeof (BTEnumComponent))
{
valueBase.SetValueByType(typeof (Enum), info.GetValue(item));
valueBase = new ValueBase(info.GetValue(item));
}
else
{
valueBase.SetValueByType(info.FieldType, info.GetValue(item));
valueBase = new ValueBase(info.GetValue(item));
}
dict.Add(item.fieldName, valueBase);
......
using System;
using System.Collections;
using System.Collections.Generic;
using Base;
using UnityEngine;
......@@ -6,105 +7,69 @@ using UnityEngine;
namespace Model
{
[Serializable]
public class BehaviorTreeArgsDict: Dictionary<string, ValueBase>
public class BehaviorTreeArgsDict
{
public void SetKeyValueComp(Type type, string fieldName, object value)
private readonly Dictionary<string, ValueBase> dict = new Dictionary<string, ValueBase>();
public void Add(string key, ValueBase value)
{
if (IsStringType(type))
{
SetStrValue(fieldName, (string) value);
}
else if (IsObjectType(type))
{
SetObjectValue(fieldName, type, (UnityEngine.Object) value);
}
else if (IsIntType(type))
{
int intValue = 0;
int.TryParse(value.ToString(), out intValue);
SetIntValue(fieldName, intValue);
}
else if (IsLongType(type))
{
long longValue = 0;
long.TryParse(value.ToString(), out longValue);
SetLongValue(fieldName, longValue);
}
else if (IsFloatType(type))
{
float floatValue = 0;
float.TryParse(value.ToString(), out floatValue);
SetFloatValue(fieldName, floatValue);
}
else if (IsDoubleType(type))
{
double doubleValue = 0;
double.TryParse(value.ToString(), out doubleValue);
SetDoubleValue(fieldName, doubleValue);
}
else if (IsBoolType(type))
{
bool boolValue = false;
bool.TryParse(value.ToString(), out boolValue);
SetBoolValue(fieldName, boolValue);
}
else if (IsStringArrType(type))
{
SetStrArrValue(fieldName, (string[]) value);
}
else if (IsIntArrType(type))
{
SetIntArrValue(fieldName, (int[]) value);
}
else if (IsLongArrType(type))
{
SetLongArrValue(fieldName, (long[]) value);
}
else if (IsFloatArrType(type))
{
SetFloatArrValue(fieldName, (float[]) value);
}
else if (IsDoubleArrType(type))
{
SetDoubleArrValue(fieldName, (double[]) value);
}
else if (IsEnumType(type))
{
SetEnumValue(fieldName, value.ToString());
}
else if (IsObjectArrayType(type))
{
SetObjectArrayValue(fieldName, type, (UnityEngine.Object[]) value);
}
else
this.dict.Add(key, value);
}
public void Remove(string key)
{
this.dict.Remove(key);
}
public bool ContainsKey(string key)
{
return this.dict.ContainsKey(key);
}
public Dictionary<string, ValueBase> Dict()
{
return this.dict;
}
public BehaviorTreeArgsDict Clone()
{
BehaviorTreeArgsDict behaviorTreeArgsDict = new BehaviorTreeArgsDict();
foreach (KeyValuePair<string, ValueBase> keyValuePair in this.dict)
{
Log.Error($"行为树节点暂时未支持此类型:{type}!");
behaviorTreeArgsDict.Add(keyValuePair.Key, keyValuePair.Value.Clone());
}
return behaviorTreeArgsDict;
}
private void SetConvertebleValue(string fieldName, float value)
public void SetKeyValueComp(Type type, string fieldName, object value)
{
if (this.ContainsKey(fieldName))
try
{
this[fieldName].Convertivle = value;
ValueBase valueBase;
if (!this.dict.TryGetValue(fieldName, out valueBase))
{
valueBase = new ValueBase();
this.dict.Add(fieldName, valueBase);
}
valueBase.SetValue(value);
}
else
catch (Exception e)
{
ValueBase valueBase = new ValueBase();
valueBase.Convertivle = value;
this.Add(fieldName, valueBase);
Log.Error($"SetKeyValueComp error: {fieldName} {e}");
}
}
public object GetTreeDictValue(Type fieldType, string fieldName)
{
if (!this.ContainsKey(fieldName))
if (!this.dict.ContainsKey(fieldName))
{
Log.Error($"fieldName:{fieldName} 不存在!!!!");
return null;
}
ValueBase obj = this[fieldName];
return obj.GetValueByType(fieldType);
ValueBase obj = this.dict[fieldName];
return obj.GetValue();
}
/// <summary>
......@@ -283,325 +248,6 @@ namespace Model
return false;
}
/// <summary>
/// Set Value
/// </summary>
/// <param nodeName="fieldName"></param>
/// <param nodeName="value"></param>
public void SetStrValue(string fieldName, string value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].StringValue = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.StringValue = value;
this.Add(fieldName, valueBase);
}
}
public void SetIntValue(string fieldName, int value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].Int32Value = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.Int32Value = value;
this.Add(fieldName, valueBase);
}
}
public void SetLongValue(string fieldName, long value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].Int64Value = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.Int64Value = value;
this.Add(fieldName, valueBase);
}
}
public void SetFloatValue(string fieldName, float value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].SingleValue = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.SingleValue = value;
this.Add(fieldName, valueBase);
}
}
public void SetDoubleValue(string fieldName, double value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].DoubleValue = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.DoubleValue = value;
this.Add(fieldName, valueBase);
}
}
public void SetBoolValue(string fieldName, bool value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].BooleanValue = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.BooleanValue = value;
this.Add(fieldName, valueBase);
}
}
public void SetStrArrValue(string fieldName, string[] value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].StringArray = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.StringArray = value;
this.Add(fieldName, valueBase);
}
}
public void SetIntArrValue(string fieldName, int[] value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].Int32Array = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.Int32Array = value;
this.Add(fieldName, valueBase);
}
}
public void SetLongArrValue(string fieldName, long[] value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].Int64Array = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.Int64Array = value;
this.Add(fieldName, valueBase);
}
}
public void SetFloatArrValue(string fieldName, float[] value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].SingleArray = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.SingleArray = value;
this.Add(fieldName, valueBase);
}
}
public void SetDoubleArrValue(string fieldName, double[] value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].DoubleArray = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.DoubleArray = value;
this.Add(fieldName, valueBase);
}
}
public void SetObjectValue(string fieldName, Type type, UnityEngine.Object value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName]?.SetValueByType(type, value);
}
else
{
ValueBase valueBase = new ValueBase();
if (value != null)
{
valueBase.SetValueByType(type, value);
}
this.Add(fieldName, valueBase);
}
}
public void SetEnumValue(string fieldName, string value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName].enumValue = value;
}
else
{
ValueBase valueBase = new ValueBase();
valueBase.enumValue = value;
this.Add(fieldName, valueBase);
}
}
public void SetObjectArrayValue(string fieldName, Type type, UnityEngine.Object[] value)
{
if (this.ContainsKey(fieldName))
{
this[fieldName]?.SetValueByType(type, value);
}
else
{
ValueBase valueBase = new ValueBase();
if (value != null)
{
valueBase.SetValueByType(type, value);
}
this.Add(fieldName, valueBase);
}
}
public static GameObject[] ConvertToGameObjectArray(UnityEngine.Object[] objectArray)
{
if (objectArray == null)
{
return null;
}
GameObject[] newObjectArray = new GameObject[objectArray.Length];
for (int i = 0; i < objectArray.Length; i++)
{
newObjectArray[i] = (GameObject) objectArray[i];
}
return newObjectArray;
}
public static Material[] ConvertToMaterialArray(UnityEngine.Object[] objectArray)
{
if (objectArray == null)
{
return null;
}
Material[] newObjectArray = new Material[objectArray.Length];
for (int i = 0; i < objectArray.Length; i++)
{
newObjectArray[i] = (Material) objectArray[i];
}
return newObjectArray;
}
public static Texture[] ConvertToTextureArray(UnityEngine.Object[] objectArray)
{
if (objectArray == null)
{
return null;
}
Texture[] newObjectArray = new Texture[objectArray.Length];
for (int i = 0; i < objectArray.Length; i++)
{
newObjectArray[i] = (Texture) objectArray[i];
}
return newObjectArray;
}
public static Texture2D[] ConvertToTexture2DArray(UnityEngine.Object[] objectArray)
{
if (objectArray == null)
{
return null;
}
Texture2D[] newObjectArray = new Texture2D[objectArray.Length];
for (int i = 0; i < objectArray.Length; i++)
{
newObjectArray[i] = (Texture2D) objectArray[i];
}
return newObjectArray;
}
public static Texture3D[] ConvertToTexture3DArray(UnityEngine.Object[] objectArray)
{
if (objectArray == null)
{
return null;
}
Texture3D[] newObjectArray = new Texture3D[objectArray.Length];
for (int i = 0; i < objectArray.Length; i++)
{
newObjectArray[i] = (Texture3D) objectArray[i];
}
return newObjectArray;
}
public static Shader[] ConvertToShaderArray(UnityEngine.Object[] objectArray)
{
if (objectArray == null)
{
return null;
}
Shader[] newObjectArray = new Shader[objectArray.Length];
for (int i = 0; i < objectArray.Length; i++)
{
newObjectArray[i] = (Shader) objectArray[i];
}
return newObjectArray;
}
public static AudioClip[] ConvertToAudioClipArray(UnityEngine.Object[] objectArray)
{
if (objectArray == null)
{
return null;
}
AudioClip[] newObjectArray = new AudioClip[objectArray.Length];
for (int i = 0; i < objectArray.Length; i++)
{
newObjectArray[i] = (AudioClip) objectArray[i];
}
return newObjectArray;
}
public static Sprite[] ConvertToSpriteArray(UnityEngine.Object[] objectArray)
{
if (objectArray == null)
{
return null;
}
Sprite[] newObjectArray = new Sprite[objectArray.Length];
for (int i = 0; i < objectArray.Length; i++)
{
newObjectArray[i] = (Sprite) objectArray[i];
}
return newObjectArray;
}
public static bool SatisfyCondition(GameObject go, Type[] constraintTypes)
{
if (go == null || constraintTypes == null || constraintTypes.Length <= 0)
......
......@@ -10,7 +10,7 @@ namespace Model
public string describe = "";
public BehaviorTreeArgsDict args_dict = new BehaviorTreeArgsDict();
public BehaviorTreeArgsDict args_dict;
public List<NodeProto> children = new List<NodeProto>();
......@@ -25,5 +25,15 @@ namespace Model
this.children = value;
}
}
public NodeProto()
{
this.args_dict = new BehaviorTreeArgsDict();
}
public NodeProto(BehaviorTreeArgsDict dict)
{
this.args_dict = dict;
}
}
}
\ No newline at end of file
using System;
using System.Reflection;
using UnityEngine;
namespace Model
{
[Serializable]
public class ValueBase
{
public IConvertible Convertivle;
public string enumValue;
public string StringValue;
public bool BooleanValue;
public int Int32Value;
public long Int64Value;
public float SingleValue;
public double DoubleValue;
public int[] Int32Array;
public long[] Int64Array;
public string[] StringArray;
public float[] SingleArray;
public double[] DoubleArray;
private object value;
public GameObject GameObjectValue;
public AudioClip AudioClipValue;
public Material MaterialValue;
public Shader ShaderValue;
public Texture TextureValue;
public Texture2D Texture2DValue;
public Texture3D Texture3DValue;
public Sprite SpriteValue;
public GameObject[] GameObjectArray;
public AudioClip[] AudioClipArray;
public Material[] MaterialArray;
public Shader[] ShaderArray;
public Texture[] TextureArray;
public Texture2D[] Texture2DArray;
public Texture3D[] Texture3DArray;
public Sprite[] SpriteArray;
public static ValueBase Clone(ValueBase source)
public ValueBase(object v)
{
ValueBase v = new ValueBase();
FieldInfo[] infos = source.GetType().GetFields();
foreach (FieldInfo info in infos)
{
object value;
if (info.FieldType.IsSubclassOf(typeof (Array)))
{
Array sourceArray = (Array) info.GetValue(source);
if (sourceArray == null)
{
continue;
}
Array dest = Array.CreateInstance(info.FieldType.GetElementType(), sourceArray.Length);
Array.Copy(sourceArray, dest, dest.Length);
value = dest;
}
else
{
value = info.GetValue(source);
}
info.SetValue(v, value);
}
return v;
this.value = v;
}
public object GetValueByType(Type type)
public ValueBase()
{
try
{
FieldInfo fieldInfo = GetFieldInfo(type);
if (BehaviorTreeArgsDict.IsEnumType(type))
{
Enum value;
if (string.IsNullOrEmpty(enumValue))
{
value = GetDefaultEnumValue(type);
}
else
{
value = (Enum) Enum.Parse(type, enumValue);
}
return value;
}
if (BehaviorTreeArgsDict.IsStringType(type))
{
if (string.IsNullOrEmpty(this.StringValue))
{
this.StringValue = this.enumValue;
return this.StringValue;
}
}
return fieldInfo.GetValue(this);
}
catch (Exception err)
{
throw new GameException($"行为树报错:{err}");
}
}
private Enum GetDefaultEnumValue(Type type)
public ValueBase Clone()
{
Array array = Enum.GetValues(type);
Enum value = (Enum) array.GetValue(0);
return value;
}
public void SetValueByType(Type type, object value)
{
if (type == null)
{
return;
}
FieldInfo field = GetFieldInfo(type);
if (BehaviorTreeArgsDict.IsMaterialArrayType(field.FieldType))
{
field.SetValue(this, BehaviorTreeArgsDict.ConvertToMaterialArray((UnityEngine.Object[]) value));
}
else if (BehaviorTreeArgsDict.IsGameObjectArrayType(field.FieldType))
ValueBase v;
Type vType = this.value.GetType();
if (vType.IsSubclassOf(typeof(Array)))
{
field.SetValue(this, BehaviorTreeArgsDict.ConvertToGameObjectArray((UnityEngine.Object[]) value));
}
else if (BehaviorTreeArgsDict.IsTextureArrayType(field.FieldType))
{
field.SetValue(this, BehaviorTreeArgsDict.ConvertToTextureArray((UnityEngine.Object[]) value));
}
else if (BehaviorTreeArgsDict.IsTexture2DArrayType(field.FieldType))
{
field.SetValue(this, BehaviorTreeArgsDict.ConvertToTexture2DArray((UnityEngine.Object[]) value));
}
else if (BehaviorTreeArgsDict.IsTexture3DArrayType(field.FieldType))
{
field.SetValue(this, BehaviorTreeArgsDict.ConvertToTexture3DArray((UnityEngine.Object[]) value));
}
else if (BehaviorTreeArgsDict.IsShaderArrayType(field.FieldType))
{
field.SetValue(this, BehaviorTreeArgsDict.ConvertToShaderArray((UnityEngine.Object[]) value));
}
else if (BehaviorTreeArgsDict.IsAudioClipArrayType(field.FieldType))
{
field.SetValue(this, BehaviorTreeArgsDict.ConvertToAudioClipArray((UnityEngine.Object[]) value));
}
else if (BehaviorTreeArgsDict.IsSpriteArrayType(field.FieldType))
{
field.SetValue(this, BehaviorTreeArgsDict.ConvertToSpriteArray((UnityEngine.Object[]) value));
Array sourceArray = (Array) this.value;
Array dest = Array.CreateInstance(vType.GetElementType(), sourceArray.Length);
Array.Copy(sourceArray, dest, dest.Length);
v = new ValueBase(dest);
}
else
{
field.SetValue(this, value);
v = new ValueBase(value);
}
return v;
}
private FieldInfo GetFieldInfo(Type type)
public object GetValue()
{
string fieldName;
if (BehaviorTreeArgsDict.IsEnumType(type))
{
fieldName = "enumValue";
}
else if (type.IsArray)
{
fieldName = type.GetElementType() + "Array";
}
else
{
fieldName = type.Name + "Value";
}
fieldName = RemovePrefix(fieldName);
FieldInfo fieldInfo = GetType().GetField(fieldName);
return fieldInfo;
return this.value;
}
private string RemovePrefix(string fieldName)
public void SetValue(object v)
{
string enginePrefix = "UnityEngine.";
int engineIndex = fieldName.IndexOf(enginePrefix);
if (engineIndex != -1)
{
fieldName = fieldName.Remove(engineIndex, enginePrefix.Length);
}
string systemPrefix = "System.";
int systemIndex = fieldName.IndexOf(systemPrefix);
if (systemIndex != -1)
{
fieldName = fieldName.Remove(systemIndex, systemPrefix.Length);
}
return fieldName;
this.value = v;
}
}
}
\ No newline at end of file
......@@ -57,7 +57,7 @@ namespace Model
{
Type type = Game.EntityEventManager.GetAssembly("Model").GetType("Model." + nodeProto.name);
foreach (var args_item in nodeProto.args_dict)
foreach (var args_item in nodeProto.args_dict.Dict())
{
FieldInfo fieldInfo = type.GetField(args_item.Key, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if (fieldInfo == null)
......@@ -70,7 +70,7 @@ namespace Model
private static void NewSetValue(ref Node node, FieldInfo field, ValueBase valueBase, string nodeName)
{
field.SetValue(node, valueBase.GetValueByType(field.FieldType));
field.SetValue(node, valueBase.GetValue());
}
private Node CreateOneNode(NodeProto proto)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册