見出し画像

【VRChat】アイテムのWorld固定方法①

はじめに

VRChatでおこなうアバターギミックの1つである、アイテムのWorld固定方法について、記載していきます。
この記事を執筆している2022年12月時点では、prefabを使ったWorld固定方法が最新なので、このやり方の説明となります。
他のやり方を検討している方はご注意ください。

今回、なるべく細かく説明するため、全体図の画像も多めにしましたので、画像が小さいかもしれません(拡大してね)。
また、記事にする際に画面ショットを取り直した部分もあるので、若干実際の作業時とは表示内容が異なるかもしれませんが、影響が無い範囲ですので、気にしないでください。

※今回記事の初投稿となるため、読みにくい部分や分かりづらい部分がってもご容赦願います。

参考サイト

自分がアイテムのWorld固定方法を理解するにあたり、下記サイトを参考にしましたので、これらだけで理解出来る人は今回記事を読む必要ないかも。

<こむぎ*様の記事>
いつもお世話になっております。。。

<海外ニキによる動画説明>
1:40辺りから


前提

以下が前提となります。
・VCCでプロジェクトを作成している(もう移行してますよね?)
・VCCのプロジェクトにGestureManagerのパッケージを入れている事(下記図参照)
※GestureManagerを入れる事で、わざわざVRChatにアップロードせずにUnity上で各種動作を確認出来るので、基本は入れた方がよいです。

・重要な点として、購入アバターの場合やツールを利用して既にギミックを入れている場合は、既存の設定と競合が発生する可能性があります。
 よほど変な処理が入っていない限り、影響は無いと思うのですが、なにかあっても責任は持ちませんのであしからず。
 普段手動で設定している方は理解していると思うので大丈夫ですよね。

右のPackage一覧からGestureManagerをAddする

World固定の設定

World固定の基本的な設定を説明します。
AnimationやExpressionメニュー追加もあとで行いますが、それらがわかっている人は、この章だけ読めばOKです。

1.World固定用のオブジェクトを作成する

HierarchyにCteateEmptyで空オブジェクトを作成します。
名前は何でも良いです。
ここでは「WorldSource」としておきます。
PositionとRotationはすべて「0」にします。

1.空オブジェクトWorldSource作成

2.「WorldSource」のPrefab化

次に今作った「WorldSource」をプロジェクトにドラッグ&ドロップして、Prefab化します。
Prefab化したら、Hierarchy上のオブジェクトは削除してOKです。

2.WorldSourceをPrefab化する

3.Avatar内にWorld固定用のオブジェクトを作成

Avatarの直下に空オブジェクトを作成します。
ここでは、「WorldCenter」としておきます。
PositionとRotationはすべて「0」にします。
次に作ったWorldCenterの「Add Component」から「Parent Constraint」を追加します。

3.WorldCenter作成とParent Constraint追加

4.World固定用のSource設定

Parent ConstraintのSourceの「+」ボタンをクリックし、出てきた枠に先程作った「WorldSource」をドラッグ&ドロップします。

4.Sourceを設定

5.World固定処理のActive化

Sourceの設定が終わったら、Activeをクリックします。
Is Activeにチェックが付けばOKです。

5.Active化

6.固定化させたいアイテムの設置

固定させたいアイテムを配置します。
今回は説明のためCubeを使います、名前は「Weapon」としておきます。
入れる箇所は、作ったばかりの「WorldCenter」の直下です。
PositionとRotationはすべて「0」にします。

6,武器を配置

7.持たせたい位置に空オブジェクト作成

通常時に持たせたい箇所に空オブジェクトを作成します。
今回は、右手に持たせたいので、J_Bip_R_Handの直下に「Weapon_R_Hand」を作成しました。
Avatarによって、この辺りのオブジェクト名や構造は異なると思いますが、大体一緒かと。

7.右手に空オブジェクトを作成

8.Weaponの紐づけ設定

「Weapon」に「Parent Constraint」を追加します。
Sourceも追加し、先程作成した「Weapon_R_Hand」をドラッグ&ドロップします。
次に「Zero」ボタンをクリックします。
Is Activeにチェックが付けばOKです。
これで、「Weapon」が「Weapon_R_Hand」の動作に同期するようになりました。

8.WeaponにParent Constraintを追加

9.Weaponの位置調整

「Weapon」の位置を調整します。
ただし、この時点でWeaponは「Weapon_R_Hand」を親オブジェクトとして紐付けられているため、移動や回転の調整は「Weapon_R_Hand」を使います。
「Weapon」でやろうとしても動きません。

9.Weaponをいい感じに調整

============================
おっと、そろそろプロジェクトは保存した方がいいですよ。
経験的に再生ボタンを押すとよく落ちるので・・・。

=============================

10.動作確認

ここで一旦動作確認をしてみましょう。
再生ボタンをクリックし、Avatarを移動させてみます。
「Weapon」もくっついて移動しますね。

10.Weaponも移動してる

11.World固定動作の確認

World固定の動作も確認してみます。
再生した状態で、「Weapon」の「Parent Constraint」のチェックを外します。
そして、Avatarを移動させてみます。
「Weapon」は、その場に残ったままになりますね。
World固定の仕組みとしては、これで完了となります。

11.WeaponがWorld固定されてる


次回はAnimationの作成

次回は、今回作ったWeaponの表示ON/OFFと、World固定のON/OFFをおこなうAnimationの作成をおこないます。

いるかわからないけど、Expressionメニューの作成を先にやりたい人は③の記事からお読みください

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