/// <summary>
        /// エッジ作成時
        /// </summary>
        /// <param name="edges"></param>
        private void OnCreatedEdges(List <Edge> edges)
        {
            if (edges == null)
            {
                return;
            }

            foreach (var edge in edges)
            {
                var inputNode  = edge.input.node as ScriptGraphNode;
                var outputNode = edge.output.node as ScriptGraphNode;

                if (outputNode.outIds.Contains(inputNode.id) == false)
                {
                    int portIndex = (int)edge.output.userData;
                    if (outputNode.outIds.Count <= portIndex)
                    {
                        outputNode.outIds.Insert(portIndex, inputNode.id);
                    }
                    else
                    {
                        outputNode.outIds[portIndex] = inputNode.id;
                    }

                    _window.scriptGraphAsset.UpdateNode(ScriptNodeSerializer.Serialize(outputNode));
                }
            }
        }
        private IEnumerator OnCreateNodeDelayCall(ScriptGraphNode node)
        {
            yield return(0);

            // 1フレーム遅らせる
            _window.scriptGraphAsset.AddNode(ScriptNodeSerializer.Serialize(node));

            yield return(null);
        }
        private void OnMovedElements(List <GraphElement> movedElements)
        {
            if (movedElements == null)
            {
                return;
            }

            foreach (var element in movedElements)
            {
                if (element is ScriptGraphNode)
                {
                    var node = element as ScriptGraphNode;

                    _window.scriptGraphAsset.UpdateNode(ScriptNodeSerializer.Serialize(node));
                }
            }
        }
        private void OnRemovedElements(List <GraphElement> removedElements)
        {
            if (removedElements == null)
            {
                return;
            }

            foreach (var element in removedElements)
            {
                if (element is Edge)
                {
                    var edge = element as Edge;

                    var inputNode  = edge.input.node as ScriptGraphNode;
                    var outputNode = edge.output.node as ScriptGraphNode;

                    if (outputNode.outIds.Contains(inputNode.id))
                    {
                        for (int i = 0; i < outputNode.outIds.Count; ++i)
                        {
                            if (outputNode.outIds[i] == inputNode.id)
                            {
                                outputNode.outIds[i] = 0;
                                break;
                            }
                        }

                        _window.scriptGraphAsset.UpdateNode(ScriptNodeSerializer.Serialize(outputNode));
                    }
                }
            }

            foreach (var element in removedElements)
            {
                if (element is ScriptGraphNode)
                {
                    var node = element as ScriptGraphNode;

                    _window.scriptGraphAsset.RemoveNode(node.id);
                }
            }
        }
 private void OnNodeContentChanged(ScriptGraphNode node)
 {
     _window.scriptGraphAsset.UpdateNode(ScriptNodeSerializer.Serialize(node));
 }