0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

MacでUnity CLIビルドをしてみる

Unity CLI自体はWindowsとほぼ変わらないが、path指定などが変わったりします

実装

注意点

Windowsで開発している人がチームにいる場合は文字コードをUTF-8などにしてもらいましょう

コメントなどが文字化けを起こし、正常に実行されません

この記事の逆パターンです

Shell変数宣言

# 使用時にダブルクォーテーションが重ならないように、変数に代入する値を調整する
UNITY_VERSION=2022.3.48f1
UNITY_EDITOR_PATH=UnityEditorのPath
PROJECT_PATH=UnityProjectのPath
EXPORT_PATH="Build成果物を配置するGoogleDriveのPath"
LOG_FILE_PATH=logファイルを配置するPath
GAS_URL="GASのWebアプリデプロイのURL"

セットアップ処理

以前のBuild成果物を削除し、プロジェクトをPullしている

# 出力フォルダを処理のたびに削除する
# -e 指定したパスが存在するかどうかの判定キーワード
# then if文の構文で、条件式の結果でthenブロックを実行する
if [ -e "$PROJECT_PATH/Build" ]; then
		# rm ファイルやディレクトリを削除するコマンド
		# -r 指定したディレクトリ内のすべての要素を削除する
		# -f 削除確認を表示せずに削除し、存在しないファイルに対してエラーを表示しない
    rm -rf "$PROJECT_PATH/Build"
fi

# プロジェクト更新
cd $PROJECT_PATH
git pull リポジトリのURL

# エラー時処理
# $? 直前に実行されたコマンドの終了ステータス
# -eq 比較演算子 == と同じ意味
if [ $? -eq 1 ]; then
    echo "プロジェクトの更新に失敗しました"
    exit 1
fi

UnityBuild部分

UnityCLIビルドを行い、失敗時にはログを保存しコンソールに出力する

# Unityビルドコマンドを実行する
# Macの場合は実行ファイル内の指定デプロイまで指定する必要がある
"$UNITY_EDITOR_PATH$UNITY_VERSION/Unity.app/Contents/MacOS/Unity" -batchmode -quit -projectPath "$PROJECT_PATH" -executeMethod "BuildCommand.Build" -logfile "$LOG_FILE_PATH" -platform "Mac" -devmode true -outputPath "$PROJECT_PATH/Build"
if [ $? -eq 1 ]; then
    cat "./log/TeamC.log"
    exit 1
fi

Macの場合には対象のCPUを設定する必要がある

AppleSilicon、Intelチップ、両対応が選ぶことが出来る

C#ビルドスクリプト(長いのでトグルに)
using UnityEditor;
using UnityEngine;
using System.Linq;

public class BuildCommand
{
    [MenuItem("Assets/Build Application")]
    public static void Build()
    {
        //プラットフォーム、オプション
        var isDevelopment = true;
        var platform = BuildTarget.StandaloneWindows;

        // 出力名とか
        var exeName = PlayerSettings.productName;
        var ext = ".exe";
        string outpath = default;

        // ビルド対象シーンリスト
        var scenes = EditorBuildSettings.scenes
            .Where(scene => scene.enabled)
            .Select(scene => scene.path)
            .ToArray();

        // コマンドライン引数をパース
        // 他の環境は今回は書かない
        var args = System.Environment.GetCommandLineArgs();
        for (var i = 0; i < args.Length; i++)
        {
            switch (args[i])
            {
                case "-projectPath":
                    outpath = args[i + 1] + "\\Build";
                    break;
                case "-devmode":
                    isDevelopment = args[i + 1] == "true";
                    break;
                case "-platform":
                    switch(args[i + 1])
                    {
                        case "Mac":
                            platform = BuildTarget.StandaloneOSX;
                            ext = ".app";
                            // Macの場合は対象CPUアーキテクチャを設定する
                            // 今回はAppleSiliconとIntelチップ両対応
                            PlayerSettings.SetArchitecture(BuildTargetGroup.Standalone, 2);
                            break;
                    }
                    break;
            }
        }

        //ビルドオプションの成型
        var option = new BuildPlayerOptions
        {
            scenes = scenes,
            locationPathName = outpath + "\\" + exeName + ext
        };
        
        if (isDevelopment)
        {
            //optionsはビットフラグなので、|で追加していくことができる
            option.options = BuildOptions.Development | BuildOptions.AllowDebugging;
        }
        option.target = platform; //ビルドターゲットを設定. 今回はWin64

        // 実行
        var report = BuildPipeline.BuildPlayer(option);

        // 結果出力
        if (report.summary.result == UnityEditor.Build.Reporting.BuildResult.Succeeded)
        {
            Debug.Log("BUILD SUCCESS");
            EditorApplication.Exit(0);
        }
        else
        {
            Debug.LogError("BUILD FAILED");

            foreach(var step in report.steps)
            {
                Debug.Log(step.ToString());
            }

            Debug.LogError("Error Count: " + report.summary.totalErrors);
            EditorApplication.Exit(1);
        }
    }
}

Build成果物のGoogleDrive配置

# プロジェクトフォルダに移動
cd "$PROJECT_PATH"

# ビルドファイルを圧縮
# zipを直にGoogleDriveへ配置できなかったので、圧縮のみ
zip -r MacBuild.zip Build/

if [ $? -eq 1 ]; then
    exit 1
fi

# Google Driveへ移動
mv "$PROJECT_PATH/MacBuild.zip" "$EXPORT_PATH"

# Discordへ通知するGASを実行する
curl -f "$GAS_URL"

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?