アバターにContactで物を持ったり身につけたいときの、両手+任意箇所の3箇所遷移(EXメニュー対応)

※めんどいです EXメニューで操作できるようにする設定がいらない場合はもうちょっと単純ですが、やっておくと写真撮影のときとか楽だと思うのでやっといたほうがいいです

※Unityのバージョンは2019.4.31f1、VRCSDKのバージョンは3.1.10です。その他のバージョンで動かない可能性があります。

まず、この記事は「右手or左手or任意の箇所にコンストレイントしたい+コンタクトで動かしたい」という場合を想定しています。吸っているタバコや被っている帽子をContactで手に持ちたい場合の設定です。
なお、ある程度オンオフアニメーション等を追加したことがあることを前提に話しているので、わからないことがあればそういった記事を先に読んでいただいたほうがわかりやすいかと思います。

それでは始めていきます。使用するのは自作アバターですので他アバターとは勝手が違う可能性がありますがご了承下さい。今回はこの星を手元に持ってくるものを使って説明します。


1. Parent Constraintの設定

まず、使用したいオブジェクトをコンストレイントする場所を作成します。
Headのボーンを選択し、Create Empty Childsで空のオブジェクトを作成。口の位置に持っていきます。帽子なら頭とといった感じに、くっつけたい場所に持っていってください。もし「腰に剣をくっつけたい!」とかの場合はHipsに。好きな場所に置いてください。
同じように、右手、左手にも空オブジェクトを設置していきます。

散らかっててごめんなさい。今回僕は顔にくっつけたいわけではないので使いませんでしたが、だいたいこんな感じに置きます。
左手。右手も同じように位置を調整して置きます。だいたいXあたりの数値をマイナスつけてコピーすればうまくいきます。

次に、コンストレイントしたいオブジェクト(今回は星)にParent Constraintコンポーネントをアタッチします。Sourcesに先程置いた空のオブジェクトを入れていきます。下図のように設定できたら、コンポーネント右上のZeroをクリックしておきましょう。

この図でいうEndが、頭や腰等の設置したい場所になります。


2. アニメーションの作成

オブジェクトの位置を切り替えるためのアニメーションを作っていきましょう。

適当にフォルダを作ってアニメーションを作成し、アバターに適用してください。
アニメーションタブでAdd Propertyを選択し、

(追加したいオブジェクト)→Parent Constraint→Souce.Array.Data[数].weight

をある分だけ追加していきます。今回は3つなので、[0],[1],[2]があると思います。

これらはそれぞれ、Parent ConstraintコンポーネントのSourcesの横にある数値に対応しています。この数値が1の場所があれば、その場所にコンストレイントする、ということです。

ということでそれぞれ作っていきます。一つ作ったらあとは複製して数値だけ変える単純作業です。

フリー枠
左手
右手

あくまでこれは僕の順番がこうだっただけなので、Parent ConstraintのSourcesの順番が違う場合はここも違ってきます。ちゃんと確認しておきましょう。


3. Contactの設定

オブジェクトに触れているかどうかを確認するのがVRC Contact Receiver/Sender等の機能です。

Contact Senderを使う場合

Senderは判定を手や頭などのVRCであらかじめ設定されている場所以外に作りたい場合に使います。今回は「頭の横の空間で手をロックンロールにすることでオブジェクトをフリー枠に動かす」という設定にしたいのでSenderを使っていきます。たばこや帽子などはSenderを使わずにやったほうがいいかもしれません。その場合は少し下のContact Receiverの設定まで飛ばしてください。

HeadのボーンにVRC Contact Senderコンポーネントをアタッチします。オリジナルの判定を作りたい場合、Collision TagsをCustomにして、適当に名前をつけてください。

いい感じのサイズにしてください。


Contact Receiverの設定

くっつけたいオブジェクトに、VRC Contact Receiverを設定していきます。
今回は星にボーンがあったのでルートにアタッチしてしまいましたが、多分さきほどParent Constraintをアタッチした場所で大丈夫だと思います。

Contact Receiverは3つ用意します。Collision TagsのAddを押して、Hand Lを選択。その下のReceiverのParameterに適当に名前を入れます。この名前は後で使います。コンポーネントをコピペして、右手と頭も作ります。ちなみにRadiusはオブジェクトより1~2回り大きめにしておくとQuest2などのインサイドアウトでも動かしやすいと思います。

頭は今回Senderを使ったのでCustomで設定していますが、使わない場合はHead等のフリー枠の位置に近い場所を選択してください。


4. EXメニューの設定

今回はEXメニューでも操作できるようにしたいので、それぞれ設定していきます。まず。EX Menu ParameterでAddを選択し、新しくIntを作ります。StarPosとしました。わかりやすい名前にしておいてください。

ExMenuの適当な場所に、新しいコントロールを追加していきます。Add Controlをクリックして、以下のように2つ作ってください。

5. Animatorの設定

さて、FXレイヤーの編集に移りましょう。混乱すると思います。僕も混乱しました。画像多めに説明していきます。

Animatorに移動したら上のタブからParametersに移動して、新しくパラメーターを作っていきます。形式はIntで、それぞれ工程3で作ったReceiverのParameterの名前と、4で作ったParameterの名前と同じものを4つ作ります。

上のタブからLayersに戻って、新しいレイヤーを作ります。
また、歯車マークからWeightを1にしておきます。割と忘れやすいやつですね。

工程2で作ったアニメーションをD&Dして追加していきます。フリー枠のアニメーションを先に追加しておけば以下のように繋がってるはずです。

それぞれのアニメーションを右クリックして、Make Transitionで以下のようにつなげます。方向に注意してください。

それぞれの矢印を選択して、以下のように設定していきます。

Entry→LeftHand
LeftHand→Exit
フリー枠→Exit
Entry→RightHand
RightHand→Exit

ここまで作ったら、それぞれのアニメーションを複製します。わかりやすく末尾にContactとかつけておきましょう。これにもMake Transitionで矢印を作っていき、以下のようにします。

青線が新しく追加した矢印です。

またそれぞれの矢印に設定を入れていきます。

Entry→LeftHand_Contact グーをしたら持つようにしたいのでGestureLeft=1。数値を変えればそれに応じた手の形のときだけ遷移するようになります。
LeftHand_Contact→LeftHand ほぼ設定そのままです、Durationはお好みで。
LeftHand→フリー枠_Contact
Entry→RightHand_Contact
RightHand_Contact→RightHand
RightHand→フリー枠_Contact
フリー枠_Contact→フリー枠

さらに矢印を追加していきます。

青矢印が追加したやつです。
フリー枠→LeftHand_Contact
フリー枠→RightHand_Contact
LeftHand→RightHand_Contact
RightHand→LeftHand_Contact


さて、ここまで来た皆さん、お疲れ様でした。最後に一番大事なことをやりましょう。

6つ全部のアニメーションを選択し、日頃の恨みを込めながら、Write Defaultsのチェックを外しましょう。

うまく行っていれば、これでできるはずです。

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