FungusのLocalizatioのExport Standard TextのパスをInspector上から指定する【Unity】【Fungus】

目的

Fungusで localizationなどを想定する際にテキストデータを外部に出力することがあります。Exportするときに以下のように毎回 保存場所を聞かれるため、Default値をInspetorから指定したい

Demo

以下のように InspectorからDefault Pathを指定して、Export Standart Text To Default Path を押すことで Inspectorのパスに保存されます。

開発環境

  • Unity 2022.2.0f1
  • Fungus v3.13.8

追加・変更点

(画像は変更差分)

まず Localization.cs に Inspector上に入力するための SerializeField を追加します。

次に Editor側で Buttonの処理やパスの処理を追加していきます。

Inspectorの値を取得するために、 SerializedProperty で変数のプロパティを取得します。

SerializedPropertyの詳細は公式ドキュメントを確認ください

docs.unity3d.com

        protected SerializedProperty activeLanguageProp;
        protected SerializedProperty localizationFileProp;
        protected SerializedProperty savePathProp;

        protected virtual void OnEnable()
        {
            activeLanguageProp = serializedObject.FindProperty("activeLanguage");
            localizationFileProp = serializedObject.FindProperty("localizationFile");
            savePathProp = serializedObject.FindProperty("savePath");
        }

        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            Localization localization = target as Localization;

            EditorGUILayout.PropertyField(activeLanguageProp);
            EditorGUILayout.PropertyField(localizationFileProp);
            EditorGUILayout.PropertyField(savePathProp);

追加のButtonを定義します。

            if (GUILayout.Button(new GUIContent("Export Standard Text At Default Path")))
            {
                ExportStandardText(localization, savePathProp.stringValue);
            }

また追加機能用にパスを引数から指定できる関数を追加します

        public virtual void ExportStandardText(Localization localization, string path)
        {
            if (path.Length == 0)
            {
                return;
            }

            localization.ClearLocalizeableCache();

            string textData = localization.GetStandardText();
            File.WriteAllText(path, textData);
            AssetDatabase.Refresh();

            ShowNotification(localization);
        }