Mod からアセットストアのアニメーションを使う ― 名前で参照する3段階の解決

Unity 独自形式のアニメーションは Mod フォルダに置けません。それでも購入したアニメーション素材を活かすために作った、名前で参照する仕組みを説明します。

/ 約 1,340 字

  • Unity
  • Mod
  • アニメーション

ゲームのデータを Mod として外に出す設計では、 実行時に直接読み込めるフォーマットしか使えません。 3D モデルは glTF にすれば解決しますが、アニメーションには別の問題がありました。

問題:良い素材ほど Unity 形式で売られている

アセットストアで売られているアニメーション素材は、 多くが FBX として提供され、Unity に取り込むと Unity 独自のアニメーション形式に 変換されます。この独自形式は、エディタの変換機能がないと読めません。 つまり、Mod フォルダに置いても実行時には使えないのです。

glTF に変換し直して Mod に入れる方法もありますが、 素材の数が増えるほど手間が膨れ上がります。何百ものモーションを一つずつ 変換して確認するのは現実的ではありません。

解決策:本体に同梱して、Mod からは名前で指す

そこで、アニメーションに限っては考え方を変えました。

  • アニメーションの実体はゲーム本体に同梱する
  • Mod のデータには、アニメーションの名前だけを書く
  • 実行時に、その名前から実体を探し出す

ゲーム本体に同梱すれば、エディタで変換済みの状態でビルドに含まれるので、 実行時にも問題なく使えます。Mod 側は名前を書くだけなので、 フォーマットの制約に引っかかりません。

たとえば技のデータに humanoid_run と書いておけば、 実行時にそれに対応する走りのアニメーションが使われます。

名前から実体を探す3段階

名前から実体を探す処理は、次の順番で試すようにしています。

  1. Mod が持っている対応表を探す。Mod は、名前と実体の場所を対応させた表を 持つことができます。ここで見つかれば、その場所から読み込みます
  2. 名前をそのまま場所として試す。対応表に無ければ、名前そのものを 保存場所として探します
  3. 決まったフォルダの下を試す。それでも見つからなければ、 アニメーション用のフォルダの下から探します

最初に見つかったものを使い、どこにも無ければ「見つからなかった」として扱います。 見つからなかったときにゲームが止まらないようにするのも重要で、 その場合はアニメーションなしで動作を続けるようにしています。

この順番にしたのは、Mod 作者の自由度と手軽さを両立させたかったからです。 こだわりたい人は対応表を書いて細かく制御できますし、 手軽に済ませたい人は、本体に入っているアニメーションの名前を書くだけで使えます。

目録を用意する

本体に同梱したアニメーションは、目録としてまとめています。 Mod 作者が「どんなアニメーションが使えるのか」を知る手段が必要だからです。 名前で参照する仕組みは、使える名前の一覧が無ければ機能しません。

目録にはカテゴリも持たせて、人型用、動物用、共通のものに分けています。 人型のアニメーションは、人型のボーン構造を持つモデルなら 体格が違っても共有できるので、ここが一番よく使われることになります。

Mod 作者が自前のアニメーションを使いたい場合

本体にないアニメーションを使いたい Mod 作者のために、 glTF のファイルに含まれたアニメーションを使う道も残しています。 glTF はモデルとアニメーションを一緒に持てるので、Blender などで作った モーションを書き出して Mod に同梱すれば、そのまま使えます。

本体同梱の素材を名前で使うか、自前の glTF を使うか。 この2つの経路を用意することで、Mod の制約を守りながら、 市販素材の資産も活かせる形になりました。

← Logs 一覧へ