Unity

Unityの自動ビルドでコミット番号を入れる(Windows)

Unityの自動ビルドでコミット番号を入れる(Windows)

WindowsにJenkinsを入れて自動ビルド環境を構築してWindowsアプリを作っているのですが、ビルド時にgitのコミット番号を楽にアプリ内に入れれないかなぁと模索中

たぶん二度と書けなさそうなBuildClassなので覚え書きも兼ねて・・・

using UnityEngine;
using System.Collections.Generic;
using UnityEditor;

/// <summary>
/// 自動ビルドを行うクラス
/// </summary>
public class BuildClass
{

    public static void Build()
    {
        // gitのコミット番号の確認
        System.Diagnostics.Process p = new System.Diagnostics.Process();

        //git.exeのフルパス
        p.StartInfo.FileName = @"C:\Program Files\Git\cmd\git.exe";

        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardInput = false;
        p.StartInfo.CreateNoWindow = true;

        //gitで行うコマンドを設定
        p.StartInfo.Arguments = @"rev-parse --short HEAD";

        //起動
        p.Start();

        //出力を読み取る
        string results = p.StandardOutput.ReadToEnd();

        //改行を抜く
        results = results.Replace("\r", "").Replace("\n", "");

        //終了
        p.WaitForExit();
        p.Close();

        // プラットフォーム設定
        BuildTarget platform = BuildTarget.StandaloneWindows64;

        // 出力ファイル名及びパス
        string outputfile = "exe-file/"+  Application.productName +".exe";

        // ターゲットプラットフォーム
        EditorUserBuildSettings.SwitchActiveBuildTarget(platform);

        // ビルド対象シーンリスト
        List<string> allScene = new List<string>();
        foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
        {
            if (scene.enabled)
            {
                allScene.Add(scene.path);
            }
        }

        //PlayerSettingsの変更
        PlayerSettings.SplashScreen.showUnityLogo = false;
        PlayerSettings.SplashScreen.show = false;
        PlayerSettings.bundleVersion = results;

        // 実行
        string errorMessage = BuildPipeline.BuildPlayer(
                allScene.ToArray(),
                outputfile,
                platform,
                BuildOptions.None
        );
    }
}

これで、Application.versionでgitのコミット番号が取得できる予定でしたが、7文字しか出ませんでした。
まぁ、あまり困らないからいいやっと

追記

Unity5.6.3f1だと、Obsoleteが出たのでSwitchActiveBuildTargetのところを修正

using UnityEngine;
using System.Collections.Generic;
using UnityEditor;

/// <summary>
/// 自動ビルドを行うクラス
/// </summary>
public class BuildClass
{

    public static void Build()
    {
        // gitのコミット番号の確認
        System.Diagnostics.Process p = new System.Diagnostics.Process();

        //git.exeのフルパス
        p.StartInfo.FileName = @"C:\Program Files\Git\cmd\git.exe";

        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.RedirectStandardInput = false;
        p.StartInfo.CreateNoWindow = true;

        //gitで行うコマンドを設定
        p.StartInfo.Arguments = @"rev-parse --short HEAD";

        //起動
        p.Start();

        //出力を読み取る
        string results = p.StandardOutput.ReadToEnd();

        //改行を抜く
        results = results.Replace("\r", "").Replace("\n", "");

        //終了
        p.WaitForExit();
        p.Close();

        // プラットフォーム設定
        BuildTarget platform = BuildTarget.StandaloneWindows64;

        // 出力ファイル名及びパス
        string outputfile = "exe-file/" + Application.productName + ".exe";

        // ターゲットプラットフォーム
        EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone,platform);

        // ビルド対象シーンリスト
        List<string> allScene = new List<string>();
        foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
        {
            if (scene.enabled)
            {
                allScene.Add(scene.path);
            }
        }

        //PlayerSettingsの変更
        PlayerSettings.SplashScreen.showUnityLogo = false;
        PlayerSettings.SplashScreen.show = false;
        PlayerSettings.bundleVersion = results;

        // 実行
        string errorMessage = BuildPipeline.BuildPlayer(
                allScene.ToArray(),
                outputfile,
                platform,
                BuildOptions.None
        );
    }
}