VRChat用ワールドをUnityで作成している場合に、オブジェクトを持てるようにする方法をまとめています。
コップを持つ、本を持つ、など、何かアバターに持たせたいものがある場合に使えるギミックです。簡単なので誰でもすぐに使用できます。
気を付けるポイント・設定なども書いているので良ければ参考にしてみてください。
オブジェクトを持てるようにする設定
必要なコンポーネント
- Collider…
- 他の物体とぶつかるようになる
- Box Collider, Mesh Collider etc
- VRC Pickup…
- つかめるようになる
- 追加すると自動でRigidbodyもつく
- Rigidbody…
- 物理的に計算するようになる
この3つをつければもう持てるオブジェクトになります。※VRChat内で安全に使うための設定は以下に書いています。
VRC Object Sync…他のアバターと同期する(※Object Sync を付けていない場合、他人からは
「その場に置きっぱなし」に見えます。)処理負荷が増えるので、物が多い場合は気を付ける

Staticを外す
また、キャラクターが持って動かすオブジェクトは必ずStaticを外してください。
オブジェクトのInspectorすぐ右下にあるチェックです。Staticのチェックをつけたままにするとエラーが出てワールドがアップロードできなくなることがあります。(オブジェクトを削除で直りましたが忘れやすいので気を付けてください)
物質の挙動の設定
Rigidbodyコンポーネント > Use Gravity…チェックを入れると重力が効くようになり物質が落ちます
Rigidbodyコンポーネント > Is Kinematic…チェックを入れると物理演算の影響を受けなくなり、衝突によって押されたり、他の物体を押したりしなくなります。Pickupで手に持って動かす場合は、こちらをONにすることが多いです。
VRChatでは、物質の物理的設定が生きていると、持ったときにアバターが浮く・押し出されるなどの物理的な不具合が起きやすくなります。
そのため、手で持つ小物の場合は
Use Gravity:OFF
Is Kinematic:ON
にすることが一般的です。

アバターが空へ浮かび上がっていくエラー
オブジェクトが大きすぎると、持った時にアバターがオブジェクトにめり込んで物理計算がぶつかりあい、バグることがあります。アバターがどんどんオブジェクトから押されて上に浮かび上がったりします。
オブジェクトがアバターにめり込まないようにサイズを小さくする、(コライダーだけでも小さくする)と改善します。



コメント