Unity でビルド時に自動でバージョンに日付を付与する
Unity でビルド時に自動でバージョンに日付を付与するEditor拡張
PlayerSettings.bundleVersion が0.1の時 ビルド時に 0.1.yyyymmddに変更します。
ビルド完了時、もしくはエラー発生時に PlayerSettings.bundleVersion を元に戻します。
Magic Leapの場合は PlayerSettings.Lumin.versionName も合わせて更新している。
#if UNITY_EDITOR using System; using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using UnityEngine; public class BuildVersionWithDate : IPreprocessBuildWithReport, IPostprocessBuildWithReport { public static string date = DateTime.Now.ToString("yyyyMMdd"); private string baseVersion; private string baseLuminVersionName; private BuildTarget baseTarget; /// ビルド前処理 public void OnPreprocessBuild(BuildReport _report) { Application.logMessageReceived += OnBuildError; baseVersion = PlayerSettings.bundleVersion; //バージョンに日付を付与する PlayerSettings.bundleVersion = $"{baseVersion}.{date}"; baseTarget = _report.summary.platform; //MagicLeapはLumin.versionNameも更新 if (baseTarget == BuildTarget.Lumin) { baseLuminVersionName = PlayerSettings.Lumin.versionName; PlayerSettings.Lumin.versionName = PlayerSettings.bundleVersion; } } /// ビルド後処理 public void OnPostprocessBuild(BuildReport _report) { Restore(); } private void OnBuildError(string condition, string stackTrace, LogType type) { if (type == LogType.Error) { Restore(); } } //Rollback private void Restore() { Application.logMessageReceived -= OnBuildError; //バージョンを元に戻す PlayerSettings.bundleVersion = baseVersion; if (baseTarget == BuildTarget.Lumin) { PlayerSettings.Lumin.versionName = baseLuminVersionName; } AssetDatabase.SaveAssets(); } // 開発モードか? private bool isDevelopment(BuildReport report) { return (report.summary.options & BuildOptions.Development) != 0; } /// 実行順 /// MagicLeapにおいて、versionNameを動的に設定するために /// MagicLeapManifestBuildProcessorより先に実行したいため-1を設定する public int callbackOrder { get { return -1; } } } #endif