【Unity】CloudBuildでうまくいかない場合対応
概要
以下の条件において、UnityCloudBuildでビルドしたものが上手く動かない場合の対応方法。
条件
- windows環境で開発していて
- Resourcesフォルダ下のファイル名に濁点/半濁点がある
上記の条件をみたすとき、Resources.Load
, Resources.LoadAsync
に失敗してコケる。
ナンデ?
UnityCloudBuildのログを見ると、ファイル名がNFDになっていることがわかる。このためにファイルが見つからずにロードに失敗する。
5871: [Unity] Updating Assets/Resources/AbilityEffects/ヤンシャオグイ.asset - GUID: 407fd122216a3674f90de5822614aed0...
テキストエディタとかにコピペしてみよう。
対応
ロードする際のパスをNFDに変換してやれば良い。
1.シンボル定義
処理を分けるため、CloudBuildの設定でシンボルを定義する。
2.ロード処理時にstring.Normalize
public T Load(string path) { #if CLOUD_BUILD path = path.Normalize(System.Text.NormalizationForm.FormD); #endif return Resources.Load<T>(path); }
そもそもファイル名に日本語を使わないのが無難だけど、なんだかなあ。
+
@_enu cloudBuildもう一つ心当たりがあって、日本語のMonoBehaviourかScriptableObjectのクラスをつくると、ファイル名はNFDになるけどクラス名はそのままなので、ファイル名=クラス名のルールを違反して死ぬ。
— enu (@_enu) 2016年12月19日