示例#1
0
        public void FlowToNode(int nodeId)
        {
            //流向下一个节点,下一个节点必须在这个技能序列内
            NodeBase targetNode = GetNode(nodeId);

            if (targetNode == null)
            {
                return;
            }

#if UNITY_EDITOR
            if (runningNodeList.Contains(targetNode))
            {
                Debug.LogErrorFormat("节点{0}已经在运行了,属于重复运行。多实例运行要使用CreateSequence节点", nodeId);
            }
#endif

            //进入创建序列流程
            if (targetNode.isCreateSequenceNode)
            {
                if (childSequencePool == null)
                {
                    childSequencePool = new Dictionary <int, Queue <NodeSequence> >();
                }

                bool needCreateNewSequence = true;
                //尝试从池中取
                if (childSequencePool.ContainsKey(nodeId))
                {
                    Queue <NodeSequence> poolSequence = childSequencePool[nodeId];
                    if (poolSequence != null && poolSequence.Count > 0)
                    {
//                        Debug.Log("cache hit");
                        NodeSequence nodeSequence = poolSequence.Dequeue();
                        nodeSequence.Reset();
                        runningChildSequenceList.Add(nodeSequence);
                        nodeSequence.Start();

                        needCreateNewSequence = false;
                    }
                }

                if (needCreateNewSequence)
                {
                    CreateSequenceNode createSequenceNode = targetNode as CreateSequenceNode;
                    NodeSequence       newNodeSequence    = new NodeSequence(nodeId, createSequenceNode.rightSideNodeIds, GraphBehaviour, this);

                    runningChildSequenceList.Add(newNodeSequence);
                    newNodeSequence.Start();
                }
            }
            else
            {
                targetNode.OnEnter();
                //该节点直接在OnEnter就结束了,不用加入runningNodeList
                if (targetNode.isFinish)
                {
                    return;
                }

                if (!runningNodeList.Contains(targetNode))
                {
                    runningNodeList.Add(targetNode);
                }
            }
        }
示例#2
0
        public static NodeBase DeserializeNode(ByteBuffer bb, int nodeId)
        {
            NodeBase  resultNode = null;
            GraphInfo graphInfo  = GraphInfo.GetRootAsGraphInfo(bb);

            int nodeCount = graphInfo.NodesLength;

            for (int i = 0; i < nodeCount; i++)
            {
                NodeInfo?nodeInfo = graphInfo.Nodes(i);
                if (!nodeInfo.HasValue)
                {
                    continue;
                }

                if (nodeInfo.Value.NodeId != nodeId)
                {
                    continue;
                }

                string          nodeClassName = nodeInfo.Value.NodeClassTypeName;
                Func <NodeBase> nodeFactory;
                if (nodeFactoryDictionary.TryGetValue(nodeClassName, out nodeFactory))
                {
                    resultNode = nodeFactory();
                }

                if (resultNode == null)
                {
                    UnityEngine.Debug.LogErrorFormat("无法实例化节点 {0},是否添加了新节点,但是没有生成静态代码?", nodeClassName);
                    return(null);
                }

                Type nodeType = resultNode.GetType();

                resultNode.nodeId = nodeInfo.Value.NodeId;
                resultNode.isCreateSequenceNode = nodeType == typeof(CreateSequenceNode);

                //处理input
                //使用静态生成代码来处理
                int inputFieldCount = nodeInfo.Value.InputPortInfosLength;
                for (int j = 0; j < inputFieldCount; j++)
                {
                    NodeInputFieldInfo nodeInputFieldInfo = nodeInfo.Value.InputPortInfos(j).Value;
//                    WriteNodeInputVariableField(resultNode, nodeType, nodeInfo.Value.InputPortInfos(j).Value);
                    Action <NodeBase, NodeInputFieldInfo> parseFunction;
                    if (inputPortParseFuncDictionary.TryGetValue(nodeType, out parseFunction))
                    {
                        parseFunction(resultNode, nodeInputFieldInfo);
                    }
                    else
                    {
                        UnityEngine.Debug.LogErrorFormat("无法处理节点 {0} 的input port,是否添加了新节点,但是没有生成静态代码?", nodeClassName);
                    }
                }

                //处理flow out
                WriteFlowOutField(resultNode, nodeType, nodeInfo.Value);

                //处理outputPortFuncs
                //使用静态生成代码来处理
                Action <NodeBase> outputFuncsInitAction;
                if (nodeOutputInitFuncDictionary.TryGetValue(nodeType, out outputFuncsInitAction))
                {
                    outputFuncsInitAction(resultNode);
                }

                //还原EntranceNode或者CreateSequenceNode的右侧节点id
                EntranceNodeBase entranceNodeBase = resultNode as EntranceNodeBase;
                if (entranceNodeBase != null)
                {
                    int[] rightSideNodeIds = new int[nodeInfo.Value.RightSideNodeIdsLength];
                    for (int j = 0; j < rightSideNodeIds.Length; j++)
                    {
                        rightSideNodeIds[j] = nodeInfo.Value.RightSideNodeIds(j);
                    }

                    entranceNodeBase.rightSideNodeIds = rightSideNodeIds;
                }
                else
                {
                    CreateSequenceNode createSequenceNode = resultNode as CreateSequenceNode;
                    if (createSequenceNode != null)
                    {
                        int[] rightSideNodeIds = new int[nodeInfo.Value.RightSideNodeIdsLength];
                        for (int j = 0; j < rightSideNodeIds.Length; j++)
                        {
                            rightSideNodeIds[j] = nodeInfo.Value.RightSideNodeIds(j);
                        }

                        createSequenceNode.rightSideNodeIds = rightSideNodeIds;
                    }
                }
            }

            return(resultNode);
        }
示例#3
0
        private static void InitInputPortParseFuncsDictionary()
        {
            if (inputPortParseFuncDictionary != null)
            {
                return;
            }

            inputPortParseFuncDictionary = new Dictionary <Type, Action <NodeBase, NodeInputFieldInfo> >
            {
                {
                    typeof(CreateSequenceNode), (nodeInstance, inputFieldInfo) =>
                    {
                        CreateSequenceNode createSequenceNode = nodeInstance as CreateSequenceNode;
                        string             inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId = inputFieldInfo.TargetNodeId;
                        int    targetPortId = inputFieldInfo.TargetPortId;
                        string valueString  = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "initCountInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                createSequenceNode.initCountInputVariable = new NodeInputVariable <int>();
                                createSequenceNode.initCountInputVariable.targetNodeId = targetNodeId;
                                createSequenceNode.initCountInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                createSequenceNode.initCountInputVariable       = new NodeInputVariable <int>();
                                createSequenceNode.initCountInputVariable.value = int.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(LogNode), (nodeInstance, inputFieldInfo) =>
                    {
                        LogNode logNode            = nodeInstance as LogNode;
                        string  inputPortFieldName = inputFieldInfo.FieldName;
                        int     targetNodeId       = inputFieldInfo.TargetNodeId;
                        int     targetPortId       = inputFieldInfo.TargetPortId;
                        string  valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "logTypeInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                logNode.logTypeInputVariable = new NodeInputVariable <FlatNode.Runtime.LogNode.LogType>();
                                logNode.logTypeInputVariable.targetNodeId = targetNodeId;
                                logNode.logTypeInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                logNode.logTypeInputVariable       = new NodeInputVariable <FlatNode.Runtime.LogNode.LogType>();
                                logNode.logTypeInputVariable.value = (FlatNode.Runtime.LogNode.LogType)Enum.Parse(typeof(FlatNode.Runtime.LogNode.LogType), valueString);
                            }
                        }
                        else if (inputPortFieldName == "logStringInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                logNode.logStringInputVariable = new NodeInputVariable <string>();
                                logNode.logStringInputVariable.targetNodeId = targetNodeId;
                                logNode.logStringInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                logNode.logStringInputVariable       = new NodeInputVariable <string>();
                                logNode.logStringInputVariable.value = valueString;
                            }
                        }
                    }
                },
                {
                    typeof(IfNode), (nodeInstance, inputFieldInfo) =>
                    {
                        IfNode ifNode             = nodeInstance as IfNode;
                        string inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId       = inputFieldInfo.TargetNodeId;
                        int    targetPortId       = inputFieldInfo.TargetPortId;
                        string valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "boolInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                ifNode.boolInput = new NodeInputVariable <bool>();
                                ifNode.boolInput.targetNodeId = targetNodeId;
                                ifNode.boolInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                ifNode.boolInput       = new NodeInputVariable <bool>();
                                ifNode.boolInput.value = Boolean.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(RepeatNode), (nodeInstance, inputFieldInfo) =>
                    {
                        RepeatNode repeatNode         = nodeInstance as RepeatNode;
                        string     inputPortFieldName = inputFieldInfo.FieldName;
                        int        targetNodeId       = inputFieldInfo.TargetNodeId;
                        int        targetPortId       = inputFieldInfo.TargetPortId;
                        string     valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "repeatCountInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                repeatNode.repeatCountInputVariable = new NodeInputVariable <int>();
                                repeatNode.repeatCountInputVariable.targetNodeId = targetNodeId;
                                repeatNode.repeatCountInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                repeatNode.repeatCountInputVariable       = new NodeInputVariable <int>();
                                repeatNode.repeatCountInputVariable.value = int.Parse(valueString);
                            }
                        }
                        else if (inputPortFieldName == "repeatIntervalSecondsInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                repeatNode.repeatIntervalSecondsInputVariable = new NodeInputVariable <float>();
                                repeatNode.repeatIntervalSecondsInputVariable.targetNodeId = targetNodeId;
                                repeatNode.repeatIntervalSecondsInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                repeatNode.repeatIntervalSecondsInputVariable       = new NodeInputVariable <float>();
                                repeatNode.repeatIntervalSecondsInputVariable.value = float.Parse(valueString);
                            }
                        }
                        else if (inputPortFieldName == "executeImmediatelyInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                repeatNode.executeImmediatelyInputVariable = new NodeInputVariable <bool>();
                                repeatNode.executeImmediatelyInputVariable.targetNodeId = targetNodeId;
                                repeatNode.executeImmediatelyInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                repeatNode.executeImmediatelyInputVariable       = new NodeInputVariable <bool>();
                                repeatNode.executeImmediatelyInputVariable.value = Boolean.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(StopRunningNode), (nodeInstance, inputFieldInfo) =>
                    {
                        StopRunningNode stopRunningNode    = nodeInstance as StopRunningNode;
                        string          inputPortFieldName = inputFieldInfo.FieldName;
                        int             targetNodeId       = inputFieldInfo.TargetNodeId;
                        int             targetPortId       = inputFieldInfo.TargetPortId;
                        string          valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "stopNodeIdsInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                stopRunningNode.stopNodeIdsInput = new NodeInputVariable <List <int> >();
                                stopRunningNode.stopNodeIdsInput.targetNodeId = targetNodeId;
                                stopRunningNode.stopNodeIdsInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                stopRunningNode.stopNodeIdsInput       = new NodeInputVariable <List <int> >();
                                stopRunningNode.stopNodeIdsInput.value = ParseIntList(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(UpdateNode), (nodeInstance, inputFieldInfo) =>
                    {
                        UpdateNode updateNode         = nodeInstance as UpdateNode;
                        string     inputPortFieldName = inputFieldInfo.FieldName;
                        int        targetNodeId       = inputFieldInfo.TargetNodeId;
                        int        targetPortId       = inputFieldInfo.TargetPortId;
                        string     valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "intervalInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                updateNode.intervalInput = new NodeInputVariable <float>();
                                updateNode.intervalInput.targetNodeId = targetNodeId;
                                updateNode.intervalInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                updateNode.intervalInput       = new NodeInputVariable <float>();
                                updateNode.intervalInput.value = float.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(WaitNode), (nodeInstance, inputFieldInfo) =>
                    {
                        WaitNode waitNode           = nodeInstance as WaitNode;
                        string   inputPortFieldName = inputFieldInfo.FieldName;
                        int      targetNodeId       = inputFieldInfo.TargetNodeId;
                        int      targetPortId       = inputFieldInfo.TargetPortId;
                        string   valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "waitTimeInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                waitNode.waitTimeInputVariable = new NodeInputVariable <float>();
                                waitNode.waitTimeInputVariable.targetNodeId = targetNodeId;
                                waitNode.waitTimeInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                waitNode.waitTimeInputVariable       = new NodeInputVariable <float>();
                                waitNode.waitTimeInputVariable.value = float.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(CheckKeyPressNode), (nodeInstance, inputFieldInfo) =>
                    {
                        CheckKeyPressNode checkKeyPressNode  = nodeInstance as CheckKeyPressNode;
                        string            inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId = inputFieldInfo.TargetNodeId;
                        int    targetPortId = inputFieldInfo.TargetPortId;
                        string valueString  = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "checkKeyCodeInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                checkKeyPressNode.checkKeyCodeInput = new NodeInputVariable <UnityEngine.KeyCode>();
                                checkKeyPressNode.checkKeyCodeInput.targetNodeId = targetNodeId;
                                checkKeyPressNode.checkKeyCodeInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                checkKeyPressNode.checkKeyCodeInput       = new NodeInputVariable <UnityEngine.KeyCode>();
                                checkKeyPressNode.checkKeyCodeInput.value = (UnityEngine.KeyCode)Enum.Parse(typeof(UnityEngine.KeyCode), valueString);
                            }
                        }
                    }
                },
                {
                    typeof(IntComparerNode), (nodeInstance, inputFieldInfo) =>
                    {
                        IntComparerNode intComparerNode    = nodeInstance as IntComparerNode;
                        string          inputPortFieldName = inputFieldInfo.FieldName;
                        int             targetNodeId       = inputFieldInfo.TargetNodeId;
                        int             targetPortId       = inputFieldInfo.TargetPortId;
                        string          valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "aInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                intComparerNode.aInput = new NodeInputVariable <int>();
                                intComparerNode.aInput.targetNodeId = targetNodeId;
                                intComparerNode.aInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                intComparerNode.aInput       = new NodeInputVariable <int>();
                                intComparerNode.aInput.value = int.Parse(valueString);
                            }
                        }
                        else if (inputPortFieldName == "bInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                intComparerNode.bInput = new NodeInputVariable <int>();
                                intComparerNode.bInput.targetNodeId = targetNodeId;
                                intComparerNode.bInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                intComparerNode.bInput       = new NodeInputVariable <int>();
                                intComparerNode.bInput.value = int.Parse(valueString);
                            }
                        }
                        else if (inputPortFieldName == "compareTypeInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                intComparerNode.compareTypeInput = new NodeInputVariable <FlatNode.Runtime.CompareType>();
                                intComparerNode.compareTypeInput.targetNodeId = targetNodeId;
                                intComparerNode.compareTypeInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                intComparerNode.compareTypeInput       = new NodeInputVariable <FlatNode.Runtime.CompareType>();
                                intComparerNode.compareTypeInput.value = (FlatNode.Runtime.CompareType)Enum.Parse(typeof(FlatNode.Runtime.CompareType), valueString);
                            }
                        }
                    }
                },
                {
                    typeof(InverseDirectionNode), (nodeInstance, inputFieldInfo) =>
                    {
                        InverseDirectionNode inverseDirectionNode = nodeInstance as InverseDirectionNode;
                        string inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId       = inputFieldInfo.TargetNodeId;
                        int    targetPortId       = inputFieldInfo.TargetPortId;
                        string valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "directionInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                inverseDirectionNode.directionInput = new NodeInputVariable <UnityEngine.Vector3>();
                                inverseDirectionNode.directionInput.targetNodeId = targetNodeId;
                                inverseDirectionNode.directionInput.targetPortId = targetPortId;
                            }
                        }
                    }
                },
                {
                    typeof(JoyStickInputConvertNode), (nodeInstance, inputFieldInfo) =>
                    {
                        JoyStickInputConvertNode joyStickInputConvertNode = nodeInstance as JoyStickInputConvertNode;
                        string inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId       = inputFieldInfo.TargetNodeId;
                        int    targetPortId       = inputFieldInfo.TargetPortId;
                        string valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "vector2Input")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                joyStickInputConvertNode.vector2Input = new NodeInputVariable <UnityEngine.Vector2>();
                                joyStickInputConvertNode.vector2Input.targetNodeId = targetNodeId;
                                joyStickInputConvertNode.vector2Input.targetPortId = targetPortId;
                            }
                        }
                    }
                },
                {
                    typeof(NormalizeVectorNode), (nodeInstance, inputFieldInfo) =>
                    {
                        NormalizeVectorNode normalizeVectorNode = nodeInstance as NormalizeVectorNode;
                        string inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId       = inputFieldInfo.TargetNodeId;
                        int    targetPortId       = inputFieldInfo.TargetPortId;
                        string valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "vector2Input")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                normalizeVectorNode.vector2Input = new NodeInputVariable <UnityEngine.Vector2>();
                                normalizeVectorNode.vector2Input.targetNodeId = targetNodeId;
                                normalizeVectorNode.vector2Input.targetPortId = targetPortId;
                            }
                        }
                        else if (inputPortFieldName == "vector3Input")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                normalizeVectorNode.vector3Input = new NodeInputVariable <UnityEngine.Vector3>();
                                normalizeVectorNode.vector3Input.targetNodeId = targetNodeId;
                                normalizeVectorNode.vector3Input.targetPortId = targetPortId;
                            }
                        }
                    }
                },
                {
                    typeof(QuadraticBezierPathNode), (nodeInstance, inputFieldInfo) =>
                    {
                        QuadraticBezierPathNode quadraticBezierPathNode = nodeInstance as QuadraticBezierPathNode;
                        string inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId       = inputFieldInfo.TargetNodeId;
                        int    targetPortId       = inputFieldInfo.TargetPortId;
                        string valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "startPosInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                quadraticBezierPathNode.startPosInput = new NodeInputVariable <UnityEngine.Vector3>();
                                quadraticBezierPathNode.startPosInput.targetNodeId = targetNodeId;
                                quadraticBezierPathNode.startPosInput.targetPortId = targetPortId;
                            }
                        }
                        else if (inputPortFieldName == "endPosInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                quadraticBezierPathNode.endPosInput = new NodeInputVariable <UnityEngine.Vector3>();
                                quadraticBezierPathNode.endPosInput.targetNodeId = targetNodeId;
                                quadraticBezierPathNode.endPosInput.targetPortId = targetPortId;
                            }
                        }
                        else if (inputPortFieldName == "centerHeightOffsetInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                quadraticBezierPathNode.centerHeightOffsetInput = new NodeInputVariable <float>();
                                quadraticBezierPathNode.centerHeightOffsetInput.targetNodeId = targetNodeId;
                                quadraticBezierPathNode.centerHeightOffsetInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                quadraticBezierPathNode.centerHeightOffsetInput       = new NodeInputVariable <float>();
                                quadraticBezierPathNode.centerHeightOffsetInput.value = float.Parse(valueString);
                            }
                        }
                        else if (inputPortFieldName == "spanLengthInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                quadraticBezierPathNode.spanLengthInput = new NodeInputVariable <float>();
                                quadraticBezierPathNode.spanLengthInput.targetNodeId = targetNodeId;
                                quadraticBezierPathNode.spanLengthInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                quadraticBezierPathNode.spanLengthInput       = new NodeInputVariable <float>();
                                quadraticBezierPathNode.spanLengthInput.value = float.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(RandomFloatNode), (nodeInstance, inputFieldInfo) =>
                    {
                        RandomFloatNode randomFloatNode    = nodeInstance as RandomFloatNode;
                        string          inputPortFieldName = inputFieldInfo.FieldName;
                        int             targetNodeId       = inputFieldInfo.TargetNodeId;
                        int             targetPortId       = inputFieldInfo.TargetPortId;
                        string          valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "minInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                randomFloatNode.minInputVariable = new NodeInputVariable <float>();
                                randomFloatNode.minInputVariable.targetNodeId = targetNodeId;
                                randomFloatNode.minInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                randomFloatNode.minInputVariable       = new NodeInputVariable <float>();
                                randomFloatNode.minInputVariable.value = float.Parse(valueString);
                            }
                        }
                        else if (inputPortFieldName == "maxInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                randomFloatNode.maxInputVariable = new NodeInputVariable <float>();
                                randomFloatNode.maxInputVariable.targetNodeId = targetNodeId;
                                randomFloatNode.maxInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                randomFloatNode.maxInputVariable       = new NodeInputVariable <float>();
                                randomFloatNode.maxInputVariable.value = float.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(VectorAddNode), (nodeInstance, inputFieldInfo) =>
                    {
                        VectorAddNode vectorAddNode      = nodeInstance as VectorAddNode;
                        string        inputPortFieldName = inputFieldInfo.FieldName;
                        int           targetNodeId       = inputFieldInfo.TargetNodeId;
                        int           targetPortId       = inputFieldInfo.TargetPortId;
                        string        valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "aVectorInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                vectorAddNode.aVectorInput = new NodeInputVariable <UnityEngine.Vector3>();
                                vectorAddNode.aVectorInput.targetNodeId = targetNodeId;
                                vectorAddNode.aVectorInput.targetPortId = targetPortId;
                            }
                        }
                        else if (inputPortFieldName == "bVectorInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                vectorAddNode.bVectorInput = new NodeInputVariable <UnityEngine.Vector3>();
                                vectorAddNode.bVectorInput.targetNodeId = targetNodeId;
                                vectorAddNode.bVectorInput.targetPortId = targetPortId;
                            }
                        }
                        else if (inputPortFieldName == "typeInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                vectorAddNode.typeInput = new NodeInputVariable <FlatNode.Runtime.VectorAddNode.CalculateType>();
                                vectorAddNode.typeInput.targetNodeId = targetNodeId;
                                vectorAddNode.typeInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                vectorAddNode.typeInput       = new NodeInputVariable <FlatNode.Runtime.VectorAddNode.CalculateType>();
                                vectorAddNode.typeInput.value = (FlatNode.Runtime.VectorAddNode.CalculateType)Enum.Parse(typeof(FlatNode.Runtime.VectorAddNode.CalculateType), valueString);
                            }
                        }
                    }
                },
                {
                    typeof(VectorScalarNode), (nodeInstance, inputFieldInfo) =>
                    {
                        VectorScalarNode vectorScalarNode   = nodeInstance as VectorScalarNode;
                        string           inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId = inputFieldInfo.TargetNodeId;
                        int    targetPortId = inputFieldInfo.TargetPortId;
                        string valueString  = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "v2Input")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                vectorScalarNode.v2Input = new NodeInputVariable <UnityEngine.Vector2>();
                                vectorScalarNode.v2Input.targetNodeId = targetNodeId;
                                vectorScalarNode.v2Input.targetPortId = targetPortId;
                            }
                        }
                        else if (inputPortFieldName == "v3Input")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                vectorScalarNode.v3Input = new NodeInputVariable <UnityEngine.Vector3>();
                                vectorScalarNode.v3Input.targetNodeId = targetNodeId;
                                vectorScalarNode.v3Input.targetPortId = targetPortId;
                            }
                        }
                        else if (inputPortFieldName == "scalarInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                vectorScalarNode.scalarInput = new NodeInputVariable <float>();
                                vectorScalarNode.scalarInput.targetNodeId = targetNodeId;
                                vectorScalarNode.scalarInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                vectorScalarNode.scalarInput       = new NodeInputVariable <float>();
                                vectorScalarNode.scalarInput.value = float.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(SetVector3ComponentNode), (nodeInstance, inputFieldInfo) =>
                    {
                        SetVector3ComponentNode setVector3ComponentNode = nodeInstance as SetVector3ComponentNode;
                        string inputPortFieldName = inputFieldInfo.FieldName;
                        int    targetNodeId       = inputFieldInfo.TargetNodeId;
                        int    targetPortId       = inputFieldInfo.TargetPortId;
                        string valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "originV3Input")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                setVector3ComponentNode.originV3Input = new NodeInputVariable <UnityEngine.Vector3>();
                                setVector3ComponentNode.originV3Input.targetNodeId = targetNodeId;
                                setVector3ComponentNode.originV3Input.targetPortId = targetPortId;
                            }
                        }
                        else if (inputPortFieldName == "targetComponentInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                setVector3ComponentNode.targetComponentInput = new NodeInputVariable <FlatNode.Runtime.VectorComponent>();
                                setVector3ComponentNode.targetComponentInput.targetNodeId = targetNodeId;
                                setVector3ComponentNode.targetComponentInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                setVector3ComponentNode.targetComponentInput       = new NodeInputVariable <FlatNode.Runtime.VectorComponent>();
                                setVector3ComponentNode.targetComponentInput.value = (FlatNode.Runtime.VectorComponent)Enum.Parse(typeof(FlatNode.Runtime.VectorComponent), valueString);
                            }
                        }
                        else if (inputPortFieldName == "valueInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                setVector3ComponentNode.valueInput = new NodeInputVariable <float>();
                                setVector3ComponentNode.valueInput.targetNodeId = targetNodeId;
                                setVector3ComponentNode.valueInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                setVector3ComponentNode.valueInput       = new NodeInputVariable <float>();
                                setVector3ComponentNode.valueInput.value = float.Parse(valueString);
                            }
                        }
                    }
                },
                {
                    typeof(TestNode), (nodeInstance, inputFieldInfo) =>
                    {
                        TestNode testNode           = nodeInstance as TestNode;
                        string   inputPortFieldName = inputFieldInfo.FieldName;
                        int      targetNodeId       = inputFieldInfo.TargetNodeId;
                        int      targetPortId       = inputFieldInfo.TargetPortId;
                        string   valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "damageInputVariable")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                testNode.damageInputVariable = new NodeInputVariable <FlatNode.Runtime.LayerMaskWrapper>();
                                testNode.damageInputVariable.targetNodeId = targetNodeId;
                                testNode.damageInputVariable.targetPortId = targetPortId;
                            }
                            else
                            {
                                testNode.damageInputVariable = new NodeInputVariable <FlatNode.Runtime.LayerMaskWrapper>();
                                LayerMaskWrapper layerMaskWrapper = valueString;
                                testNode.damageInputVariable.value = layerMaskWrapper;
                            }
                        }
                    }
                },
                {
                    typeof(GetVariableNode), (nodeInstance, inputFieldInfo) =>
                    {
                        GetVariableNode getVariableNode    = nodeInstance as GetVariableNode;
                        string          inputPortFieldName = inputFieldInfo.FieldName;
                        int             targetNodeId       = inputFieldInfo.TargetNodeId;
                        int             targetPortId       = inputFieldInfo.TargetPortId;
                        string          valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "getVariableWrapperInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                getVariableNode.getVariableWrapperInput = new NodeInputVariable <FlatNode.Runtime.VariableWrapper>();
                                getVariableNode.getVariableWrapperInput.targetNodeId = targetNodeId;
                                getVariableNode.getVariableWrapperInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                getVariableNode.getVariableWrapperInput = new NodeInputVariable <FlatNode.Runtime.VariableWrapper>();
                                int             variableId      = int.Parse(valueString);
                                VariableWrapper variableWrapper = variableId;
                                getVariableNode.getVariableWrapperInput.value = variableWrapper;
                            }
                        }
                    }
                },
                {
                    typeof(SetVariableNode), (nodeInstance, inputFieldInfo) =>
                    {
                        SetVariableNode setVariableNode    = nodeInstance as SetVariableNode;
                        string          inputPortFieldName = inputFieldInfo.FieldName;
                        int             targetNodeId       = inputFieldInfo.TargetNodeId;
                        int             targetPortId       = inputFieldInfo.TargetPortId;
                        string          valueString        = inputFieldInfo.ValueString;

                        if (inputPortFieldName == "setVariableWrapperInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                setVariableNode.setVariableWrapperInput = new NodeInputVariable <FlatNode.Runtime.VariableWrapper>();
                                setVariableNode.setVariableWrapperInput.targetNodeId = targetNodeId;
                                setVariableNode.setVariableWrapperInput.targetPortId = targetPortId;
                            }
                            else
                            {
                                setVariableNode.setVariableWrapperInput = new NodeInputVariable <FlatNode.Runtime.VariableWrapper>();
                                int             variableId      = int.Parse(valueString);
                                VariableWrapper variableWrapper = variableId;
                                setVariableNode.setVariableWrapperInput.value = variableWrapper;
                            }
                        }
                        else if (inputPortFieldName == "valueVariableInput")
                        {
                            if (targetNodeId >= 0 && targetPortId >= 0)
                            {
                                setVariableNode.valueVariableInput = new NodeInputVariable <FlatNode.Runtime.NodeVariable>();
                                setVariableNode.valueVariableInput.targetNodeId = targetNodeId;
                                setVariableNode.valueVariableInput.targetPortId = targetPortId;
                            }
                        }
                    }
                },
            };
        }