はじめに
本日は掲題の通り、Unity Cloud Buildで盛大にハマった事の、私なりの解決法をご紹介。
Unity Cloud BuildでiOS用にbuildすると、以下の様なエラーが発生してbuildが通りません。(該当箇所だけ抜粋しています)
以下は、UK_NumberUtilityというクラスが見当たらないとなっているのですが、Unity Editor上にもMonoDevelop上もちゃんとあるし、ローカルだと正常に実行できているからさっぱり原因が分からず詰んでしまいました。
19: [Unity] Assets/PatapataUnon/Scripts/Behavior/BehaviourUtil.cs(126,10): error CS0103: The name `UK_NumberUtility' does not exist in the current context
グーグル先生にも色々お尋ねしたのですが、ちゃんとした解決法が載っておらず…。
フォルダ名にLibraryを使っているのが原因
色々試行錯誤した結果は後述するとして、結論から先に書くとどうもフォルダ名にLibraryを使っているのが問題っぽいです。
該当するUK_NumberUtilityは以下のキャプチャの用に、「Scripts/Library/UK_NumberUtility」に配置していました。
(キャプチャは試行錯誤の過程でファイル名をNumberUtilitysにリネームしてます)
ここで、LibraryをLibrarysにリネームし、buildすると正常にbuildが通りました。
以下、試行錯誤でやったこと
単純に、愚痴りたいと言う意味で書いています。
どれも効果がなかったので、上述のLibraryをリネームすればOKだと思います。
呼び出しているClassをリネームして.meta周りで怒られた事があったので、別ファイルを生成してbuild
ClassをMonoDevelop上で、リネームした際にUnityEditorで何かアラートが出たことがあります(.metaがどうたら…覚えてない)。
なので、この際に.meta情報が欠損して、該当クラスのロードに失敗したかと思い、以下を実施。
- 前のファイルは残したまま(コメントアウトだけした)
- 別なファイル・クラスを生成して、メソッドだけコピー
結果 : エラー
呼び出し先のファイルを別ファイルにうつしてbuild
結果 : エラー
Scriptの呼び出し順を変更してみる
該当するクラスは、以下の用にMonoBehaviorを継承していないですし、呼び出し順とかは問題無いかもしれませんが、これもやってみました。
以下のExecution Orderを以下に設定
かなり優先度を上げたロードを実施するようにした。
結果 : エラー
結論
フォルダの階層を下ったとしても、予約されるものは使わないでおくに越したことないですね。
過去のディレクトリ構成の記事も一緒に更新しておきました。