private static Offset <NodeInfo> ConvertToRuntimeNodeInfo(FlatBufferBuilder fbb, NodeEditorView nodeView) { FlowOutPortEditorView[] flowOutPortViews = nodeView.flowOutPortViews; Offset <NodeFlowOutPortInfo>[] flowOutInfoOffsets = new Offset <NodeFlowOutPortInfo> [flowOutPortViews.Length]; for (int i = 0; i < flowOutPortViews.Length; i++) { flowOutInfoOffsets[i] = ConvertToRuntimeFlowOutPortInfo(fbb, flowOutPortViews[i]); } List <InputPortEditorView> inputPortViewList = nodeView.inputPortViewList; Offset <NodeInputFieldInfo>[] inputPortInfoOffsets = new Offset <NodeInputFieldInfo> [inputPortViewList.Count]; for (int i = 0; i < inputPortViewList.Count; i++) { inputPortInfoOffsets[i] = ConvertToRuntimeInputPortInfo(fbb, inputPortViewList[i]); } //这里处理rightSideNodeIds数组 VectorOffset rightSideNodeIdsVectorOffset = new VectorOffset(); if (nodeView.ReflectionInfo.IsEntranceNode || nodeView.ReflectionInfo.IsCreateSequenceNode) { List <int> rightSideNodeIdList = new List <int>(); nodeView.GetSequenceNodesIdsRecursive(ref rightSideNodeIdList); if (rightSideNodeIdList.Count > 0) { rightSideNodeIdsVectorOffset = NodeInfo.CreateRightSideNodeIdsVector(fbb, rightSideNodeIdList.ToArray()); } } VectorOffset flowOutVectorOffset = NodeInfo.CreateFlowOutPortInfosVector(fbb, flowOutInfoOffsets); VectorOffset inputVectorOffset = NodeInfo.CreateInputPortInfosVector(fbb, inputPortInfoOffsets); StringOffset nodeTypeNameOffset = fbb.CreateString(nodeView.ReflectionInfo.Type.FullName); NodeInfo.StartNodeInfo(fbb); NodeInfo.AddNodeId(fbb, nodeView.NodeId); NodeInfo.AddNodeClassTypeName(fbb, nodeTypeNameOffset); NodeInfo.AddFlowOutPortInfos(fbb, flowOutVectorOffset); NodeInfo.AddInputPortInfos(fbb, inputVectorOffset); if (nodeView.ReflectionInfo.IsEntranceNode || nodeView.ReflectionInfo.IsCreateSequenceNode) { NodeInfo.AddRightSideNodeIds(fbb, rightSideNodeIdsVectorOffset); } return(NodeInfo.EndNodeInfo(fbb)); }