Unity Switch Platformでどんな処理が行われてるのかgit使って観測してみた
PC, Mac & Linux StandaloneやiOS,Android,WebGLなどなど
様々なプラットフォームに対応しているUnity。
プラットフォームを簡単に切り替えられる機能Switch Platformがやたらと時間がかかる。裏で何がおこっているのかgit使って観測した。そこでわかったことについてまとめる。gitignoreが絡んできて少しややこしいのでgitignoreについてはこちらに記事化
そもそも使用中のプラットフォームの情報を保存している場所ってどこ?
Library/EditorUserBuildSettings.asset
ここに保存されているらしい。バイナリデータなので、差分をとったり、中を覗いたりはできない。Library/以下は基本的にgit追跡されていない。
しかしビルドセッティングは
ProjectSettings/ProjectSettings.asset
ここに保存されている。
(WebGLならば例えばwebGLCompressionFormat等の情報など)
こちらのファイルは基本的にgit追跡されているのでややこしい。
実験
Switch Platformで起きていることをGit目線で追跡してみた。
例として、画像と音声を利用したWebGLビルドで生成したノベルゲーム
こちらはpngなどの画像と試験用に音声wav,mp3,oggなど追加した総容量50Mbyte程度のアプリ。検討用ブランチでCleanな状態にしたあと、Switch Platformしてどんな変化があるのかを観測する。
※gitignoreはGithubから生成したUnityテンプレもの
※実験のため↑のgitignoreから/Library/を外した
※環境はWin10+Unity 2019.4.22f1 (64-bit)
WebGL->Androidへ変換した差分ファイルリスト結果 ※大量にあるので一部省略しています。
$ git status
On branch build-sw
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: Library/ArtifactDB
modified: Library/CurrentLayout-default.dwlt
deleted: Library/EditorInstance.json
modified: Library/EditorUserBuildSettings.asset
modified: Library/SceneVisibilityState.asset
modified: Library/ScriptAssemblies/Assembly-CSharp-Editor.dll
modified: Library/ScriptAssemblies/Assembly-CSharp.dll
modified: Library/ScriptAssemblies/Elringus.Naninovel.Editor.dll
modified: Library/ScriptAssemblies/Elringus.Naninovel.Runtime.dll
modified: Library/ScriptAssemblies/UniRx.Async.dll
modified: Library/ScriptAssemblies/Unity.CollabProxy.Editor.dll
modified: Library/ScriptAssemblies/Unity.Rider.Editor.dll
modified: Library/ScriptAssemblies/Unity.Sysroot.Linux_x86_64.dll
modified: Library/ScriptAssemblies/Unity.SysrootPackage.Editor.dll
modified: Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll
modified: Library/ScriptAssemblies/Unity.TextMeshPro.dll
modified: Library/ScriptAssemblies/Unity.Timeline.Editor.dll
modified: Library/ScriptAssemblies/Unity.Timeline.dll
modified: Library/ScriptAssemblies/Unity.Toolchain.Win-x86_64-Linux-x86_64.dll
modified: Library/ScriptAssemblies/Unity.VSCode.Editor.dll
modified: Library/ScriptAssemblies/UnityEditor.TestRunner.dll
modified: Library/ScriptAssemblies/UnityEditor.UI.dll
modified: Library/ScriptAssemblies/UnityEngine.TestRunner.dll
modified: Library/ScriptAssemblies/UnityEngine.UI.dll
modified: Library/ShaderCache/EditorEncounteredVariants
modified: Library/SourceAssetDB
modified: Library/StateCache/Hierarchy/4c969a-mainStage.json
modified: Library/shadercompiler-UnityShaderCompiler.exe0.log
Untracked files:
(use "git add <file>..." to include in what will be committed)
Library/Artifacts/たくさん
Library/LastSceneManagerSetup.txt
Library/ShaderCache/たくさん.bin
Library/expandedItems
意外なことにAssets以下のResourceファイルには差分がなかった。
少し調べた感じ、音声や画像のフォーマットに変化があると予想していたが…。ちょっと実験用プロジェクトが小規模すぎたのかも。プラットフォームの設定の問題?
この結果を見ると、開発者がgitignoreしてるLibray/以下のデータに大きく影響があるものといえる。
基本的にgit cloneしてきた新規UnityプロジェクトにはPlatform設定の情報はない
※gitignoreでLibraryを設定している場合
何も考えずにcloneしてきたプロジェクトをそのまま開くとUnity Defaultのプラットフォーム「PC, Mac & Linux Standalone」で起動されてしまう。例えばWebGL向けに作成されたプロジェクトだった場合、再度WebGL向けにSwitch Platformする羽目になり、倍の時間がかかってしまう。
Switch Platformはプロジェクトが大きいほど切り替えに時間を要する
プロジェクトの規模が大きければ大きいほど変換の時間は長くなる。でかいものだと30分~1時間コースらしい。
そのためcloneしてきたプロジェクトを開くときからプラットフォームを意識して起動する必要がある。
プラットフォームを指定してUnityを起動する方法
例えばWebGLプラットフォームとして起動したい場合
・方法1
UnityHubから指定(確認バージョン2.3.2.0)
UnityHubでプロジェクトを指定して開くときに右側のターゲット欄
"使用中のプラットフォーム"から"WebGL"を選択することでOK
・方法2
UnityEditor.exeにオプション指定してコマンドプロンプトから起動
※Pathは適宜読み替えてください。
C:>\path\to\UnityEditor\2019.4.22f1\Editor\Unity.exe -buildTarget webgl -projectPath \path\to\project
-buildTarget 選択可能なオプション文字列は
Standalone, Win, Win64, OSXUniversal, Linux64, iOS, Android, WebGL, XboxOne, PS4, WindowsStoreApps, Switch, tvOS
-projectPath は現在の開きたいUnityプロジェクトがある場所を指定
どちらの方法でもOK
参考リンク
https://docs.unity3d.com/ja/current/Manual/CommandLineArguments.html
https://www.shibuya24.info/entry/2015/08/05/120000