public static void BrowseAndLoadDynamicsSetup(GameObject rootObject)
        {
            if (EditorApplication.isPlaying)
            {
                Debug.LogError("再生モードを止めてください。");
                return;
            }

            var fileFilters = new string[] { "CSVファイル", "csv", "テキストファイル", "txt" };
            var path        = EditorUtility.OpenFilePanelWithFilters(
                "ダイナミクス情報を読み込む", "", fileFilters);

            if (path.Length > 0)
            {
                var sourceText = FileUtil.ReadAllText(path);
                if (sourceText.Length > 0)
                {
                    // Record undo objects so that the changes will be saved
                    var undoObjects = new List <Object> {
                        rootObject
                    };
                    var springManager = rootObject.GetComponent <SpringManager>();
                    if (springManager != null)
                    {
                        undoObjects.Add(springManager);
                    }
                    Undo.RecordObjects(undoObjects.ToArray(), "Load Dynamics");

                    SpringBoneSerialization.SetupFromRecordText(rootObject, rootObject, sourceText);
                    AssetDatabase.Refresh();
                    Debug.Log("読み込みました: " + path);
                }
            }
        }
        public static void BrowseAndSaveDynamicsSetup(SpringManager springManager)
        {
            var path = EditorUtility.SaveFilePanel(
                "ダイナミクス情報を保存", "", "", "csv");

            if (path.Length > 0)
            {
                var sourceText = SpringBoneSerialization.BuildDynamicsSetupString(springManager.gameObject);
                if (FileUtil.WriteAllText(path, sourceText))
                {
                    AssetDatabase.Refresh();
                    Debug.Log("保存しました: " + path);
                }
            }
        }