public object GetValueByType(Type type) { 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}"); } }
public BehaviorTreeArgsDict Clone() { BehaviorTreeArgsDict behaviorTreeArgsDict = new BehaviorTreeArgsDict(); foreach (KeyValuePair <string, object> keyValuePair in this.dict) { behaviorTreeArgsDict.Add(keyValuePair.Key, Clone(keyValuePair.Value)); } return(behaviorTreeArgsDict); }
public BehaviorTreeArgsDict GetArgsDict() { BehaviorTreeArgsDict dict = new BehaviorTreeArgsDict(); foreach (BTTypeBaseComponent item in gameObject.GetComponents <BTTypeBaseComponent>()) { FieldInfo info = item.GetType().GetField("fieldValue"); dict.Add(item.fieldName, info.GetValue(item)); } return(dict); }
public void SetValue(Type type, string fieldName, object value) { foreach (BTTypeBaseComponent item in gameObject.GetComponents <BTTypeBaseComponent>()) { if (fieldName == item.fieldName) { object fieldValue = value; FieldInfo fieldValueinfo = item.GetType().GetField("fieldValue"); if (BehaviorTreeArgsDict.IsEnumType(type)) { fieldValue = value.ToString(); } fieldValueinfo.SetValue(item, fieldValue); } } }
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)) { 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)); } else { field.SetValue(this, value); } }
public BehaviorTreeArgsDict GetArgsDict() { BehaviorTreeArgsDict dict = new BehaviorTreeArgsDict(); foreach (var item in gameObject.GetComponents <BTTypeBaseComponent>()) { FieldInfo info = item.GetType().GetField("fieldValue"); ValueBase valueBase = new ValueBase(); if (item.GetType() == typeof(BTEnumComponent)) { valueBase.SetValueByType(typeof(Enum), info.GetValue(item)); } else { valueBase.SetValueByType(info.FieldType, info.GetValue(item)); } dict.Add(item.fieldName, valueBase); } return(dict); }
private FieldInfo GetFieldInfo(Type type) { 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); }
public static Type GetBTType(Type originType) { Type type = null; try { if (BehaviorTreeArgsDict.IsEnumType(originType)) { type = BTTypeDict[typeof(Enum)]; } else { type = BTTypeDict[originType]; } } catch (Exception e) { throw new Exception($"{originType} not exist!", e); } return(type); }
public static BehaviorNodeConfig ProtoToConfig(NodeProto nodeData) { GameObject go = new GameObject(); BehaviorNodeConfig nodeConfig = go.AddComponent <BehaviorNodeConfig>(); nodeConfig.id = nodeData.nodeId; ((UnityEngine.Object)nodeConfig).name = nodeData.name; go.name = nodeData.name; nodeConfig.describe = nodeData.describe; foreach (var args in nodeData.args_dict) { Type originType = ExportNodeTypeConfig.GetFieldType(nodeData.name, args.Key); try { string fieldName = args.Key; object fieldValue = args.Value.GetValueByType(originType); Type type = BTTypeManager.GetBTType(originType); UnityEngine.Component comp = go.AddComponent(type); FieldInfo fieldNameInfo = type.GetField("fieldName"); fieldNameInfo.SetValue(comp, fieldName); FieldInfo fieldValueinfo = type.GetField("fieldValue"); if (BehaviorTreeArgsDict.IsEnumType(originType)) { fieldValue = fieldValue.ToString(); } fieldValueinfo.SetValue(comp, fieldValue); } catch (Exception ex) { throw new GameException($"transform failed,nodeName:{nodeData.name} fieldName:{args.Key} fieldType:{originType}"); } } foreach (var child in nodeData.children) { BehaviorNodeConfig childConfig = ProtoToConfig(child); childConfig.gameObject.transform.parent = nodeConfig.gameObject.transform; } return(nodeConfig); }
public NodeProto(BehaviorTreeArgsDict dict) { this.Args = dict; }
public NodeProto() { this.Args = new BehaviorTreeArgsDict(); }