オブジェクトをSpawnしたりReturn(Destroy)したりするギミックです。
VCC/U#1.0以降向け。飲食店ワールドで嵩張るPickup飲食物を、自在に取り出したり片付けたりする等に活用できます。
適用すると、以下の動作となります。
- SpawnスイッチにInteractすることで、非表示状態であった任意のオブジェクトが出現する。
- ReturnトリガーにSpawnされたオブジェクトを重ねることで、任意のオブジェクトが非表示状態&初期位置に戻る。
- ResetスイッチにInteractすることで、任意のSpawnオブジェクト群が一括でReturnされる。
なお、 VRCObjectPool に追加されたSpawn対象オブジェクトは、デフォルトで非表示状態となります。
サンプルシーンを同梱しておりますので、まずはそちらをテストビルドし、動作をご確認ください。
VCC/U#1.0 導入済みのワールドプロジェクトに、本unitypackageをインポートします。
- シーンにGameObjectを追加し、
VRCObjectPoolコンポーネントを追加します。 - Spawnさせたいオブジェクト(いくつでも)を、
VRCObjectPoolコンポーネントのPool配列に追加します。
Inspector右上の鍵のマークをクリックしてVRCObjectPoolを開いた状態のままロックし、Hierarchyで複数選択して、Poolの上にDrag&Dropすると便利です。 - シーンにGameObjectを追加し、 何らかのCollider、および
SpawnObjectコンポーネントを追加します。 SpawnObjectコンポーネントのVRC Object Pool変数に、2までに作成したVRCObjectPoolオブジェクトを追加します。
- シーンにGameObjectを追加し、
ReturnObjectコンポーネントを追加します。 - 何らかのColliderコンポーネントを追加し、
Is Triggerにチェックをつけます。
もしも全Reset専用として用いたい場合は、Collider自体不要です。 VRC Object Poolオブジェクトまたは親の配列項目に、ReturnさせたいオブジェクトのVRCObjectPoolオブジェクト、または、それらを何らかの親オブジェクトの配下としている場合は親オブジェクトを追加します。
他のReturnObjectと同様のVRCObjectPoolを参照させたい場合は、VRC Object Poolオブジェクトまたは親の参照先項目に対象ReturnObjectを設定します。Layerに、Returnさせたいオブジェクトと同様のオブジェクトレイヤー番号を指定します。デフォルトはPickupレイヤーを示す13です。
すべてのSpawnオブジェクトを一括消去するスイッチが必要な場合、以下の手順に沿ってResetスイッチを用意します。
- シーンにGameObjectを追加し、
ResetSwitchコンポーネントを追加します。 - Returnトリガーの用意 手順に沿って、すべてのSpawnオブジェクトの
VRCObjectPoolを参照するReturnObjectを作成します。 - ResetSwitchオブジェクトの
All Reseter変数に、2で作成したReturnObjectを設定します。
-
Script\SpawnObject.cs (&.asset)
任意のVRCObjectPoolからオブジェクトをSpawn(出現)させるスクリプト。
VRCObjectPoolに追加されたオブジェクトはデフォルトで非Activeとなります。 -
Script\ReturnObject.cs (&.asset)
SpawnObjectでSpawnされたオブジェクトをReturn(非表示化)させるスクリプト。
あらかじめオブジェクトが所属するVRCObjectPoolを指定する必要があります。
別のReturnObjectを参照させることで、そのReturnObjectでReturn可能なVRCObjectPoolを同様に使うことができます。 -
Script\ResetSwitch.cs (&.asset)
SpawnObjectでSpawnされたオブジェクトを、一括ですべてReturnさせるスクリプト。
すべてのReturn対象VRCObjectPoolへの参照があるReturnObjectを指定します。 -
上記以外のデータ
実装サンプルデータです。
| 変数名 | 型 | 説明 |
|---|---|---|
| VRC Object Pool | VRCObjectPool |
Spawn対象とするオブジェクトが所属する VRCObjectPool |
| Ramdom Spawn | bool | ランダムSpawn有無。チェックをつけた場合(True)、インスタンス作成時の一度だけ、Spawnの順序がランダムに変更される |
| Move Item To Hand | bool | チェックをつけた場合(True)、Spawn実行時、Spawn対象オブジェクトの初期位置に関わらず、Spawnスイッチに近い方の手の位置にSpawnオブジェクトが出現する |
| Spawn Point | Transform | 指定した場合、オブジェクトが指定の位置に出現します。ただし Move Item To Hand が優先です。 |
| Audio Source | AudioSource |
Spawn時に再生する音源。無指定の場合は再生しない |
| Audio Clip | AudioClip |
Spawn時に再生するオーディオクリップ。無指定の場合は Audio Source に指定された AudioClip を再生する |
| 変数名 | 型 | 説明 |
|---|---|---|
| Pools | GameObject[] | Returnオブジェクトが所属する VRCObjectPool オブジェクト本体、またはその親 |
| Reference | ReturnObject |
別のReturnObjectで、何らかの VRCObjectPool を指定されているもの。ここに指定されたものを同様に参照する |
| Layer | int | Returnオブジェクトが所属するオブジェクトレイヤー番号。初期値はPickupレイヤーを示す13 |
| Audio Source | AudioSource |
Return時に再生する音源。無指定の場合は再生しない |
| Audio Clip | AudioClip |
Return時に再生するオーディオクリップ。無指定の場合は Audio Source に指定された AudioClip を再生する |
| 変数名 | 型 | 説明 |
|---|---|---|
| All Reseter | ResetObject |
一括消去するための、すべてのReturn対象オブジェクトの VRCObjectPool を参照するReturnObject。これ専用とする場合、ResetObject側にCollider不要 |