スクリプトを組む前にシーン上に以下を用意しておく。
| 準備するもの | 詳細 |
|---|---|
| 円錐テンプレ Slot | シーンの非表示 Slot に置いた円錐オブジェクト。Duplicate Slot のコピー元になる。Active = false にしておくか、Duplicate 直後に有効化する。 |
| ValueField<Slot> コンポーネント | 現在表示中の円錐 Slot を記憶する変数。初期値 = null。「円錐が存在するか否か」の判定にも使う。 |
指定キー (ここでは T) が押されたときに実行フローを流すイベントノード。Pressed 出力が If ノードへのトリガーになる。
currentCone 変数の現在値 (Slot または null) を読み取る。Is Null の入力と Destroy Slot の target に同時に繋ぐ。
入力 Slot が null かどうかを bool で返す。currentCone が null = 円錐未生成 → True。
Condition が True なら True 出力のフローを実行、False なら False 出力を実行。ここでは「生成 or 破棄」を分岐させる。
指定 Slot とその子孫を複製して返す。テンプレート円錐 Slot を渡すと同一形状のコピーが生成される。
currentCone 変数に値を書き込む。生成パスでは複製 Slot を書き込む。破棄パスでは null を書き込んで変数をリセットする。
Local User の指定部位 (LeftFoot / RightFoot) の Slot を返す。この Slot の Global Position が足元座標の源泉になる。
Slot のワールド座標 (float3) を返す。LeftFoot と RightFoot それぞれに適用して 2 点座標を取得する。
2 つの float3 を足して 2 で割る = 両足の中点座標を計算。これを Set Global Position に渡すと円錐が両足の中央に配置される。
対象 Slot (複製した円錐) のワールド座標を指定値に設定する。Duplicate 直後に実行して足元に移動させる。
指定 Slot を削除する。currentCone (既存の円錐) を渡して消去する。破棄後に Write null で変数をリセットする。
Local User ノードは そのグラフを実行しているクライアントの「自分」を返す。 同じ Protoflux グラフが全員のクライアントで動いているとき、 You / Alice / Bob はそれぞれのクライアント上で異なる User を Local User として受け取る。
Duplicate Slot で生成したオブジェクトは、デフォルトでは全員に見える同期オブジェクトになる。 You / Alice / Bob がそれぞれ T を押すと、3 本の円錐が全員のクライアントに見える状態になる。 自分にだけ見せたい場合は生成直後に Local Slot 化 が必要。
生成後の円錐 Slot を自分だけのローカル空間に移動させるには、以下のどちらかを使う。
| 方法 | ノード | 説明 |
|---|---|---|
| Local User Root 配下に移す | Set Parent Slot + Local User Slot | Local User の Root Slot を親に設定する。ただしアバターの Slot 階層に依存するため、確実な親 Slot を確認する必要がある。 |
| Local Space への移動 | Get/Set Parent + LocalUserSpace ノード (存在すれば) | ユーザーのローカル空間として機能する Slot を探してその配下に置く。実装はワールドの設計による。 |
| パターン | 概要 | メリット / デメリット |
|---|---|---|
| Hips Y を地面に投影 | Body Node Slot (Hips) の Global Position の Y を 0 (または地面 Y) に固定して足元近くに配置 | 足の IK が低い場合でも中心に近い位置に置ける。両足の中点より高精度ではないが計算が簡単 |
| User Root を辿る | Local User Slot → Get Parent Slot を繰り返してワールドルートを取得 | ワールド構造に依存。アバタースワップで Slot 階層が変わると壊れる可能性がある |
| 常時追従させる | トグルではなく Update イベントで毎フレーム位置を更新 | 常に足元に張り付く演出が可能。Destroy は不要になる代わりに常時計算コストがかかる |