2015年5月25日月曜日

[Unity3d] Unityでエクスポート/インポートしたらシェーダーのエラーでオブジェクトがピンク色になった→解決メモ。

Unityで別のプロジェクトからオブジェクト(プレハブ)をエクスポートして
インポートしたらエラーが発生しました。

直ったのでメモしておきます。

まずインポート時に
「The imported type xx is defined multiple times」といったエラーがでました。
これはイメージエフェクトのソースがインポートにより重複したことが原因のようで
該当(重複した一方の)ソースをプロジェクトから削除したら直りました。

上記エラーが直ったら、今度はシェーダーでエラーがでていました。
このエラーのせいでオブジェクトがピンク色で表示されてしまいました。

- 未サポートのシェーダー( エラーのあるシェーダーなどコンパイルできないシェーダー ) は単純にデフォルトシェーダーに置き換えられ、画面にはピンク色で出力されます。 -

とのこと(公式ドキュメントより)。

シェーダーのエラーは参照している拡張子「.cg」のファイルが見つからないという理由。
たしかにエクスポートの内容には参照している「.cg」のファイルが含まれていませんでした。
エクスポート時の参照関係で「.cg」ファイルがうまく引っ張ってこれてないのかなーと思ったり。

なのでインポート元のプロジェクトから「.cg」ファイルを手作業で持ってきてみたら
シェーダーのエラーが無くなりました。なお、この時シェーダーをリコンパイルするためにリインポートを行っています。

以上でシェーダがちゃんと認識されてオブジェクトのピンク色も直りました。