コンテンツにスキップ
JA

スクリプト API リファレンス

C# スクリプトから使う主なクラスの public メンバーの一覧です。使い方の流れは スクリプトから触覚を再生する を参照してください。

  • 名前空間はすべて Hapbeat(using Hapbeat;)
  • 対象バージョン: SDK 0.6.0
  • ここに無いメンバーの詳細は、ソースの XML コメントを参照してください(Runtime/)
やりたいこと使うもの
EventMap のエントリを再生・停止するHapbeatUnityEventTrigger
つかむ → 持つ → 離すの 3 段HapbeatSequenceTrigger
再生中の CLIP の強さ・左右を変えるTrigger の GainMultiplier / Pan、または HapbeatStreamPlayback
EventMap を通さずに再生する、接続状態を見るHapbeatManager
スクリプトからエントリの設定を読むHapbeatEventMap / HapbeatEventEntry

HapbeatUnityEventTrigger・HapbeatSequenceTrigger・HapbeatCollisionTrigger・HapbeatTickEmitter はすべて基底クラス HapbeatTriggerBase を継承しており、次のメンバーを共通で持ちます。

メンバー型内容
GainMultiplierfloat(0〜2)このコンポーネント固有の倍率。最終 gain = エントリの Gain × Kit の intensity × GainMultiplier。CLIP の再生中に書き換えると即座に反映される
Panfloat(−1〜+1)左右バランス。−1 = 左のみ、0 = 中央、+1 = 右のみ。CLIP の再生中に書き換えると即座に反映される
TriggerEnabledboolfalse の間は Fire() しても再生されない
ActivePlaybackHapbeatStreamPlaybackこのコンポーネントが再生中の CLIP のハンドル。再生していなければ null
EventMapHapbeatEventMap(読み取り専用)Inspector で割り当てた EventMap
EntryIdstring(読み取り専用)選択中エントリの ID(GUID)
ResolveEntry()HapbeatEventEntry選択中エントリの設定を取得する。未選択・削除済みなら null

Inspector だけで設定する項目(スクリプトからは変更できない): Event Map・Event(エントリの選択)・Cooldown(連続発火を防ぐ最小間隔、秒)。

Add Component → Hapbeat → Hapbeat UnityEvent Trigger。EventMap のエントリを 1 つ再生するための汎用 Trigger です。スクリプトから呼ぶ場合も、Button の OnClick などの UnityEvent から呼ぶ場合も、このコンポーネントを使います。

メソッド内容
Fire()エントリを再生する。FIRE(Command)なら Event ID を送信、CLIP(Stream)なら AudioClip を送信する。Loop のエントリは Stop() まで鳴り続ける
Stop()このコンポーネントが再生している触覚を止める
FireWithGain(float gain)指定した値を最終 gain として再生する(エントリの Gain・Kit の intensity・GainMultiplier は掛からない)。FIRE(Command)のエントリ専用。CLIP のエントリの強さを変えるときは GainMultiplier を設定してから Fire() を呼ぶ

加えて Trigger 共通 のメンバーを使えます。

[SerializeField] private HapbeatUnityEventTrigger _hit;
void OnHit(float power)
{
_hit.GainMultiplier = power; // 0〜2
_hit.Fire();
}

Add Component → Hapbeat → Hapbeat Sequence Trigger。「開始の一発 → 継続ループ → 終了の一発」を 1 つで扱います。Inspector で On Start(開始の一発)・Loop (hold)(継続、Loop を有効にした CLIP エントリ)・On Stop(終了の一発)を選びます。使わない段は (none) にします。

メンバー内容
Fire()On Start の一発を再生し、続けて Loop を開始する
Stop()Loop を止め、On Stop の一発を再生する
FireWithStartGain(float gainMultiplier)Fire() と同じだが、On Start の一発だけ倍率を掛ける(Loop はエントリの gain のまま)
StartShotDelayOn Start から Loop 開始までの待ち時間(秒)。−1 = On Start のクリップの長さだけ待つ(既定)
StopShotDelayLoop 停止から On Stop までの待ち時間(秒、既定 0.05)

加えて Trigger 共通 のメンバーを使えます(GainMultiplier / Pan / ActivePlayback は Loop に効く)。

HapbeatCollisionTrigger / HapbeatTickEmitter

Section titled “HapbeatCollisionTrigger / HapbeatTickEmitter”

通常は Inspector の設定だけで動くため、スクリプトから呼ぶメソッドは少数です。設定項目は Trigger コンポーネント を参照してください。

クラスメンバー内容
HapbeatTickEmitterFire(float value) / Fire(Vector2 value)連続値を渡す。前回からの変化量がしきい値を超えるたびに再生する
FireNow()しきい値に関係なく 1 回再生する
TickThreshold何だけ値が変わったら再生するか
ResetReference()変化量の基準をリセットする
HapbeatParameterBindingSetValue(float v)Source Property が External のとき、スクリプトから入力値を渡す

CLIP(Stream)の再生 1 本ごとのハンドルです。Trigger の ActivePlayback、または HapbeatManager.StreamAudioClip() の返り値として得られます。

メンバー型内容
Gainfloat(0〜2)再生中の強さ。書き換えると次に送るデータから反映される
Panfloat(−1〜+1)左右バランス
Loopboolループするか。再生中に切り替えられる
ApplyGainModulation(float m)—Gain = BaselineGain × m にする。BaselineGain は再生開始時の基準 gain(Trigger 経由ならエントリの Gain × Kit の intensity)。Trigger の GainMultiplier も内部でこれを呼ぶ
Stop()—この再生だけを止める(同じデバイスで鳴っている他の CLIP は止めない)
IsStoppedbool停止済み、または最後まで再生し終えたら true
IsActiveboolデバイスへの送信が始まっていれば true(接続先が見つかるまでは false)
StatusHapbeatStreamPlaybackStatusDeferred(送信先待ち)/ Active / Stopped

[Hapbeat Event Router] 上にあるシングルトンで、デバイスとの通信を受け持ちます。HapbeatManager.Instance で取得します(シーンに無いときは null)。

EventMap を通さずに直接送ります。EventMap の Gain・Target・Kit の intensity 補正・遅延補正は掛からないので、値はすべて引数で渡します。

メソッド内容
Play(string eventId, float gain = 1, string displayName = null, string target = null, float pan = 0)FIRE(Command)。デバイスに deploy 済みの Kit から eventId(<kit名>.<イベント名>)を再生する。target は送信先(空 = 全デバイス。書式は ターゲティング)
Stop(string eventId, string displayName = null, string target = null)指定した Event ID の再生を止める
StopAll(string target = null)デバイス上の再生をすべて止める
StreamAudioClip(AudioClip clip, float gain = 1, string target = null, bool loop = false)CLIP(Stream)。AudioClip を送って再生し、HapbeatStreamPlayback を返す(未接続・clip が null なら null)
StopStream()送信中の CLIP をすべて止める
メンバー内容
IsConnected送信の準備ができていれば true
IsAlive / AliveDeviceCount応答しているデバイスがあるか / その台数
DiscoveredDevices見つかったデバイスの一覧
Ping()デバイスへ疎通確認を送る。応答は OnPong で届く
OnConnected / OnDisconnected接続・切断時のイベント(Action)
OnPongPing の応答(Action<long>、往復時間 µs)
OnErrorエラー(Action<string>)
メソッド内容
SetAddressOverride(int player, int group, bool persist = false)以後のすべての送信の player / group を実行時に上書きする(−1 = その軸は上書きしない)。persist: true で次回起動時も保持。詳細は ターゲティング

EventMap(.asset)の中身をスクリプトから読むためのクラスです。通常は Trigger が読むので直接触る必要はありません。Trigger を使わずに HapbeatManager を呼びつつ EventMap の設定を活かしたいときに使います(実例: Showcase の ChargeShooter.cs)。

HapbeatEventMap のメソッド内容
FindByName(string displayName)EventMap ウィンドウの Name でエントリを探す
FindByEventId(string eventId)Event ID(<kit名>.<イベント名>)でエントリを探す
FindById(string id)エントリの GUID で探す
entries全エントリのリスト
HapbeatEventEntry のメンバー内容
modeHapticMode.Command(FIRE)/ HapticMode.StreamClip(CLIP)
eventIdEvent ID(FIRE で送る文字列)
streamClip / loopCLIP で送る AudioClip / ループするか
GetEffectiveGain()エントリの Gain × Kit の intensity(実際に送る強さの基準値)
target / HasTarget送信先 / 送信先が指定されているか
// EventMap の設定を使って、Manager から直接 CLIP を再生する
var entry = _eventMap.FindByName("player_damage");
if (entry != null && entry.mode == HapticMode.StreamClip)
{
HapbeatManager.Instance?.StreamAudioClip(
entry.streamClip,
entry.GetEffectiveGain(),
entry.HasTarget ? entry.target : null,
entry.loop);
}