
WSで等速度移動・ADで等角速度回転の乗り物を作る【clusterワールド制作】
こんにちは。VR-TRPGサークル「ぐだぐだぶとん」代表の逆凪です(いつもの)。
今回はclusterワールド制作で詰まった時に検索して出てくるような記事を目指して、一本記事を書いてみようと思う。
所々正確性を落として分かりやすくしていたり、筆者自身も分かっていない箇所があるが、物が出来れば良いよねという感覚で許して貰いたい。
今回いじるコンポーネント(検索用)
Ridable Item
Steer Item Trigger
Character Controller
Set Velocity Character Item Gimmick
Set Angular Velocity Character Item Gimmick
Item Logic
今回作る物
タイトルで示した通り、WSで等速度移動をしてADで等角速度回転をする乗り物を作る。
本当はclusterアバターと同じ動きをしてくれる乗り物が欲しかったが、無理そうなのでこのような仕様となった。
今回自分が作ったのは最新型車椅子をペンギン風に加工して布団までつけた超堕落装置「ぐだぐだくるまいす」。以下のワールドに置いてあるし、そろそろ無料公開する予定。
ガルペノさんのこの(↓)ワールドも多分同じように作られていると思う。
ギミックの組み方
はじめに
まずはInspectorの右上にある「Static」にチェックがついていないか確認して欲しい。ここにチェックがついていると虚空に乗る事になる。流石に大丈夫だと思うが...
筆者は共同制作の時、Grabbable Itemにする予定のモデルのStaticにチェックをつけて納品した奴のせいで長時間無駄に苦しんだ事がある。
y軸z軸の確認
それと、乗り物にするオブジェクトのy軸(緑)とz軸(青)がそれぞれ上と正面を向いているか確認しておいて欲しい。
ざっと纏めると以下の通り。
・Steer Item Triggerの注意
Keyの名前以外は同じ設定にして欲しい。
Seat LocalはSeat to Cameraにしたら意図した挙動にならなかった。
Triggerの説明
move/move2:WASDがどう入力されているかの二次元ベクトル。move2をわざわざ用意した理由は後で説明。
moving:WASDを押していると出る信号(signal)
・Character Controllerの注意
Character ControllerにはCapsule Colldierや重力の設定が埋め込まれている。
このCapsule Colliderが床を貫通した状態で設定されていると、実際に遊ぶ時に乗り物が宙を浮く現象が発生する。Character ControllerのCenter・Radius・Heightあたりを弄って調整しておくと良い。
今回作る物は重力の設定が必要なので特にいじっていないが、重力をなくしたい場合は自分で頑張って欲しい。
・Set Velocity Character Item GimmickとSet Angular Velocity Character Item Gimmick、Item Logicの解説
これ以降は別に見なくても良い。何をしているのか知りたい人向け。
前者は「WSで等速度移動する」為のギミック。後者は「ADで等角速度回転をする」為のギミック。Scale Factorを弄る事で速度を変える事ができる。
まずは後者(回転)の解説から。
これはVector2(2次元ベクトル)ではなくfloat(実数)を受け取るので、Vector2であるmoveを使う事はできない。しかし、move.xというように.xをつける事でmoveのX成分(ADの入力)のみを受け取る事ができる。
続いて前者(移動)の解説。
これはVector2(2次元ベクトル)を受け取るので、逆にmove.xのようなfloat(実数)を使う事はできない。しかし、Item Logicを使わずにそのままmoveをKeyに入れると問題が発生する。
AD入力した時に回転しながら移動してしまうのだ。
これを解決する為にItem Logicを使う。
move2(Vector2)とmoving(signal)を用意し、WASD入力が行われている時は、Item Logicが発動してmove2のx成分(move2.x)を0にしてくれる。
そうすると移動のxy成分は(0,move2.y)となり、AD入力しても移動しなくなった。
これでええんかと試している時に思ったが、これで良かった。
トリガーが瞬間なのか時間なのか、Item Logicがどのタイミングで適用されるか試してみないと分からないのもあって解決に時間がかかった。
結局こうなり、太字のKeyがギミックに適用されるという訳だ。
move=(move.x,move.y)
move2=(0,move2.y)
(move.yとmove2.yは同値)
追記
車椅子に座らずに撮った写真と車椅子に座って自撮りした写真の明るさが変わる事がある。このツイートを参考にワールド用ライトとアバター用ライトを分けていたのだが...どうやら座るとレイヤーが変わるみたい。どのレイヤーになっているかは後日調べてみる。
#cluster
— ∞∞hk∞∞ひきこもり衆 (@livevr3) December 30, 2020
こちらはいつも気にしています🥺
ワールドを照らすライトだけだと、暗いワールドはアバターも暗くなってしまいます😖
対策として、アバターだけを照らすライトを使っています😉
忘れられた洋館ではお写真のように設定しました☺️
Culling Maskを変更すると照らすものを変えられます😉 https://t.co/3PHDLVHjby pic.twitter.com/J7NpK93T6z
同期ズレについて
同期ズレでたまに座っている人が別の位置に一瞬だけワープしているように見える。解決策は模索中。
VRで座ると浮く現象について
RidableItemのSeatに適用した物のScaleが1じゃないと座った時に浮いているように見える(自撮りでは問題無いが、他の人が見ると浮いてる)。
最後に
メタバースを盛り上げる為ではなく、ちょっとは頑張った感を出す為に書いたので役に立ったのならいいねでもつけておいてくれると助かる。ついでにVR-TRPGサークル「ぐだぐだぶとん」もよろしく。