VRChatで設置ギミックを作成する[VRChatアバター改変のすすめ その4]
はじめに
前回の記事の続きです。
Unity初心者で未読の方は、以前の記事を流し読んでおいて、VRChatで使用するUnityの機能を一通り確認していただければと思います。
今回は設定しなければならないものが多く、以前の記事を読んでいることを前提にするので、画像を多めに使用して雑に書きます。
※こちらのギミックを参考にさせていただいています(というかそのまま)
手っ取り早く済ませるのであればこちらをダウンロードし説明書に従ってください。
booth.pm
今回は自分もあまり詳しくない部分が多いです。
ギミックの作成方法とか、どうやって動いているのかがなんとなく分かっているだけです。
しかし、なんとなくでも分かっていれば応用ができます。
最後に応用例をいくつか書くので、知識をつけて自分オリジナルの改変を目指しましょう。
Constraint の説明
VRChat でワールド固定化などのギミックを作成するにはConstraintの機能をもう少し知る必要があります。
以前、磁石のようなものと説明しましたが、これには多くのパラメータが存在します。
少し難しいですがいつものざっくり解説。
自分も全く理解できていないので、雰囲気だけ掴んどいてください。
③-1 固定
③-2 Weightが1の時に、追従する物体からどれだけ離れているか
③-3 Weightが1の時に、追従する物体からどれだけ回転しているか
Constraintでは追従するオブジェクトを増やすことも可能なので、各パラメータを個別で指定する機能がついています。
例えば、反対側にCapsuleを追加してみます。画像の⑥の左側にCapsuleのTransformを追加してます。
④ 追従オブジェクトごとに③と同じパラメータを個別に設定、③を触ると上書きされる
⑤ チェックを外すとその項目だけ追従せずに操作可能になる
⑥ 追従オブジェクトごとに②と同じパラメータを個別に設定、②を触ると上書きされる
ワールド固定ギミックを作る
応用と、仕組みの雰囲気を掴むために、あえてここではBoothのものは使用せず、1から作成する手順を示します。
CreateEmptyを6個作ります。
Shiftキーでまとめて選択し、作成したオブジェクトの座標を0にします。
F2で名称変更し、ドラッグドロップで図のような親子関係にします。
Lockの中に配置したい3Dオブジェクトを設置します。
とりあえず、Lockの中心にオブジェクトが来るように配置してください。
今回も(手に持たせた時と同じように)サイズ0.1のCubeにします。(BoxColliderは外してください)
LockGimmick01にRotation Constraintと、Position Constraintをアタッチし、WorldPointをくっつけます。
以下の画像のように値を設定してください。
Lock にチェックを入れて0に固定し、isActiveにチェックを入れて有効化します。
次に、LockにParent Constraintをアタッチし、ObjectPointとLockPointをくっつけます。
Lock PointにLockをくっつけます。
LockObjectsをアバターの中に入れ、ObjectPointをHips(無いならばArmatureの下にあるオブジェクト)に配置します。
アニメーションを2つ作成します。
boolでLock01パラメータを作成
ToggleでOnOffできるようにして、FXLayerのコントローラーに先ほど作成したアニメーションを追加します。
アニメーションを作成する
今回は録画ボタンでのKeyが打てない項目を選択するため、Add Propertyから追加します。
Add Propertyに並んでる項目はInspectorにあるものばかりですね。
ここにある項目は全て[アニメーションで上書きすることが可能]です!
以下のキーを追加します。
LockObjects>LockGimmick01>Lock>Parent Constraint > Sources.Array.data[0].weight
LockObjects>LockGimmick01>Lock>Parent Constraint > Sources.Array.data[1].weight
LockObjects>LockGimmick01>LockPoint>Parent Constraint > Active
完成すると以下のようになります。
上から順に0、1、チェック無しにします。
Lock_off_01アニメーションにキーをコピーして1、0、チェックありにします。
60frameのところにキーが打たれていた場合は、そちらを選択して削除します。
ここでやっていることは難しくないです。
以下の図を見てください。
アニメーションのキーと同じ個所がInspectorにあるはずです。
つまり、この部分をOnOffで切り替えているだけです。
動作確認
Unity上だとGame再生中はキャラのボーンのTransformがアニメーションで上書きされてしまうので、Scene画面では値を変更しても反映されなくなりしゃがんだ状態になってしまいます。
そこで、キャラの座標移動を再現するアニメーションを作成します。
まず、ExampleのTポーズアニメーションを複製します。
FXControllerにLayerを追加してWeightを1にして、先ほど複製したアニメーションをドラッグ&ドロップしておき、再生できるようにします。
複製したアニメーションの30frameにRoot T のX座標を変化させるキーを設置します。
これで、Game上で座標が変化した際の動作確認ができるようになりました。
Game中にParametersのLock01を切り替えるとWeightの0と1が逆転し、接続先が変化してその場にCubeを落とすように見えるのが確認できますね!
動作確認が済み次第、不具合が起きないように、FXControllerに追加したLayerのWeightは0にするか、レイヤー自体を削除しましょう。
いつものパラメータ設定とアップロード
そろそろ説明不要かな。
応用
応用1.落とした時だけ見えるようにする。
Lock_onの時にCubeを表示
Lock_offの時はフレームを追加しましょう。
Cubeを表示から非表示に切り替えることで回収しているように見せることができます。
落とした時だけ表示、回収時に足元まで来たら見えなくなるようになりました。
応用2.接続場所を変更する。
試しに、右手に配置してみます。
ObjectPointをボーンに配置したら、座標を(0,0,0)にします。
配置するオブジェクトの回転と座標を調整します。
完成!
応用3.設置物を増やす。
LockGimmick01を複製します。
出現位置を変更したい場合はObjectPointを複製しLockGimmick02に名称を変更し、応用2と同じように設定します。
複製したLockGimmickのConstraintで接続しているObjectPointを変更します。
LockGimmick01と同じようにアニメーションの作成、パラメーターの追加をします。
完成!
最後に
お疲れ様でした。
Constraintを活用することでアバターから切り離したり、接続したりできることが分かりましたね!
次回は音源を配置する方法について説明しようと考えているので、こちらと組み合わせることで、設置した場所に音楽を流すなどの応用も可能になるかと思います!