VRChat備忘録②.5 Parent Constraint設定方法短縮版

こんにちは、こむぎ* と申します。
VRChatの片隅を漂う無言勢の様な何かです。

こちらの記事は、VRChat備忘録②で書いたParent Constraint を使ったオブジェクトの持ち替え(手←→腰とか)の最低限の手順のみ記載した物になります。
やる事は同じです。せっかちな方向け。

元記事は、今何をしているのか、注意点は何か、等なるべく細かく記載したら記事が大きくなりすぎてしまったので…

不明点があった際、詳しい解説を見たい場合はVRChat備忘録② を参照ください。

この記事では、以下の前提で書いていきたいと思います。

・SDK3.0でアバターのアップロードができる
・SDK3.0で簡単なアニメーション作成、設定が出来る

Parent Constraintの設定手順

今回は、光線銃を腰と手の二か所で切り替えられるように設定します。

スクリーンショット (14)

光線銃は以下の商品をお借りしています


①SDK3.0で通常通りアバターアップロード出来る状態にする

VRCSDK、シェーダー、DynamicBoneなど必要な物をインポートして、とりあえずアップロード出来る状態にしましょう。


②持たせたいアイテムをアバターの直下に放り込む

ダウンロードした光線銃をインポートして、prefabをHierarchyのアバターの最上段のところに入れます。Armatureなんかと同じ階層になります。

スクリーンショット (27)


③シーン上で持たせたいアイテムの位置・サイズを調整する

まずは右手に持たせたときの位置調整からしていきましょう。
持たせるアイテムの階層は変えず、位置・サイズのみ調整しましょう。

スクリーンショット (30)


④Hierarchy上の持たせるアイテムの上で右クリックしてCreate Emptyを選択して空のGameObjectを作成する。→分かりやすい名前に変える。

Hierarchy上で光線銃を選択し、右クリックからCreate Emptyを選択します(①)
光線銃の配下に空のGameObjectが生成されます。(②)
分かりやすいように名前を変えます。今回は "Gun Hand.R Point" にしました。(③)

スクリーンショット (31)


⑤作った右手用ポイントをアバターの右手のボーンの下に移動させる

作った "Gun Hand.R Point" を、アバターの右手のボーンにドラッグし、その直下に配置します。今回は "Hand.R" の下に入れます。

スクリーンショット (35)


⑥同じ手順で腰のポイントも作る。(③~⑤の繰り返し)

スクリーンショット (38)

今度は光線銃をシーン上で腰の位置に合わせる。

スクリーンショット (40)

光線銃の上で右クリックしてCreate Empty(①)→出来たGameObjectの名前を変更する(②、③)。

今回は腰につける時の目印なので、"Gun Spine Point" にしておきます。

スクリーンショット (42)

最後に作った腰用の目印 "Gun Spine Point" をアバターの腰のボーン(Spine)の下に入れます。

これで、アバターの右手と腰の配下に、光線銃をくっつけたいポイント(目印)が作成されました。


⑦アイテムにParent Constraintのコンポーネントを付ける

スクリーンショット (47)

Hierarchy上で光線銃を選択し、Inspector上のAdd Componentをクリック。
出てきた検索ウィンドウに、"Parent" なり、"Constraint" なりを入力して"Parent Constraint" を探します。
見つかったらクリック。


Parent Constraintのコンポーネントが追加されました。

スクリーンショット (48)


⑧Parent Constraintの設定

Parent Constraintの設定に入りましょう。
まずはSourcesの設定から。

スクリーンショット (49)

Parent Constraintの中の、Constraint Settingの右下にある + を2回クリック。
List is Empty だったところに、枠が2つできていればOKです。


スクリーンショット (54)

次は、⑤で用意しておいた右手用のポイント、"Gun Hand.R Point" を、先ほど作ったSourcesの1つ目の枠にドラッグ&ドロップ。

スクリーンショット (57)

Sourcesに、放り込んだ物が登録されていればOK。


スクリーンショット (58)

次は腰のポイントを2番目の枠に登録しましょう。

スクリーンショット (59)

Sourcesの枠両方に右手と腰の目印が登録されればOKです。

最後にParent Constraintの初期化&有効化を行います。

スクリーンショット (60)

まず、Sourcesの欄右側にある数字が1になっているはずなので、2つの枠どちらも0にします。

スクリーンショット (60) - コピー

0にしたら、Parent Constraintの右上にある "Zero" のボタンをクリック。


スクリーンショット (62)

手順を間違えていなければ、Zeroを押した後に上記画面のようになっているはずです。
・Parent Constraintの "Is Active" にチェックが入っている。
・光線銃がアバターの足元に落ちている。
・Sourcesはどっちも0
ここまで終われば、Parent Constraintの設定は完了です。動作確認に進みましょう。


⑨Parent Constraintの動作確認

スクリーンショット (64)

動作確認してみましょう。
Parent ConstraintのSourcesの欄の数値を、どちらかを1、どちらかを0にしてみて下さい。
1にした側に光線銃が移動すれば成功です。


アニメーション・Menuなどの設定

後は、Parent Constraint の Sources の、右手側(Sourcesの上段)を1・腰側(Sourcesの下段)を0 にするアニメーションと、右手側を0・腰側を1 にするアニメーションを作りましょう。

スクリーンショット (177)

上記が右手に持たせる用のアニメーションです。腰用のアニメーションは上下の数値を1と0を逆にしましょう。

アニメーションの録画手順は割愛します。


スクリーンショット (176-2)

Animator Controller、ExpressionsMenuは上記のようになります。
ExpressionsMenuには、Toggleで "Gun Position" を 1 にするボタンを作っています。
"Gun Position" 1が右手、0が腰ですが、ONにすると1になり、OFFにすると0に戻るのでボタンは1つで足ります。

今回使っているParent Constraint切り替え用のパラメータは、パラメータ一覧の一番下の "Gun Position" になります。TypeはInt、初期値は0です。Boolでも良いですが、Intにする理由が必要なら元記事を見てください。

スクリーンショット (121)

ExpressionParametersにも同じパラメータを登録しておきましょう。

"Gun Position" = 0 : 腰へ
"Gun Position" = 1 : 右手へ
で設定しています。

スクリーンショット (179)

AnimatorControllerには、新しく作ったLayerで上記のように組んでいます。

Hand_Rには手に持たせるアニメーション、Spineには腰につけるアニメーションが登録されています。
Any State → Spine の矢印は、"Gun Position" = 0 が条件になっています。
Any State → Hand_R の矢印は、"Gun Position" = 1 が条件になっています。


ここまで問題なく設定できていれば、アップロードしてテストしましょう。
ExpressionsMenuのボタンで光線銃が手・腰に移動すれば成功です。
お疲れさまでした。

この記事が気に入ったらサポートをしてみませんか?