Unity2020で追加されたPresetの新機能紹介

はじめに

こんにちは。KLab株式会社クリエイティブ部TA(テクニカルアーティスト)グループのmasahideと申します。

去年のKLab Creative Advent Calendar 2019では、携帯端末ごとの描画スペックベンチマーク Android編というタイトルでブログを書かせていただきました。

今回はUnity2018時点でのPresetと、Unity2020にて追加されたPresetの新機能についてお話ししたいと思います。

Presetとは

Presetはモデル/テクスチャ/コンポーネントなど、各種アセットデータやコンポーネントの設定の再利用をサポートする機能です。

Preset導入前の環境でアセットの設定を書き換えるためには、Asset Postprocessorという機能を使用していました。

Asset Postprocessorを使用するためにはスクリプトを書く必要があり、プログラマー以外気軽に扱うことは出来ない状況だったのですが、Presetが導入されたことによってデザイナーでも気軽に「複数の設定項目に対して一回で設定」することが出来るようになりました。

PresetはUnity2018にて実装された比較的新しい機能ですが、Unity2018プロジェクトへアップデートした直後のプロジェクトでは当初は下記の理由から使用を敬遠しておりました。

  • 対応していないプロパティが多かった。
  • 特定のImporterに対応していなかった。
  • スクリプト経由じゃないと出来ない操作が多かった。

しかし、ここ数年多くの更新が入り徐々に弊社のアセットワークフローにおいても扱いやすい機能が充実してきており、今ではゲームアプリ開発・運用において欠かせない機能になっています。

Presetの使用方法について詳しく知りたい方は、こちらの資料をご確認ください。

Preset Manager

Preset Managerは、各アセットの初回インポート時に指定したPresetを割り当てる機能です。

Preset同様Unity2018にて実装された機能で、当初は下記のような点から少し使いにくい機能でした。

  1. アセットの種類単位でしかPresetを指定出来なかった。
  2. フォルダー構成を考慮に入れたPreset指定が出来なかった。
  3. 特定のImporterに対応していなかった(preset側が対応していなかったため)。

Preset Managerの使用方法について詳しく知りたい方はこちらの資料をご確認ください。

PresetとPreset Managerの便利なところ

Presetは多くのリソースデータに対して特定の設定ルールを適用したい時にとても便利な機能です。

Unityではリソースデータ一つ一つ対して個別の設定をすることが可能ですが、

KLabにおいては各アセットに対してのデータ設定ルールを事前に決めておき、そのルールに従ったアセットを作成・運用しています。

そのためアセットごとに個別で設定を行う、ということ自体があまり多くはありません。

KLab以外でも、「特定フォルダー内のモデルやテクスチャが全て同じ設定になっている」というUnityプロジェクトも多いのではないでしょうか。

Unityのリソースデータはどれも設定出来る項目が多いため、特に下記の2点がよく運用上の課題として挙げられます。

  1. ルール通りの設定をするだけでも面倒で時間がかかる。
  2. 手作業による設定ミスのリスクがある。

1. については設定ルールごとにPresetを作成しておくことによって、Presetを適用するだけで済むため、設定作業がとても楽になります。
2. においてもPreset ManagerでデフォルトのPresetを設定することによって、初回インポート時に設定したPresetが自動的に適用されるようになるため、Presetを手動で割り当てる必要がなくなり、さらに作業のコストが削減されます。

KLabでのPreset使用事例

PresetはUnity Editor上で使用しても大変便利な機能ですが、ツールに組み込むことでリソースデータの設定をさらに楽にすることが出来ます。

KLabではAsset PostprocessorとPresetを組み合わせることで、フォルダー構成や命名規則を元に各種リソースデータに対して自動でPresetを適用するツールを作成・運用しています

このツールを使用することにより、下記2点の課題をカバーしています。

  1. Preset Manager:アセットの種類単位でしかデフォルトPresetを指定出来ない。
  2. Preset:適用するプロパティを選択出来ない。

ツール専用のアセットデータにて各種情報を管理

適用するPresetや対象になるアセットデータを特定するための各種情報を、下記のような専用アセットで管理しています。

赤:対象ディレクトリ

緑:ファイル名に対する正規表現

黄:割り当てるPreset

青:Presetで適用するプロパティ

各種情報を保持したアセット群を一元管理するウィンドウ

1.で紹介した、各種情報を保持したアセット群をツールのMain Windowで一元管理しており、並べ替え可能なリスト(Reorderable List)を使用することで、適用するPresetの優先度を設定することが出来るようにしています。

優先度の設定を行えるようにしたことで、複数の検索条件を満たしたアセットがインポートされた際、任意のPresetを割り当てることが可能になりました。

image

上記のようなツールを使用し、手作業でデータ設定をする回数が減ることによって前述した課題を解決することが出来ました。

Unity2020でのPresetとPreset Managerの更新点

Presetで適用するプロパティを選択出来るようになった。

Unity2020以前のPresetは全てのプロパティに対して値を適用することしか出来ませんでしたが、Unity2020からは適用するプロパティを選択出来るようになりました。

全てのプロパティに対してPresetに書き込まれている値を適用するUnity2018の仕様では、書き換えたくないプロパティにも適用するしかありませんでした。

そのため初回インポート時に一律して設定するには優れた機能ですが、
インポート済みの部分的なプロパティの設定という観点では使うことがなかなか難しい機能でした。

しかし適用するプロパティを指定出来るようになったため、既にインポートされているアセットに対してもPresetを適用しやすくなりました

上記画像のように適用したくないプロパティを右クリック ⇒ Exclude Propertyを選択することで、適用するプロパティから除外することが出来ます。

Preset Managerで1種類のアセットに対して、複数のPresetを選択出来るようになった。

Unity2018時点では、1種類のアセットに対してデフォルトのPresetを1種類しか選択出来ない仕様でした。

Unity2020ではその点が改善されていて、1種類のアセットに対して複数のPresetを割り当てることが可能になりました。

さらに正規表現に対応したフィルター機能が追加されています。

このフィルター機能の追加により、フォルダー構成やファイルの命名規則を元にしたPresetの指定が可能になりました。

参考資料:

Unity2020.1.0リリースノート(英語)

まとめ

今回PresetとPreset Managerに関して複数の機能をご紹介させていただきましたが、弊社で扱うにあたり下記2点の理由から使用を敬遠しておりました。

  1. アセットの種類単位でしかデフォルトのPresetを指定出来ない。
  2. 適用するプロパティを選択出来なかった。

Unity2020の追加実装では上記2点がカバーされているため、今まで以上に使いやすい機能になったと思います。

PresetはUnityに実装されている機能の中では比較的新しい機能のため、現在も新機能追加や不具合修正が活発に行われております。

今後もPresetの更新情報には注目してゆきたいと思います。

最後までご覧いただきありがとうございました。

このブログについて

KLabのクリエイターがゲームを制作・運営で培った技術やノウハウを発信します。

関連記事

このブログについて

KLabのクリエイターがゲームを制作・運営で培った技術やノウハウを発信します。