littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

Unity Editor Preferences の設定をC#から変更する

Unity Cloud Build に限った事では無いのですが、 自動ビルド環境を構築する際、Unity Editorの Edit > Preferences の設定をC# scriptから変更したい場合があると思います。

普段触らないので毎回忘れるのでメモ。

UnityEditor.EditorPrefs で設定できる。

結論としては、UnityEditor.EditorPrefs で設定できます。

docs.unity3d.com

ただ、どんな設定項目(key)があるのかの一覧を見つけることができなかったので、 手元の設定を開いてキーと型を見つけ出す必要があります。

上記、ドキュメントにもあるのですが、

  • Windowsの場合はレジストリ (Win + R > regedit)
    • HKCU\Software\Unity Technologies\UnityEditor 5.x
  • mac の場合は、
    • ~/Library/Preferences/com.unity3d.UnityEditor5.x.plist

を開いて見つけ出さないといけないようです。

Gradleの設定を切り替える

具体例として、Android ビルド時に利用するgradleの切り替えを行います。

デフォルト状態では、インストール時の設定にもよりますが、Unity組み込みのgradleが利用されます。

f:id:pigshape:20210327132019p:plain

これを変更するには、GUI上では Edit > Preferences > External toolsを開いて

  1. Gradle Installed with Unity recommended のチェックを外す
  2. Gradleのパスを browse を押して任意のパスに変更する

という手順を踏む必要があるのですが、これをスクリプトでやったのが以下のコードとなります。

gradle-5.6.4 が、Application.dataPath/../../gradle-5.6.4 に配置されている想定です。

public static class BuildAndroid
{
    private static void PreBuild()
    {
        var defaultGradle = EditorPrefs.GetString("GradlePath", "");

        var newGradle = Path.Combine(
            Application.dataPath,
            "..",
            "..",
            "gradle-5.6.4");

        EditorPrefs.SetBool("GradleUseEmbedded", false);
        EditorPrefs.SetString("GradlePath", newGradle);

        Debug.Log($"ChangeGradlePath: {defaultGradle} to {newGradle}");
    }
}

Unity Cloud Buildでも、gitリポジトリ内にgradleライブラリを配置して、

Config > Advanced Options > Pre-Export Method Name に上記 BuildAndroid.PreBuild を設定してやれば動作する事は確認できました。

(ARCore関連で必要に迫られることがあったのです)

EditorPrefs の設定は全プロジェクト共通なので注意

  • EditorPrefs の設定は、Editor側の設定なので、同一バージョンのエディターを利用している場合は、全UnityProjectで共通の設定として扱われます。
  • 特定のProjectのみgradleのバージョンを切り替える場合は、ビルド完了後に、gradleのバージョンを元に戻す設定を入れておいた方が良いかもしれません。

参考