コンテンツにスキップ
JA

ターゲティング

Hapbeat のコマンドは、同じネットワーク上の device に届きます。どの device が再生するかは、コマンドに含まれる Target と、device が持つ Address の照合で決まります。

Address は 3 セグメントの正準形です。

player_<N> / <position> / group_<M>
│ │ └ 一斉制御の単位(1〜99)
│ └ 装着部位(pos_neck、pos_r_arm など)
└ プレイヤー番号(1〜99)

Target は前方一致で照合され、* は 1 セグメント分の任意値に一致します。例えば player_2 は player 2 の全 device に、*/pos_neck は全 player の neck に届きます。形式の詳細はアドレス形式を参照してください。

構成分ける軸設定
送信 1 / 受信 1 種類分けない既定のまま
送信 1 / 1 人が複数装着position部位ごとに Address を設定し、Target で指定
送信 1 / 複数 playerplayer各 device に player 番号を割り当て
送信 N / 受信 N(1:1 の組が N 組)group + override組ごとに同じ group を割り当て
複数送信元 / 受信混在group送信元ごとに group 範囲を分ける

部位の識別には position を使います。各 device の position を設定し、*/pos_neck*/pos_r_arm のような Target を指定します。player を増やす予定があれば、player 軸をこの用途に使わない方が扱いやすくなります。

各 device に player 1、2、3 のような番号を割り当て、player_1 のような Target を使います。送信する player を実行時に切り替える場合は Address Override を使います。

HMD と Hapbeat が 1:1 で複数組ある場合

Section titled “HMD と Hapbeat が 1:1 で複数組ある場合”

LBE のように複数のペアが並ぶ場合は、group をペアの識別子にします。HMD 側の override と Hapbeat 側の Address に同じ group 番号を設定します。Event Map は共通のまま、同じビルドをすべての端末に配布できます。

device は送信元を区別しません。別アプリや別 PC が同じネットワークにある場合は、送信元ごとに group の範囲を分けます。例えば送信元 A は group 1〜10、B は group 11〜20 を使います。

Address Override は、Event Map に記録した Target の player / group を送信直前に上書きします。各軸は独立して指定でき、off の軸は Event Map に記録した Target をそのまま使います。

これにより Event Map を複製せず、端末ごとの実行時設定だけで送信先を切り替えられます。複数端末へ同じビルドを配布する構成に使います。

単位用途
this buildビルド全体で固定する override。展示ごとに別ビルドを作る場合に使用
this device実行端末ごとに保持する override。1 本のビルドを複数端末へ配る場合に使用

各 SDK の設定場所と API は、その SDK のターゲティングページを参照してください。

  • Event Map を複数端末で使い回す場合、Target の player 軸は * にしておくと、override が off のときは全 player、設定済みのときは指定先へ送れます。
  • group override を使う場合、Hapbeat 側の group 番号も同じ値にします。
  • 既定の Address は player_1 / group_1 です。設定漏れとの衝突を避けたい展示では、運用番号を 2 以上から始めると確認しやすくなります。

共通ガイド「ターゲティング」と同じ内容を表示しています。


通常の送信先は Event Map entry ごとに決めます。Hapbeat → Open Event Map で Event Map を開き、entry の Targeting を編集します。例えば */pos_neck を指定すると、その entry を再生するすべての Trigger が neck の Hapbeat だけへ送ります。

Event Map の Target は、触覚演出そのものに属する送信先です。同じ entry を再生する GameObject ごとに設定を重複させる必要はありません。

複数 HMD で同じ Event Map を使い、端末ごとに送信先だけ変えたい場合は、Event Map を編集せず Address Override を使います。

  • this buildHapbeat → Open Settings の Override Addressing。展示端末用に player / group を固定する場合。
  • this device — 下記の API または実行時パネル。1 本の build を配り、起動した端末ごとに player / group を選ぶ場合。

Address Override は Event Map の Target を上書きするだけで、asset 自体は変更しません。

// 起動時、または設定画面で番号を確定するタイミングで呼ぶ
HapbeatManager.Instance.SetAddressOverride(player: 3, group: HapbeatManager.AddressOverrideDisabled, persist: true);
  • player / group は 1〜99。AddressOverrideDisabled-1)を渡した軸は上書きしない
  • persist: true で PlayerPrefs に保存され、次回起動時も復元
  • 付け替え時は ClearPersistedAddressOverride() を呼ぶ(Play モード中は HapbeatManager インスペクタの Clear Saved Override ボタン)

現在の値は Hapbeat > Open Runtime Status で確認できる(→ Editor メニュー一覧)。

HapbeatAddressOverridePanel を GameObject に 1 個追加するだけで、player / group を選んで Apply する実行時 UI が生成される。シーン側で UI 階層を組む必要はない。画面固定の HUD としても、VR 用の 3D パネルとしても置ける。

設定項目とコントローラー操作の受け付け方は その他のコンポーネント を参照。

サンプル内容
VR Config Exampleoverride 設定専用のシーン。VR 側の設定画面としてそのまま流用可能
Showcase / Z4 Stream ConsoleAddressOverrideDemo がパネルを継承しただけの薄いクラス。独自 UI の出発点として読める

いずれも Package Manager の Samples から Import する。

HapbeatConfig.appName<p> / <g> を含めると、送信直前に現在の override 値へ置換されて OLED に表示される(無効時は -)。

appName = "Booth <p>/<g>"
→ player=3, group 無効: "Booth 3/-"

「この HMD が正しい Hapbeat とペアか」をデバイスの画面だけで確認可能。

  • EventMap のターゲットのプレイヤー部分は * にしておく — override 無効の端末では全デバイスに、設定済みの端末ではペア先だけに届き、同じ EventMap を使い回せる
  • group override を使うならデバイス側の group 番号も合わせる — 照合は位置ベースのため、group_5 宛ては group_5 のデバイスにしか届かない
  • 送信元アプリ単位の排他制御は未実装 — 同じ番号を使う複数アプリを排他的に切り替える機能(デバイスが最初の app_id を pin する方式)は、contracts / firmware / SDK の同時改修を要するため現時点では無い。必要な場合はユースケースを添えて GitHub Issues