Esempio n. 1
0
        private static BehaviorNodeConfig CreateNodeConfig(this BehaviorTreeConfig treeConfig, string name)
        {
            NodeMeta   proto = BTEditor.Instance.GetComponent <BTNodeInfoComponent>().GetNodeMeta(name);
            GameObject go    = new GameObject()
            {
                name = name
            };

            go.transform.parent = treeConfig.gameObject.transform;
            BehaviorNodeConfig node = go.AddComponent <BehaviorNodeConfig>();

            node.name     = name;
            node.describe = proto.describe;

            foreach (NodeFieldDesc args in proto.new_args_desc)
            {
                Type type = BTTypeManager.GetBTType(args.type);
                UnityEngine.Component comp = go.AddComponent(type);
                FieldInfo             info = type.GetField("fieldName");
                info.SetValue(comp, args.name);
                FieldInfo info1 = type.GetField("fieldValue");
                info1.SetValue(comp, args.value);
            }
            return(node);
        }
Esempio n. 2
0
        public BehaviorNodeConfig BehaviorNodeDataToNodeConfig(BehaviorNodeData nodeData)
        {
            GameObject         go         = new GameObject();
            BehaviorNodeConfig nodeConfig = go.AddComponent <BehaviorNodeConfig>();

            nodeConfig.id       = nodeData.Id;
            nodeConfig.name     = nodeData.Name;
            go.name             = nodeData.Name;
            nodeConfig.describe = nodeData.Desc;
            List <string> unUseList = new List <string>();

            foreach (KeyValuePair <string, object> args in nodeData.Args.Dict())
            {
                if (!NodeMetaHelper.NodeHasField(nodeData.Name, args.Key))
                {
                    unUseList.Add(args.Key);
                    continue;
                }
                Type originType = NodeMetaHelper.GetFieldType(nodeData.Name, args.Key);
                try
                {
                    string    fieldName     = args.Key;
                    object    fieldValue    = args.Value;
                    Type      type          = BTTypeManager.GetBTType(originType);
                    Component comp          = go.AddComponent(type);
                    FieldInfo fieldNameInfo = type.GetField("fieldName");
                    fieldNameInfo.SetValue(comp, fieldName);
                    FieldInfo fieldValueinfo = type.GetField("fieldValue");
                    if (TypeHelper.IsEnumType(originType))
                    {
                        fieldValue = fieldValue.ToString();
                    }
                    fieldValueinfo.SetValue(comp, fieldValue);
                }
                catch (Exception e)
                {
                    throw new Exception($"transform failed,nodeName:{nodeData.Name}  fieldName:{args.Key} fieldType:{originType}", e);
                }
            }
            foreach (string key in unUseList)
            {
                nodeData.Args.Remove(key);
            }
            foreach (BehaviorNodeData child in nodeData.children)
            {
                BehaviorNodeConfig childConfig = this.BehaviorNodeDataToNodeConfig(child);
                childConfig.gameObject.transform.parent = nodeConfig.gameObject.transform;
            }
            return(nodeConfig);
        }
Esempio n. 3
0
        public BehaviorNodeConfig NodeDataToNodeConfig(BehaviorNodeData nodeData)
        {
            GameObject         go         = new GameObject();
            BehaviorNodeConfig nodeConfig = go.AddComponent <BehaviorNodeConfig>();

            nodeConfig.id             = nodeData.nodeId;
            ((Object)nodeConfig).name = nodeData.name;
            go.name             = nodeData.name;
            nodeConfig.describe = nodeData.describe;
            List <string> unUseList = new List <string>();

            foreach (var args in nodeData.args_dict)
            {
                if (!ExportNodeTypeConfig.NodeHasField(nodeData.name, args.Key))
                {
                    unUseList.Add(args.Key);
                    continue;
                }
                Type originType = ExportNodeTypeConfig.GetFieldType(nodeData.name, args.Key);
                try
                {
                    string    fieldName     = args.Key;
                    object    fieldValue    = args.Value.GetValueByType(originType);
                    Type      type          = BTTypeManager.GetBTType(originType);
                    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 e)
                {
                    throw new Exception($"transform failed,nodeName:{nodeData.name}  fieldName:{args.Key} fieldType:{originType}", e);
                }
            }
            foreach (string key in unUseList)
            {
                nodeData.args_dict.Remove(key);
            }
            foreach (var child in nodeData.children)
            {
                BehaviorNodeConfig childConfig = NodeDataToNodeConfig(child);
                childConfig.gameObject.transform.parent = nodeConfig.gameObject.transform;
            }
            return(nodeConfig);
        }
Esempio n. 4
0
        public static BehaviorNodeConfig ProtoToConfig(NodeProto nodeData)
        {
            GameObject         go         = new GameObject();
            BehaviorNodeConfig nodeConfig = go.AddComponent <BehaviorNodeConfig>();

            nodeConfig.id       = nodeData.Id;
            nodeConfig.name     = nodeData.Name;
            go.name             = nodeData.Name;
            nodeConfig.describe = nodeData.Desc;
            foreach (KeyValuePair <string, object> args in nodeData.Args.Dict())
            {
                Type originType = NodeMetaHelper.GetFieldType(nodeData.Name, args.Key);
                try
                {
                    string fieldName                    = args.Key;
                    object fieldValue                   = args.Value;
                    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 (TypeHelper.IsEnumType(originType))
                    {
                        fieldValue = fieldValue.ToString();
                    }
                    fieldValueinfo.SetValue(comp, fieldValue);
                }
                catch (Exception e)
                {
                    throw new Exception($"transform failed,nodeName:{nodeData.Name}  fieldName:{args.Key} fieldType:{originType} {e}");
                }
            }
            foreach (NodeProto child in nodeData.children)
            {
                BehaviorNodeConfig childConfig = ProtoToConfig(child);
                childConfig.gameObject.transform.parent = nodeConfig.gameObject.transform;
            }
            return(nodeConfig);
        }
Esempio n. 5
0
        private void DrawProp(string nodeName, List <NodeFieldDesc> fieldList, NodeParamType nodeParamType)
        {
            for (int i = 0; i < fieldList.Count; i++)
            {
                NodeFieldDesc desc      = fieldList[i];
                Type          fieldType = NodeMetaHelper.GetFieldType(nodeName, desc.name);
                NodeMeta      nodeMeta  = BTEntity.Instance.GetNodeMeta(nodeName);

                // 如果不存在这个参数,给一个默认的
                if (!mCurBehaviorNode.Args.ContainsKey(desc.name))
                {
                    object obj = desc.value ?? BTTypeManager.GetDefaultValue(fieldType);
                    mCurBehaviorNode.Args.Add(desc.name, obj);
                }

                object newValue = null;
                if (TypeHelper.IsStringType(fieldType))
                {
                    if (nodeParamType == NodeParamType.Input)
                    {
                        newValue = InputEnumFieldValue(desc);
                    }
                    else if (nodeParamType == NodeParamType.Output && nodeMeta.classify == NodeClassifyType.Root.ToString())
                    {
                        newValue = ConstTextFieldValue(desc);
                    }
                    else
                    {
                        newValue = TextFieldValue(desc);
                    }
                }
                else if (TypeHelper.IsFloatType(fieldType))
                {
                    newValue = FloatFieldValue(desc);
                }
                else if (TypeHelper.IsDoubleType(fieldType))
                {
                    newValue = DoubletFieldValue(desc);
                }
                else if (TypeHelper.IsIntType(fieldType))
                {
                    newValue = IntFieldValue(desc);
                }
                else if (TypeHelper.IsLongType(fieldType))
                {
                    newValue = LongFieldValue(desc);
                }
                else if (TypeHelper.IsBoolType(fieldType))
                {
                    newValue = BoolFieldValue(desc);
                }
                else if (TypeHelper.IsObjectType(fieldType))
                {
                    newValue = ObjectFieldValue(desc);
                }
                else if (TypeHelper.IsIntArrType(fieldType))
                {
                    newValue = IntArrFieldValue(desc);
                }
                else if (TypeHelper.IsLongArrType(fieldType))
                {
                    newValue = LongArrFieldValue(desc);
                }
                else if (TypeHelper.IsStringArrType(fieldType))
                {
                    newValue = StrArrFieldValue(desc);
                }
                else if (TypeHelper.IsFloatArrType(fieldType))
                {
                    newValue = FloatArrFieldValue(desc);
                }
                else if (TypeHelper.IsDoubleArrType(fieldType))
                {
                    newValue = DoubleArrFieldValue(desc);
                }
                else if (TypeHelper.IsEnumType(fieldType))
                {
                    newValue = EnumFieldValue(desc);
                }
                else if (TypeHelper.IsObjectArrayType(fieldType))
                {
                    newValue = ObjectArrFieldValue(desc);
                }
                else
                {
                    Log.Error($"行为树节点暂时未支持此类型:{fieldType}!");
                    return;
                }
                mCurBehaviorNode.Args.SetKeyValueComp(desc.name, newValue);
            }
        }