ターゲティング
ターゲティングの概要
Section titled “ターゲティングの概要”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 に届きます。形式の詳細はアドレス形式を参照してください。
構成別の使い分け
Section titled “構成別の使い分け”| 構成 | 分ける軸 | 設定 |
|---|---|---|
| 送信 1 / 受信 1 種類 | 分けない | 既定のまま |
| 送信 1 / 1 人が複数装着 | position | 部位ごとに Address を設定し、Target で指定 |
| 送信 1 / 複数 player | player | 各 device に player 番号を割り当て |
| 送信 N / 受信 N(1:1 の組が N 組) | group + override | 組ごとに同じ group を割り当て |
| 複数送信元 / 受信混在 | group | 送信元ごとに group 範囲を分ける |
1 人が複数装着する場合
Section titled “1 人が複数装着する場合”部位の識別には position を使います。各 device の position を設定し、*/pos_neck や */pos_r_arm のような Target を指定します。player を増やす予定があれば、player 軸をこの用途に使わない方が扱いやすくなります。
複数 player に個別送信する場合
Section titled “複数 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 は共通のまま、同じビルドをすべての端末に配布できます。
複数の送信元が混在する場合
Section titled “複数の送信元が混在する場合”device は送信元を区別しません。別アプリや別 PC が同じネットワークにある場合は、送信元ごとに group の範囲を分けます。例えば送信元 A は group 1〜10、B は group 11〜20 を使います。
Address Override
Section titled “Address Override”Address Override は、Event Map に記録した Target の player / group を送信直前に上書きします。各軸は独立して指定でき、off の軸は Event Map に記録した Target をそのまま使います。
これにより Event Map を複製せず、端末ごとの実行時設定だけで送信先を切り替えられます。複数端末へ同じビルドを配布する構成に使います。
| 単位 | 用途 |
|---|---|
| this build | ビルド全体で固定する override。展示ごとに別ビルドを作る場合に使用 |
| this device | 実行端末ごとに保持する override。1 本のビルドを複数端末へ配る場合に使用 |
各 SDK の設定場所と API は、その SDK のターゲティングページを参照してください。
運用のヒント
Section titled “運用のヒント”- Event Map を複数端末で使い回す場合、Target の player 軸は
*にしておくと、override が off のときは全 player、設定済みのときは指定先へ送れます。 groupoverride を使う場合、Hapbeat 側の group 番号も同じ値にします。- 既定の Address は
player_1/group_1です。設定漏れとの衝突を避けたい展示では、運用番号を 2 以上から始めると確認しやすくなります。
共通ガイド「ターゲティング」と同じ内容を表示しています。
Unreal Engine で設定する
Section titled “Unreal Engine で設定する”Event Map の Target を設定する
Section titled “Event Map の Target を設定する”通常の送信先は Event Map entry ごとに決めます。Content Browser で Hapbeat Event Map asset を開き、entry の Target を編集します。例えば */pos_neck を指定すると、その entry を再生する Blueprint node や Trigger component はすべて neck の Hapbeat だけへ送ります。
Event Map の Target は、触覚演出そのものに属する送信先です。Actor や component ごとに同じ Target を重複して設定する必要はありません。SDK は既知 device には unicast で送信し、device 側でも Target が一致しないイベントを捨てます。
Address Override を選ぶ
Section titled “Address Override を選ぶ”複数の HMD や PC 等の端末で同じ Event Map を使い、端末ごとに送信先だけ変えたい場合は Address Override を使います。Event Map の Target は変更されず、送信時だけ player / group が置き換わります。
- this build — Project Settings の
Plugins → Hapbeat → AddressingでForced Override Player/Forced Override Groupを設定します。展示端末用に固定する場合です。-1は off です。 - this device —
Tools → Hapbeat → Hapbeat Runtime Statusで保存・確認します。PIE 中は実効値を確認できます。実行中の UI には下記 API または Address Override Panel を使います。
Address Override は Hapbeat Subsystem に設定します。
UHapbeatSubsystem* Hapbeat = GetGameInstance()->GetSubsystem<UHapbeatSubsystem>();Hapbeat->SetAddressOverride(/* Player */ 1, /* Group */ -1, /* Persist */ true);Player/Groupに-1を指定すると、その軸を上書きしません。Persistを有効にすると、同じ端末の次回起動でも設定を復元します。Clear Saved Address Override (Hapbeat)は保存済み設定を消し、固定されていない軸を off に戻します。Forced Override Player / Groupを設定した軸は build の固定値が優先され、Clear でも解除されません。
Blueprint では Get Game Instance Subsystem から Hapbeat Subsystem を取得し、Set Address Override (Hapbeat) を使います。Target の組み立て・検証 node はBlueprint ノードにあります。
event ID を直接送る場合
Section titled “event ID を直接送る場合”通常は Event Map entry を再生します。event ID を実行時に組み立てる必要があるときだけ、Hapbeat Subsystem の Play Event (Hapbeat) を使います。
UHapbeatSubsystem* Hapbeat = GetGameInstance()->GetSubsystem<UHapbeatSubsystem>();Hapbeat->Play(TEXT("basic-exam-kit.sine_200hz_1s"), 0.8f, FString::Printf(TEXT("player_%d"), PlayerId));この経路は Event Map の Clip・Gain・Target・Delay を使いません。device に対象の Kit event ID が配備済みである必要があります。