Mod に FBX を入れられない理由 ― ランタイムで読めるフォーマットだけを許可する

Unity のアセットは、エディタが変換してくれるから使えているものが多くあります。実行中に読み込む Mod データでは何が使えて何が使えないのか、その線引きを整理しました。

/ 約 1,358 字

  • Unity
  • Mod
  • glTF
  • アセット

ゲームのデータをすべて Mod として外部フォルダに置く設計にしたところ、 最初にぶつかったのが「Unity で普段使っているファイルが、Mod では使えない」 という問題でした。この記事では、その理由と、何を許可して何を禁止したかを整理します。

Unity は裏で変換している

Unity のプロジェクトに FBX のモデルを入れると、そのまま使えるように見えます。 しかし実際には、エディタが FBX を読み込んで、Unity 内部で扱いやすい形式に 変換してから使っています。PSD の画像も同じで、エディタが裏で変換しています。

この変換を担当しているのがエディタ専用の仕組みで、 ビルドしたゲームの中には含まれていません。 ゲームを配布したあと、プレイヤーの端末で動いているゲームは、 FBX を読む方法を知らないのです。

Mod のデータは、プレイヤーの端末にある Mod フォルダに置かれ、 ゲームの実行中に読み込まれます。エディタは介在しません。 したがって、エディタによる変換を前提としたファイルは Mod では機能しません。

許可したフォーマット

そこで、Mod フォルダに置いてよいファイルを、 ゲームの実行中に直接読み込めるものだけに限定しました。

種類許可禁止
3D モデルglb / gltffbx / obj / blend
テクスチャpng / jpg / tga / bmppsd / exr
サウンドwav / ogg / mp3
モーションjson / glbanim
データjson

3D モデルには glTF を採用し、読み込みには glTFast というライブラリを使います。 glTF は実行時に読み込むことを前提に設計されたフォーマットで、 モデル・マテリアル・アニメーションを一つのファイルにまとめられます。 Mod 作者にとっても、Blender などの主要なツールから直接書き出せるので、 特別なツールを用意する必要がありません。

テクスチャは、Unity が標準で持っている画像読み込み機能で扱える形式に絞りました。 PSD はレイヤー情報を持った編集用の形式であり、 ゲームの実行時に読むものではないので対象外にしています。

ルールを明文化した理由

このルールは、仕様書に表として書いて明文化しました。 口約束にしておくと、いずれ誰かが FBX を Mod フォルダに入れてしまうからです。 しかも厄介なことに、エディタ上では問題なく動いてしまうのです。

エディタで動かしているときは、エディタの変換機能が働いているので、 FBX を読み込むコードも動いてしまいます。問題が表に出るのは、 ビルドして配布したゲームを動かしたときです。 開発中にはまったく気づけず、最後の最後で発覚する。 これは最も避けたい種類の不具合です。

だからこそ、フォーマットの制約を仕様として先に決め、 実行時のコードからはエディタ専用の機能を呼ばないというルールも あわせて定めています。コードの置き場所も、エディタ専用のものと 実行時に使うものとで明確に分けています。

それでも使いたいものがある

この制約で一番困ったのが、アニメーションです。 Unity のアセットストアで売られているアニメーション素材の多くは、 Unity 独自の形式で提供されています。これは Mod フォルダには置けません。

とはいえ、良質なアニメーション素材を使えないのは開発上の大きな損失です。 そこで、アニメーションに限ってはゲーム本体に同梱し、Mod からは名前で参照する という折衷案を採りました。この仕組みについては別の記事で詳しく書きます。

← Logs 一覧へ