見出し画像

Now in REALITY Tech #76 帽子に自由を!、アクセサリ位置調整機能で運用を楽にするために工夫したところ

REALITY Unityチーム かとうです。
今回は、今年の2月末にリリースされた新機能アクセサリ位置調整機能を作るにあたって運用をできるだけ、効率的にするため工夫した点をTipsとしていくつか書かせてもらおうと思います。
※本記事では、アバターに装着する服やアクセサリのことをアイテムと表現してます。

開発経緯

スライダーを動かしてアイテムの装着位置を調整できる

従来帽子のアイテムは髪のメッシュが帽子から突き抜けて見えてしまうことを出来るだけ防ぐため、ある程度頭から余裕を持たせた作りにする、頭の上にちょんと乗っかるような感じにするなどという形で実装していて、頭にフィットするような帽子を実装する場合は、ウィッグとして髪形ごと変わるような形で実装するなどしていました。
そんな中、REALITYのアバターショップで新規に帽子アイテムを販売したいという需要が生じまして、それに合わせてアイテムの装着位置やサイズを調整する機能を開発し、なるべくデザイン上の制限を受けずに帽子を実装できるようにしようということになり、開発がスタートしました。
ちなみに、まずは帽子で使われましたが、機能自体は他のアイテムとの干渉を避けるためにユーザーが装着位置を任意に変更できる機能との位置付けで、アクセサリ全般に対応した機能になっています。
本記事公開時点だと帽子ぐらいしか対応したものがないですが、帽子以外のアクセサリ位置調整機能対応アイテムも順次登場予定です。

Tips1:ScriptableObjectを活用してノンコーディングで対応アイテムを追加できるようにした

ボタン一つでマスタ書き出しできる!

特定のアイテムに対してのみ適用する機能である以上は、コード上で適応対象か否かの判別が必要になるわけですが、当然コード上にアイテム名を書いて判定するなどというようなのは運用上の無駄が大きすぎてNGなので、アクセサリ位置調整機能対応アイテムはノンコーディングで手軽に追加できる必要がありました。
これに対応するため、アクセサリ位置調整機能を適用するアイテム名一覧の情報をScriptableObjectとして保持して対応アイテムを追加したいときは、その一覧にアイテム名を追加すればOKという形にしました。
情報追加は、人力編集によるヒューマンエラーを避けるべく、特定のフォルダ内にTips2で紹介している調整幅制限用ScriptableObjectが存在しているかどうかをみて、存在している場合は対象となっている、アイテムを追加するという処理を、インスペクタ上のボタンから実行できるようにしています。

Tips2:アイテムごとに調整幅(項目)を制限できるようにした

スクリプタブルオブジェクトの設定で調整幅を制限

今回の開発では、アイテムが意図しない位置に装着されることを防ぐため、アイテムごとに調整値の幅を制限できることが必要とされました。
これには明らかにおかしな位置に装着されることで一見すると不具合が生じているような見た目になってしまうのを防ぐためです。
こちらの件も、Tips1のケース同様ScriptableObjectを利用する形になっていて、ScriptableObjectに調整可能な範囲設定を保持しておいて適用するという形でアイテムごとに調整幅を制限できるようにしました。
アーティストがUnityへのモデルの組み込みを行うタイミングで、このScriptableObjectを追加、設定してもらうという形です。

Tips3:自然なスケーリングを実現するため、スケーリングの原点をアーティスト側で設定できるようにしたした

調整したいものの親にPivotを置いておく

アイテムのスケールを変更した時の動作をなるべく直感的なものにするためアクセサリ位置調整機能対応のアイテムではモデルデータ(fbx)内のスケールの原点としたい位置にPivotという空オブジェクトを予め入れておいてもらい、それをスケーリングすることで大きさを調整するようにしています。
この理由ですが、例えば帽子の左端にスケーリングの中心点があるような場合だと、スケール値を大きくした場合右側ににゅっと動くように、スケールされてしまいます、そういった直感的に不自然なスケールになってしまうことを防ぐためです。
これにより、どんなモデルでもアーティストが意図した通りにスケーリングされる形になるので、実際に動かしてみたところイメージと違うという問題が発生し、それに個別対応したりするコストを回避することができます。
(Maya,MaxなどのDCCツールを直に扱ってないと、結構意識しにくいのですが3Dを扱う上で原点の考慮はとても大切ですよね!)

まとめ

REALITYは毎月ガチャやショップなどで大量のアイテムが出ていくので、新機能を追加する際は運用のことも考慮した上で、設計、実装を行う必要性がとても高いです。ちょっとした一手間的な内容でも、その一手間が必要なアイテムが100や、200となってくると、大きなコストになってしまうので、運用上の手間がなるべく増えないように工夫しているというようなお話でした!
運用を前提としたアバターシステム開発する人向けみたいな、かなりニッチ目な記事になってしまった感もありますが、この記事が読者様の開発の一助になれば幸いです。