メインコンテンツまでスキップ

複雑なPickupを設定する

CompSpawnHelper を使用すると、VRCPickup やReturn判定用のColliderが子階層にあるアイテムを、ルート単位でSpawn・Returnできます。

構成例​

ComplexItemRoot
├─ PickupObject
│ ├─ VRCPickup
│ ├─ Rigidbody
│ └─ Collider
└─ その他の子GameObject

Pickupが子階層にあるアイテムのHierarchy

この例では、ComplexItemRoot を VRCObjectPool へ登録し、同じGameObjectへ CompSpawnHelper を追加します。

1. Poolへ登録するルートを設定する​

  1. アイテム全体をまとめるルートGameObjectを用意する
  2. ルートへ CompSpawnHelper を追加する
  3. Return Base Go に、Returnトリガーへ入る子GameObjectを設定する
  4. ルートGameObjectを VRCObjectPool の Pool 配列へ登録する

CompSpawnHelperのReturn Base Goを設定したInspector

ルートと Return Base Go の役割

VRCObjectPool へ登録し、CompSpawnHelper を追加するのは、アイテム全体をまとめる親のルートGameObjectです。

Return Base Go には、Returnトリガーへ入るPickup側の子GameObjectを設定します。Spawn時はこのGameObjectを指定地点へ移動し、Return後は位置と回転をリセットします。

Poolへ登録するGameObject

SpawnObjectExt は、SpawnしたルートGameObjectから CompSpawnHelper を取得します。CompSpawnHelper は、VRCObjectPool へ登録するGameObjectと同じGameObjectへ追加してください。

2. PickupとLayerを設定する​

  1. 子GameObjectへ VRCPickup、Rigidbody、Colliderを設定する
  2. Return判定に使うColliderのGameObjectへ、Object Spawn Extension専用のLayerを設定する
  3. ReturnObjectExt の Layer に同じレイヤー番号を設定する
  4. ReturnObjectExt の Pools から、ルートを登録した VRCObjectPool を参照できるようにする

子PickupがReturnトリガーへ入ると、ReturnObjectExt が親階層の CompSpawnHelper を検索し、そのHelperコンポーネントがあるルートGameObjectを非表示にします。

3. 移動方法を確認する​

Return Base Go に VRCObjectSync がある場合は、同期用の移動・Respawn処理を使用します。VRCObjectSync がない場合は、ワールド開始時の位置と回転を保存し、Return時にそのTransformへ戻します。

Move Delay は、SpawnしてからHelperコンポーネントが移動を実行するまでの待機秒数です。通常は既定値を使用し、位置が正しく反映されない場合に少しずつ増やしてください。

Return Base Go は、SpawnOffset やObonEasyのTrayItem系コンポーネントを検索する対象にもなります。出現位置と向きを補正する場合は、Spawn時の位置・回転を調整する をご覧ください。

動作確認​

  1. SpawnObjectExt からアイテムをSpawnする
  2. Return Base Go に指定した子GameObjectが、指定した出現地点へ移動することを確認する
  3. 子PickupをReturnトリガーへ入れる
  4. PickupがDropされ、Poolへ登録したルート全体が非表示になることを確認する
  5. 再度Spawnし、初期状態で利用できることを確認する