VRCでConstraintを使ったワールド固定&ピックアップ(Unity2018対応)

Beryllin

はじめに

4/2にVRCのアップデートがあったことでConstraintコンポーネントが使用できるようになりました。

Constraintについての基礎知識はこちらを見てください

※この記事は

・VRCSDK2とUnity2018でのアバターアップロードができる。

・Constraintの基礎知識がある。

ことが前提になっています。

Constraintのワールド固定&ピックアップ

このConstraintを使用したワールド固定&ピックアップは、アバターからアイテムを切り離せる、ワールドに設置できるギミックになります。

FixJointを使用したワールド固定がありましたが、このFixJointのワールド固定はワールドの設定によって壊れることがありました。

しかし、Constraintを使用したワールド固定は、ワールドの設定で壊れる事がないのが大きなメリットです。

※Battle Disk等のワールドで検証しています。

アバターにギミックを入れてみる(本題)

それでは本題です。

今回はあすかろさんのかわいいかわいい謎生物を使用して導入していきます。

キャプチャ

①hierarchy上で右クリック→CreateEmptyで画像のような構造を作る。

Inkedキャプチャa_LI

②名前をわかりやすくする。

下記のように名前を変えておきましょう。

アバター本体
 -メッシュ
 -ボーン
 -World_C
   -Pickup_C
     -Gameobject
 -World_Point
 -Pickup_Point

World_C以下が固定、ピックアップする機構で、

World_Pointがワールド固定位置、

Pickup_Pointがピックアップする位置になります。

Inkedキャプチャaa_LI

③World_CとPickup_CにConstraintを入れる。

World_CにPosition ConstraintとRotate Constraintを、

Inkedキャプチャff_LI

Pickup_CにParent Constraintを入れましょう。

Inkedキャプチャg_LI

ついでにinspector上でSoucesの+ボタンを押して、List is EmptyからNoneの状態にしておきましょう。


④World_Cのコンポーネントを編集する

下の画像のように編集しましょう。

Inkedキャプチャh_LI

⑤Pickup_Cのコンポーネントも編集する。

下の画像のように編集しましょう。

Inkedキャプチャbb_LI

⑤ワールド固定するオブジェクトを入れる。

今回は例としてCubeを固定します。

下記のように、GameObjectの中にCubeを入れましょう。

アバター本体
 -メッシュ
 -ボーン
 -World_C
   -Pickup_C
     -Gameobject
       -Cube
 -World_Point
 -Pickup_Point

キャプチャc

⑥オブジェクトの位置調整をする

今回は右手にピックアップします。

Pickup_C以下のオブジェクトとPickup_Pointを、ピックアップしたいボーンの階層に持っていき位置を両方とも合わせましょう。

※Pickup_C以下の位置を合わせた後に、Pickup_PointをPickup_Cの子にして座標を0にするのがオススメ。

キャプチャdd

⑦Pickup_CをWorld_Cの階層に戻す。

位置合わせが終わった後は、Pickup_C以下のオブジェクトのみWorld_Cの階層に戻しましょう。

Pickup_PointはHandの階層に残したままでOKです。

下の画像のようになっているかと思います。

Inkedキャプチャddddddd_LI

⑧ピックアップするアニメーションを作る。

フォルダで右クリック→Create→Animationでアニメーションファイルを作ります。

キャプチャe

Ctrl+Dでアバターをコピーし、コピーしたアバターにAnimaitonファイルを入れて、下記のように編集しましょう。

Inkedキャプチャeee_LI

Pickup_CのParent ConstraintをActiveにするとピックアップするようになっています。

作業が終わったら、AnimationOverrideにPickupのアニメーションを入れ、アップロードして終了です。

おつかれさまでしたー!

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!