Skip to content
EN

BatchSetup vs スクリプト

This content is not available in your language yet.

Hapbeat の触覚を Unity に組み込む方法は大きく 2 通りあります:

  1. BatchSetup / Inspector でコンポーネントを貼る — UnityEvent や Animator state、Collision callback と直結
  2. スクリプトから HapbeatBridge / HapbeatManager を呼ぶ — 自前のロジック内で能動的に発火

どちらも正解で、状況によって使い分けます。

状況推奨方式
同じ Trigger を 3 個以上のオブジェクトに貼るBatchSetup
発火条件が「衝突した・スライダ動いた・state 変わった」だけで決まるコンポーネント
gain は EventMap entry そのまま、または velocity scaling だけで足りるコンポーネント
発火条件に複数の game state (charge レベル、アイテム所持、HP 等) が絡むスクリプト
gain / pan / target を runtime で計算したいスクリプト
1 つの発火点から複数の Event を分岐させたいスクリプト
同じイベントを多数の場所から発火する (例: 自作 Bridge にロジック集約)スクリプト

Showcase の各 Zone がどちらの方式を採用しているかは Walkthrough を参照。「やりたい入力 → 参照 Zone」のマトリクスも同じページに整理してあります。

スクリプト方式を選んだ場合でも、HapbeatManager.Instance.Play() を直接呼ぶより、プロジェクト固有の HapbeatBridge 派生クラス を 1 つ作って、そこに発火ロジックを集約するのが推奨です。

理由:

  • gain / target / curve のチューニングが 1 箇所に集まる
  • ロジックが game logic から分離して保守しやすい
  • Showcase の ShowcaseBridge がこの形 (Scripts/ShowcaseBridge.cs)

Z3 Fishing は典型的な組み合わせ例です:

  • HapbeatSequenceTrigger (コンポーネント) で Fire→Loop→Stop の構造を宣言
  • FishingController (スクリプト) でマウス入力に応じて Sequence.Fire() / Stop() を呼ぶ
  • HapbeatParameterBinding (コンポーネント) で loop 中の gain を物体の運動に連動

「コンポーネントで宣言的に書ける部分はコンポーネント、ロジックが必要な部分だけスクリプト」が読みやすいコードになります。

  • まず EventMap ウィンドウ で書けないか考える
  • 書けないなら自前 Bridge 派生 + スクリプト
  • 同じシーンで両方を混在させて OK (Showcase サンプルがそうしている)
  • 具体的な実装例は Walkthrough の「Zone 別の wiring 詳細」を参照