見出し画像

【cluster】アバターと当たり判定の話

はい、美坂です。
この記事はCluster Creator Kit Advent Calendar 2020
9日目の記事になります。詳細はこちらから

さて、Cluster Creator Kitに関連する話題……という事ですが、
参加者リストを見た感じ、とても技術に強そうな方々が揃っていますので、
実用的・有用なお話はきっと他の皆さんがしてくださるはず。たぶん。

そこで私はちょっと地味めな知見、当たり判定周りについて
ゆるい感じに解説?していこうと思います。

はじめに

clusterではアバターにVRM形式が採用されていて
それぞれの好み・性癖に合わせて多種多様なアバターが使用できます。

また、REALITYとの連携で手軽にカスタムアバターを製作可能ですし、
モデリング技術があれば更に自由自在にカスタマイズできます。
当然アバターのサイズも自由自在です。
(とはいえ限度はきっとあります……あるのかな?)

画像1

あとclusterでは何故か人類以外、特に鳥類のアバター
多く生息しているようです。多様性がすごい。

そのような自由な環境ですので、私のようなとても小さい
低身長女児アバターを使う特殊な性癖持ちのユーザーも現れてしまいます。

アバターの当たり判定

見た目の大きさはアバターによって様々です。
ところでcluster上での当たり判定は大きさの影響を受けるのでしょうか?

調べてみましょう!

このあたりの処理は、UnityでCluster Creator Kitを設定した
プロジェクトを再生したときに追加配置される
"Character Controller" コンポーネントの値から推測することができます。

画像2

当たり判定は高さ1m、半径0.2mのカプセル型っぽい?
更にこれらの値を参考に実際にワールドにColliderを設置して
色々チェックしました。これは詳細を省きますが結論だけ言うと
結果としては以下のような感じです。

幅0.4m以下の隙間は通過できない
高さ1m以下の隙間は通過できない
 ※高さはもうちょっと余裕がないと挙動が怪しいです。
段差は0.4mぐらいまで超えられる
ジャンプすると1.1mぐらいまで登れる
 ※急にアップデートが来た!
  この値はSet Jump Height Rate Player Gimmickに依存して可変です。

なおこの当たり判定はアバターサイズによらず一定値です。たぶん。
※非公式かつ雑な測定なので、この値は参考程度に扱ってくださいね!

低身長アバターで見えてくる問題

当たり判定はアバターの大きさに影響を受けないようでした。
しかし判りやすく影響を受けてしまう要素もあります。

"アイテムを持った時の高さ" です。
掴めるアイテムを持つとプレイヤーの手の位置に固定されます。
VR以外では持った時に手を大体肩の高さぐらいに上げた
ポーズをとるようです。

主なアバターごとの身長と手の高さは大体このような感じ。
(PCデスクトップモードで雑に測定、値は参考程度に……)

画像3

デフォルトアバター最大の"黄色さんアバター"と
最小の"箱アバター"間でも結構な差があります。
ちなみに私のアバターでは高さ0.86mしかありません。
更にVRモードではもっと低い位置になってしまうはず。

この高さの違い、実はゲームワールドなどでは結構影響が大きく、
例えばプレイヤーが魔法の杖とか銃とかの "弾が出るタイプ" の
Item使用時には弾のSpawn座標の高さに差が出てきます。

特に低身長アバターでは座標が低すぎて
発砲した瞬間に弾が地面または壁のColliderに当たってしまう
という事案が起こったりしてしまいます。

画像5

なんか私固有のおま環ぽい問題な気もしないでもないですが……

ちなみにこの現象、VR環境だと

画像7

腕を大きく上げて撃つ、とか
妙に高い構えで銃を撃つ、とか
カラダに負荷がかかるムーブを強いることで回避できます。
おじさんにはキツイ感じのムーブですが、
逆に意図して続けると健康には良いかもしれません。

まあ、素直に普通サイズのアバターに着替えれば
即解決する問題ではあります。はい。

当たり判定とLayer

さて、このような意図しない場所との当たり判定を避けるには
まあ単純にColliderを小さくする、などで解決できはするんですが、

弾のColliderを小さくすると今度はすり抜けが起きたり
的自体に当たりづらくなったり……

的に当てる系のゲームとかで見た目より当たりづらい判定だと、
ゲーム体験に微妙なストレスを感じてしまったりとかしません?

余談ですが、
ゲームの本質的な部分以外でのストレス要素をできるだけ排除していく
っていうのはゲームの手触りを良くするのに重要かと思うのです。
なんとなく。

とはいえ床・壁のColliderを調整すると、
今度はプレイヤーの移動時に不自然な挙動が出てしまったりして……

この辺の調整は地味に難しいです。
ここで少しでも楽に調整するための工夫。

プレイヤーの移動制限用のColliderと
ゲーム内アイテム(的や弾)用のColliderを別Layerに分ける

移動制限用のColliderとゲーム用のCollider、別に設定できると
調整がかなりやりやすくなります。

clusterでの当たり判定はLayerごとに以下のような設定となっていて
Layerにより相互に当たり判定のあるもの、ないものが分けられています。

画像4

個人的にはプレイヤー用のColliderを "Default" Layer
ゲーム内オブジェクトとそのColliderを "VenueLayer1" Layer
にするのがオススメ。

この2つのLayerの組み合わせ、それぞれ
"同じLayer同士の判定はある" けど
"別Layerとの判定はない" 設定なので使いやすいです。

VenueLayer0とか2とかは条件が微妙に違っているので
用途に合わせて使い分けると更に便利そうです。

Layer分けを使った例

拙作「ほーむでぃふぇんす」では撃つターゲットが
プレイヤーの斜め下方向に配置されているため
アバターの身長によらず地面や柵に弾が当たりやすく、
そのままではゲーム進行が大きく妨げられる感じになってしまいます。
無駄なストレス要素です。

画像7

そこで図のようにLayerを分けることで、弾と地面との当たり判定を無くし
割と手間を掛けずに不自然な当たり判定を回避しています。
ゲームの快適性も向上しています。してるかな……?

まとめ

この手法、ゲームの仕様によっては使えない、みたいな場合も
多々ありそうですが、こんな手もあるよ!
程度の参考として役立てていただけたら幸いです。

以上、当たり判定とかのお話でした。
明日は10日目、るーしっどさんの記事です!

サポートは主においしそうな or 変な食べ物に費やされます。 サポートしてくれるととても嬉しいですが、お金はまず自分自身を優先して使ってくださいね。