エンジニアが書いてるようなブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら

Unrecognized assets cannot be included in AssetBundles を乗り越えた

こんにちは、久々の投稿になります。

いつの時代もエンジニアは思いもしないバグに悩まされるものです。今日紹介するエラーも「まさか」という結果となっています。なぜそんなことになったのか。それを追求するのは難しいが、それもエンジニアの性なのかもしれません。

何が起きたのか。

Unity でアセットバンドルビルドを行っていたら、以下のエラーが起きました。このエラーが起きると、アセットバンドルに指定のファイルが圧縮されないことになり、実際にゲーム上で読み込んだ時に「無い」といわれます。

Unrecognized assets cannot be included in AssetBundles ....prefab

原因候補1 アセットのファイル名が間違っている。

www.scriptlife.jp


上のサイトにでは、アセットのファイル名が間違っていたようです。(byte -> bytes だったよう)

エラー文は「アセットが認識されない」なので、そもそもファイル名が間違うとエラが起きるようです。

しかし、今回は prefab であり、間違っているとも思えません。

原因候補2 アセットの形式が対応していない。

mochimoffu.hateblo.jp

こちらの記事では、.lua が使えずエラーとなっていたと書かれています。

また、ファイルの位置によってもエラーが出ることもあるそうです。

ですが、今回は prefab ファイルこれが使えないわけがないと思います。

原因候補3 アセットが壊れている?

結局調べてもよくわかりませんでした。エンジニアになってわけもわからないエラーに遭遇することはよくあります。こんな時は、実際のファイルをじっくり見るに限ります。そこで、Unity でファイルをじっくり見てみました。

f:id:tkymx83:20180507231531p:plain

画像を見てわかると思いますが、どう考えてもファイルのアイコンが違います。しかも、ファイルのInspectorが編集できない形となっており、open をしようとすると以下のエラーが発生していました。

Unable to open Assets/Resources/....prefab: Check external application preferences.

ファイルをReImport することで、正常な状態に戻すことができました。

結論

結論として、prefab が壊れていました。以下なんで壊れたのかを想像してみました。

壊れた原因としてインポートに失敗した可能性が考えられます。理由は2つあります。一つ目はインポート中にUnity の強制終了をよく行っていたからです。強制終了によって、インポートされた情報がUnity 側で壊れてしまっていたのかもしれません。二つ目は、別にインストールしたUnity では正常に表示されていたからです。そのため、該当の Unity のインポート時に失敗した可能性があります。

以上、同じエラーに苦しんでいる人がいたら参考にしてください。