マテリアルが複数指定されたオブジェクトをUnityに読み込むと,マテリアルをアサインしたリストを自動的に生成してくれる。
で,Blenderで作成したのならリストの順序はマテリアルインデックスの順序…と勝手に思い込んでいた。リストの順序はメッシュの順序から決められている。
リストの順序が変わるとどう困るか
先日,オブジェクトを差し替えた時にマテリアルの並びがシャッフルされ,意図しない順序にアサインされたため小一時間ほど理由がわからず困っていた。
編集するたびにリストの順序を変えられてしまっては,インポートのたびにマテリアルをアサインし直さなければならない。リストの順序に実装が関わっていればなお面倒。
Blenderでの対策
普段,メッシュの順序を気にしながら編集することはないと思う(オブジェクトの結合ではベースになるオブジェクトのメッシュが前列に来るぐらいはわかるが)。
マテリアルインデックスの順で管理するには,編集モードで「要素をソート」を使用する。順番が不確定なら書き出すたびにソートしてやる必要があるが,それさえ守ればマテリアルインデックスの順できっちり管理することができる。
メッシュの順序を実装に使用する場合,マテリアルの順序は好きに管理できないという疑問点は残るが,とりあえず今はそういうケースは無いのでこれで良しとする。