コンテンツにスキップ
JA

Trigger コンポーネント

Hapbeat SDK は多様な Trigger コンポーネントを用意しており、コードを書かずに触覚を組み込めます。

コンポーネント発火タイミング主な用途参考 Showcase Zone
HapbeatUnityEventTriggerUnityEvent から Fire() を呼ぶUI Button / XR Interactable / Animation Event 等Z5 Charge
HapbeatStateBehaviourAnimator state Enter / Exitキャラクターアクション、UI アニメーション、ドア開閉等Z2 Door
HapbeatCollisionTriggerOnCollision / OnTrigger衝突、当たり判定、銃弾命中Z1 Bowling
HapbeatSequenceTriggergrab / hold / release の 3 段階XR Interaction(つかむ・持つ・離す)Z3 Fishing
HapbeatTickEmitter連続値の変化量に応じてスナップ発火Slider / ScrollRect 等のスクロール触覚Z4 Stream Console

UnityEvent(Button.OnClick / XRI Activate / Animation Event 等)の Fire() メソッドを紐付けて発火します。コードなしで任意の UnityEvent から触覚を呼べます。

設定:

  • Event Map: EventMap.asset を参照
  • Event: EventMap 内のエントリをドロップダウンで選択
On Activated:
[Hapbeat Event Router] → HapbeatUnityEventTrigger.Fire()

AnimatorControllerstate に直接 attach する StateMachineBehaviour 派生。state Enter / Exit の瞬間に Animator runtime から直接呼ばれるため、scene 側 MonoBehaviour で Animator パラメータを poll する方式より遅延も発火条件も明快です。

通常の Trigger と違い、Add Component メニューには出ません。Animator window で対象 state を選択 → Inspector → Add Behaviour → Hapbeat State Behaviour で追加します。

設定:

  • Event Map: EventMap.asset
  • Entry On Enter / Entry On Exit: state 遷移ごとに別エントリを発火可能(片方だけでも OK)
  • Required Previous State: 非空時は「指定 state からの遷移時のみ Enter 発火」(例: Closed → LockedRattle だけ鳴らす、など)
  • Gain Multiplier: entry gain × manifest intensity への追加倍率

実装上の特徴:

  • looping StreamClip を Enter で発火した場合、Exit で 自動的に Stop されるので「state に紐付く擦り音」がクリーンに切れます
  • 参照フィールド (EventMap 等) は AnimatorController asset 上に保存される(ScriptableObject 同士の参照なので scene 依存なし)
  • Showcase Z2 Door: Open / Closed state に各 1 個ずつ attach して door_open / door_close を発火

Collision / Trigger イベントで発火。速度連動 (Gain Mode: VelocityScaled) が可能。

設定:

  • Tag Filter: 反応するオブジェクトの Tag(空 = 全対象)
  • Layer Mask: レイヤーフィルタ
  • Gain Mode: Fixed(固定)/ VelocityScaled(速度連動)
  • Min Velocity: これ以下の速度では発火しない
  • Cooldown: 連続発火防止(秒)

強い衝撃ほど強い触覚、というマッピングが組めます。

XR Interaction Toolkit や独自の grab system と組み合わせ、3 段階の Event を 1 コンポーネントで管理します。

設定:

  • On Grab: つかんだ瞬間の Event(例: bowling.grab
  • On Hold: 持っている間の継続 Event(CLIP 推奨、例: bowling.hold
  • On Release: 離した瞬間の Event(例: bowling.release

XR Helpers サンプル (Samples~/XriHelpers/) を Import すれば XRGrabInteractable / XRSocketInteractor との接続が自動でセットアップできます(プロジェクト側で XRI を導入していなくても scaffold 自体は壊れません)。

Slider / ScrollRect などの連続値の変化量に応じて、スナップアルゴリズムでトリガーします。

  • Cooldown 不要(アルゴリズムが連続発火を自制)
  • snap interval で感度を調整

HapbeatParameterBinding を併用すると、Transform / Rigidbody の値を StreamClip の gain / pan に毎フレームマッピングできます。

例: 距離が近いほど触覚を強くする、移動速度が上がるほど振動が強まる。

詳細は Parameter Binding

メニューバー → HapbeatDebugAttach Event Logger to Selected を実行すると、選択中 GameObject の UnityEvent 発火をコンソールにログ出力できます。XRI のイベント発火順序の可視化に有効です。

詳細ログを記録する場合: Hapbeat → Debug → Logs → Start Recording