メインコンテンツまでスキップ

API 使用方法

概要

Interhaptics.Core 名前空間の HAR クラスは、Interhaptics Engineを制御および操作するための一連の静的メソッドを提供します。

コメント付きのソースコードに基づく完全なドキュメントは、こちら (Doxygen html アーカイブ) でご覧いただけます。 Interhaptics_Unity_SDK_1.6Doxygen-HTML

  • 各メソッドは、Unity ベースのアプリケーションで高度なハプティックフィードバックを実現するため、Interhaptics Engineと連携するように設計されています。
  • Init と Quit を適切に使用して、正しい初期化とクリーンアップを行ってください。
  • これらのメソッドは [DllImport] を使用して、ネイティブライブラリ (HAR、または iOS の場合は __Internal) にリンクされます。
  • このクラスは、リアルタイムアプリケーションにおけるハプティック効果の作成、管理、再生を詳細に制御できます。

定義

振幅 (Amplitude): ハプティック効果や体験の強度を 0 から 1 で示します。

ピッチ (Pitch): 最小周波数と最大周波数の間で正規化された振動周波数です。ピッチはハプティック体験の感覚を形作ります。低いピッチはゴロゴロとした深い感触で、高いピッチは鋭い感触になります。0 (最小周波数) から 1 (最大周波数) で示されます。

トランジェント (Transient): クリックに似た短いハプティックショックです。

記事

Player Control

PlayConstant

Unity の PlayConstant メソッドは、指定した時間と設定した振幅で連続的かつ安定したハプティック効果を再生するために作られています。この関数は、一定の振動や持続的な力をシミュレーションするような、一貫した触覚を作り出すのに特に便利です。

パラメータ

  • amplitude: ハプティック効果の強さを指定する double 値です。通常 0 (効果なし) から 1 (最大効果) の範囲です。
  • time: ハプティック効果を再生する時間 (秒) を示す double 値です。
  • _intensity (オプション): ハプティックフィードバック全体の強度を設定する double 値です。
  • _loops (オプション): 効果を繰り返す回数を表す int 値です。デフォルトは事前定義された定数に設定されており、通常はループなし、または 1 回のみの再生を意味します。
  • _controllerSide (オプション): ターゲットのどちら側 (左、右、または両側) でハプティック効果を再生するかを決定する LateralFlag 値です。
    • LateralFlag.Global (デフォルト): ターゲットの両側で再生します (モバイルデバイス -- Android | iOS では唯一の選択肢)
    • LateralFlag.Left: ターゲットの左側で再生します
    • LateralFlag.Right: ターゲットの右側で再生します _bodyPart (オプション): ハプティック効果のターゲットボディパーツ
    • GroupId.Palm (デフォルト): ゲームパッドコントローラー、VR コントローラー、モバイル、または手に関連する任意のハプティックデバイスで再生します
    • GroupId.Index: ゲームパッドのトリガー (例: Xbox コントローラー) で再生します
    • GroupId.Head: 頭やヘッドフォンに関連するハプティックデバイス (例: Razer Kraken V4 Pro) で再生します
    • GroupId.Chest/Waist/Leg: これらのハプティックボディパーツに関連するハプティックデバイス (例: Razer Freyja ハプティッククッション) で再生します

使用方法

PlayConstant メソッドを使用するには、ハプティック効果の希望する振幅と時間を指定するだけで済みます。任意で、強度、ループ回数、ターゲット側、ターゲットを指定することもできます。

using Interhaptics.Core;

// PlayConstant の使用例
void PlayConstantExample()
{
// 振幅と時間を定義
double amplitude = 0.5; // 中程度の強さ
double duration = 2.0; // 2 秒間

// オプションのパラメータ
double intensity = 0.8; // 最大強度よりわずかに低い
int loops = 1; // 効果を 2 回再生する (初回再生の後に 1 回ループ)
LateralFlag controllerSide = LateralFlag.Left; // コントローラーの左側で再生
GroupId controller = GroupId.Palm; // コントローラーまたはモバイルで再生

// 一定のハプティック効果を再生
HAR.PlayConstant(amplitude, duration, intensity, loops, controllerSide, controller);
}

void PlayConstantGraphBelow()
{
HAR.PlayConstant(1.0, 0.5); // 振幅 100% で 0.5 秒間、一定のハプティック効果を再生します。
}
Play Constant
Play Constant

この例では、最初の関数で中程度の振幅のハプティック効果が、コントローラーの左側で 2 秒間、最大強度よりわずかに低い強度で再生され、初回再生後に 1 回繰り返されます。2 つ目の関数は、図に示されているとおり、振幅 100% で 0.5 秒間の一定ハプティック効果を再生し、オプションパラメータは指定されていません (デフォルトに設定)。

実用例

PlayConstant メソッドは、一定期間にわたって均一なハプティック感覚が必要なシナリオに最適です。振動するオブジェクトを握っている感覚のシミュレーション、安定した背景的な触覚の作成、ユーザー操作に対する継続的なフィードバックの提供など、さまざまな用途で使用できます。このメソッドは、Unity アプリケーションで一貫したハプティックフィードバックを実現するための簡潔な実装を提供します。

PlayTransient

Unity の PlayTransient メソッドは、トランジェントとして知られる、短い 1 回限りのハプティック効果を、指定した瞬間に、定義された強さとピッチの特性で再生するように設計されています。この関数は、素早いタップや振動のような瞬間的な触覚を作り出すのに役立ちます。

パラメータ

  • time: トランジェントハプティック効果が発生する正確な時間 (秒) を指定する double 値です。デフォルト値はおよそ 0.0
  • amplitude: トランジェント効果の強さを表す double 値で、0 (効果なし) から 1 (最大効果) の範囲です。デフォルト値 = 1.0 (値は 0 から 1 の間)
  • pitch: トランジェント効果のピッチを示す double 値です。ここでのピッチは振動の速度またはレートを指し、トランジェントが「鋭く」感じるか「柔らかく」感じるかに影響します。デフォルト値はおよそ 1.0 (値は 0 から 1 の間)
  • _intensity (オプション): ハプティックフィードバック全体の強度を設定する double 値です。
  • _loops (オプション): トランジェントが繰り返される回数を表す int 値です。
  • _controllerSide (オプション): ターゲットのどちら側 (左、右、または両側) でハプティック効果を再生するかを決定する LateralFlag 値です。
    • LateralFlag.Global (デフォルト): ターゲットの両側で再生します (モバイルデバイス -- Android | iOS では唯一の選択肢)
    • LateralFlag.Left: ターゲットの左側で再生します
    • LateralFlag.Right: ターゲットの右側で再生します _bodyPart (オプション): ハプティック効果のターゲットボディパーツ
    • GroupId.Palm (デフォルト): ゲームパッドコントローラー、VR コントローラー、モバイル、または手に関連する任意のハプティックデバイスで再生します
    • GroupId.Index: ゲームパッドのトリガー (例: Xbox コントローラー) で再生します
    • GroupId.Head: 頭やヘッドフォンに関連するハプティックデバイス (例: Razer Kraken V4 Pro) で再生します
    • GroupId.Chest/Waist/Leg: これらのハプティックボディパーツに関連するハプティックデバイス (例: Razer Freyja ハプティッククッション) で再生します

使用方法

PlayTransient メソッドを使用するには、トランジェントが発生する時間、振幅、ピッチを定義する必要があります。

// PlayTransient の使用例
// トランジェントの時間、振幅、ピッチを設定
double time = 0.5; // 呼び出しから 0.5 秒後
double amplitude = 1.0; // 強いトランジェント
double pitch = 1.0; // 高いピッチ

// オプションのパラメータ
double intensity = 1.0; // 最大強度
int loops = 0; // ループなし
LateralFlag controllerSide = LateralFlag.Global; // 両側で再生
GroupId controller = GroupId.Palm; // コントローラーで再生

// トランジェントハプティック効果を再生
HAR.PlayTransient(time, amplitude, pitch, intensity, loops, controllerSide, controller);

//HAR.PlayTransient(time, amplitude, pitch); デフォルトパラメータで同じ効果

//HAR.PlayTransient(); // 振幅とピッチのデフォルト値 1.0 と 1.0 で、即座にトランジェントを再生します
PlayTransient
PlayTransient

この例では、メソッド呼び出しの 0.5 秒後に、コントローラーの両側で強くて高いピッチのトランジェントハプティック効果が再生されます。

実用例

PlayTransient メソッドは、素早く明瞭なハプティックフィードバックが必要なシナリオに非常に適しています。ユーザー操作への応答、ゲームやアプリケーション内のイベント、複雑なハプティックシーケンスの一部として使用できます。クリック、タップ、短い振動などの短時間の操作のシミュレーションに特に便利です。

PlayTransients

Unity の PlayTransients メソッドは、各々が特定の時刻、強さ、ピッチによって定義される一連のトランジェントハプティック効果を再生するように設計されています。この関数は、一連のタップや振動のようなさまざまな操作をシミュレーションできる、短く明確な触覚の連続を作成するのに最適です。

パラメータ:

  • transients: 各トランジェント効果を定義するトリプレットを構成する double 値の配列です。各トリプレットは、Time (効果が発生する時刻)、Amplitude (効果の強さ)、Pitch (振動のレートまたは「鋭さ」) で構成されます。
  • _intensity (オプション): トランジェント効果全体の強度を設定する double 値です。
  • _loops (オプション): トランジェントのシーケンスが繰り返される回数を指定する整数値です。
  • _controllerSide (オプション): ターゲットのどちら側 (左、右、または両側) でハプティック効果を再生するかを決定する LateralFlag 値です。
    • LateralFlag.Global (デフォルト): ターゲットの両側で再生します (モバイルデバイス -- Android | iOS では唯一の選択肢)
    • LateralFlag.Left: ターゲットの左側で再生します
    • LateralFlag.Right: ターゲットの右側で再生します _bodyPart (オプション): ハプティック効果のターゲットボディパーツ
    • GroupId.Palm (デフォルト): ゲームパッドコントローラー、VR コントローラー、モバイル、または手に関連する任意のハプティックデバイスで再生します
    • GroupId.Index: ゲームパッドのトリガー (例: Xbox コントローラー) で再生します
    • GroupId.Head: 頭やヘッドフォンに関連するハプティックデバイス (例: Razer Kraken V4 Pro) で再生します
    • GroupId.Chest/Waist/Leg: これらのハプティックボディパーツに関連するハプティックデバイス (例: Razer Freyja ハプティッククッション) で再生します

使用方法:

PlayTransients を使用するには、各トランジェント効果のタイミング、振幅、ピッチを指定するトランジェントトリプレットの配列を定義する必要があります。

// time amplitude pitch のトリプレットとして表現されるトランジェント
double[] transient = {
0.0, 1.0, 0.5,
0.25, 0.75, 0.5,
0.5, 0.5, 0.5,
0.75, 0.25, 0.5
};

HAR.PlayTransients(transient);
PlayTransients
PlayTransients

実用例:

PlayTransients は、瞬間的なハプティックフィードバックの連続が必要なアプリケーションで特に便利です。一連のユーザー操作への応答、通知システムの一部、または仮想環境内のテクスチャやパターンをシミュレーションするために使用できます。短時間の触覚イベントのシーケンスを通じて、豊かで多様なハプティック体験を作成する柔軟な方法を提供します。

Play

Unity の Play メソッドは、振幅-時間のペア、または振幅とトランジェントトリプレットの組み合わせを使用して、カスタマイズされたハプティック体験を作成するための 2 つのバリエーションを提供します。

バリエーション 1: 振幅-時間のペアを使用した Play

パラメータ:

  • amplitudes: 「時間-振幅」ペアの配列です。各ペアはハプティック効果がいつ (時間)、どのくらいの強さ (振幅) で発生するかを示します。
  • _intensity (オプション): ハプティック効果全体の強度です。
  • _loops (オプション): 効果をループする回数です。
  • _controllerSide (オプション): ターゲットのどちら側 (左、右、または両側) でハプティック効果を再生するかを決定する LateralFlag 値です。
    • LateralFlag.Global (デフォルト): ターゲットの両側で再生します (モバイルデバイス -- Android | iOS では唯一の選択肢)
    • LateralFlag.Left: ターゲットの左側で再生します
    • LateralFlag.Right: ターゲットの右側で再生します _bodyPart (オプション): ハプティック効果のターゲットボディパーツ
    • GroupId.Palm (デフォルト): ゲームパッドコントローラー、VR コントローラー、モバイル、または手に関連する任意のハプティックデバイスで再生します
    • GroupId.Index: ゲームパッドのトリガー (例: Xbox コントローラー) で再生します
    • GroupId.Head: 頭やヘッドフォンに関連するハプティックデバイス (例: Razer Kraken V4 Pro) で再生します
    • GroupId.Chest/Waist/Leg: これらのハプティックボディパーツに関連するハプティックデバイス (例: Razer Freyja ハプティッククッション) で再生します

使用例:

// 「時間-振幅」ペアの配列を定義
HAR.Play(new double[] {0, 1, 1, 0.5, 2, 1}); // 最大振幅で開始し、1 秒で 0.5 に減衰し、2 秒で 1 に戻る振動を再生します
基本的な再生パターン
基本的な再生パターン

このバリエーションは、各ハプティックパルスのタイミングと強さが重要となる、リズミカルまたはパターン化された触覚を作成するのに最適です。

バリエーション 2: 振幅とトランジェントを使用した Play

パラメータ:

  • amplitudes: 振幅値 (効果の強さ) の配列で、0 (効果なし) から 1 (最大効果) の範囲です。
  • transients: トランジェントトリプレットの配列で、それぞれ「時間-振幅-ピッチ」の形式です。時間の値は秒で表され、ピッチと振幅の値は 0 から 1 の間です。
  • その他のパラメータ (_intensity、_loops、_controllerSide、_controller) はバリエーション 1 と同様です。

使用例:

// 「時間-振幅」ペアとしての振幅配列
double[] amplitude = {
0.0, 0.5,
2.0, 0.5
};

//「時間-振幅-ピッチ」のトリプレットとして表現されるトランジェント
double[] transient = {
0.5, 1, 0.5,
1.5, 0.75, 0.5
};

HAR.Play(amplitude, transient, 1.0, 1, LateralFlag.Left, GroupId.Palm); // 配列で記述された複雑なパターンを、コントローラーの左側で強度 1 で 2 回再生します。Intensity Controls を参照してください
振幅とトランジェントの例
振幅とトランジェントの例

このバリエーションでは、安定した振幅とトランジェント効果を組み合わせたハプティック効果を再生でき、豊かで多様な触覚エクスペリエンスを提供します。

実用例:

Play メソッドの両方のバリエーションにより、多様なハプティックフィードバックを作成できます。環境効果のシミュレーション、物理的な相互作用の模倣、ユーザーインターフェイスの強化など、どのようなケースでも、これらのメソッドは Unity プロジェクトに必要な触覚エクスペリエンスを正確に作り上げる柔軟性を提供します。「振幅-時間」ペアを調整したり、振幅とトランジェントを組み合わせたりすることで、インタラクティブシナリオの特定の要件に合わせてハプティックフィードバックをカスタマイズできます。

PlayAdvanced

PlayAdvanced は、パラメトリックハプティック効果を再生するために設計された汎用性の高い Unity メソッドです。このメソッドにより、振幅、ピッチ、トランジェント効果に指定したパラメータを使用して複雑なハプティックパターンを作成でき、触覚フィードバックを高度にカスタマイズできます。

パラメータ:

  • _amplitude:「時間-値」ペア形式の振幅値の配列です。各ペアは特定の瞬間におけるハプティック効果の強さを定義します。
  • _pitch: 同じく「時間-値」ペア形式のピッチ値の配列です。これらは時間経過におけるハプティック効果の「鋭さ」や「ブザー音的な感じ」を定義します。
  • _freqMin (オプション): ハプティック効果が到達できる最小周波数 (または最低ピッチ) です。
  • _freqMax (オプション): ハプティック効果で達成可能な最大周波数 (または最高ピッチ) です。
  • _transient: (オプション):「時間-振幅-ピッチ」のトリプレット形式のトランジェント値の配列です。トランジェントは、ハプティックパターンに瞬間的なスパイクやバーストを追加します。
  • _intensity (オプション): ハプティック効果全体の強度です。
  • _loops (オプション): ハプティックパターンをループする回数です。
  • _controllerSide (オプション): ターゲットのどちら側 (左、右、または両側) でハプティック効果を再生するかを決定する LateralFlag 値です。
    • LateralFlag.Global (デフォルト): ターゲットの両側で再生します (モバイルデバイス -- Android | iOS では唯一の選択肢)
    • LateralFlag.Left: ターゲットの左側で再生します
    • LateralFlag.Right: ターゲットの右側で再生します _bodyPart (オプション): ハプティック効果のターゲットボディパーツ
    • GroupId.Palm (デフォルト): ゲームパッドコントローラー、VR コントローラー、モバイル、または手に関連する任意のハプティックデバイスで再生します
    • GroupId.Index: ゲームパッドのトリガー (例: Xbox コントローラー) で再生します
    • GroupId.Head: 頭やヘッドフォンに関連するハプティックデバイス (例: Razer Kraken V4 Pro) で再生します
    • GroupId.Chest/Waist/Leg: これらのハプティックボディパーツに関連するハプティックデバイス (例: Razer Freyja ハプティッククッション) で再生します

使用方法:

PlayAdvanced は、繊細で動的なハプティックパターンが必要なときに使用します。振幅、ピッチ、およびオプションでトランジェント効果の配列を提供することで、非常に具体的なハプティック体験をカスタマイズできます。

// 0 ~ 2 秒の間で振幅 0.5
double[] amplitudes = {
1.0, 0.5,
3.0, 0.5
};

// 0 ~ 1 のピッチ
double[] pitch = {
1.0, 1.0,
3.0, 0.0
};

HAR.PlayAdvanced(amplitudes, pitch);
振幅とピッチの例
振幅とピッチの例
// 振幅配列
double[] amplitudes = {
0.0, 0.0,
1.0, 1.0,
2.0, 0.5,
3.0, 0.25,
4.0, 0.25
};

// ピッチ配列
double[] pitch = {
0.0, 1,
2.0, 0,
4.0, 1
};

// トランジェント配列
double[] transients = {
0.5, 1, 0.5,
3.5, 0.5, 0.5
};

double _fmin = 30;
double _fmax = 400;

HAR.PlayAdvanced(amplitudes, pitch, _fmin, _fmax, transients);
複雑なパターン
複雑なパターン

例: 振幅を増減させ、長い余韻を持たせます。ピッチを最大から最小、最大へとスワイプして「爆弾投下」効果を作成します。周波数範囲は、DualSense などの特定のコントローラーのハプティクス機能を活用するために拡張されています。

実用例:

PlayAdvanced は、詳細なハプティックフィードバックが不可欠なシナリオで特に有益です。振幅、ピッチ、トランジェントの各要素を制御できることで、開発者は意図した仮想的な操作に密接に一致するハプティック体験を作り上げることができます。

PlayHapticEffect

Unity の PlayHapticEffect メソッドは、.haps ファイルを使用してハプティックフィードバックを再生するように設計されています。

パラメータ:

  • material: ハプティック効果のデータを含む HapticMaterial オブジェクトです。これが再生されるハプティック効果になります。
  • intensity (オプション): ハプティック効果の強度を表す double 値です。ハプティックフィードバックの強さを定義します。
  • loops (オプション): ハプティック効果を繰り返す回数を指定する int 値です。値 0 はループなしで 1 回再生することを意味し、正の値は繰り返し回数を設定します。
  • _controllerSide (オプション): ターゲットのどちら側 (左、右、または両側) でハプティック効果を再生するかを決定する LateralFlag 値です。
    • LateralFlag.Global (デフォルト): ターゲットの両側で再生します (モバイルデバイス -- Android | iOS では唯一の選択肢)
    • LateralFlag.Left: ターゲットの左側で再生します
    • LateralFlag.Right: ターゲットの右側で再生します _bodyPart (オプション): ハプティック効果のターゲットボディパーツ
    • GroupId.Palm (デフォルト): ゲームパッドコントローラー、VR コントローラー、モバイル、または手に関連する任意のハプティックデバイスで再生します
    • GroupId.Index: ゲームパッドのトリガー (例: Xbox コントローラー) で再生します
    • GroupId.Head: 頭やヘッドフォンに関連するハプティックデバイス (例: Razer Kraken V4 Pro) で再生します
    • GroupId.Chest/Waist/Leg: これらのハプティックボディパーツに関連するハプティックデバイス (例: Razer Freyja ハプティッククッション) で再生します
using UnityEngine;
using Interhaptics.Core;

public class HapticEffectPlayer : MonoBehaviour
{
public HapticMaterial myHapticMaterial; // Unity Inspector でこれを割り当てます

void Start()
{
// 開始時にハプティック効果を再生
PlayMyHapticEffect();
}

void PlayMyHapticEffect()
{
if (myHapticMaterial != null)
{
HAR.PlayHapticEffect(myHapticMaterial);
Debug.Log("Haptic effect played successfully!");
}
else
{
Debug.LogError("Haptic material is not assigned!");
}
}
}

PlayHapticEffectId

Unity の PlayHapticEffectId メソッドは、指定した haps ファイルの ID を使用し、カスタムボディパーツをターゲットとしてハプティック効果を再生するように設計されています。

パラメータ:

  • id: HapticMaterial の ID (整数)
  • intensity (オプション): ハプティック効果の強度を表す double 値です。ハプティックフィードバックの強さを定義します。
  • loops (オプション): ハプティック効果を繰り返す回数を指定する int 値です。値 0 はループなしで 1 回再生することを意味し、正の値は繰り返し回数を設定します。
  • _controllerSide (オプション): ターゲットのどちら側 (左、右、または両側) でハプティック効果を再生するかを決定する LateralFlag 値です。
    • LateralFlag.Global (デフォルト): ターゲットの両側で再生します (モバイルデバイス -- Android | iOS では唯一の選択肢)
    • LateralFlag.Left: ターゲットの左側で再生します
    • LateralFlag.Right: ターゲットの右側で再生します _bodyPart (オプション): ハプティック効果のターゲットボディパーツ
    • GroupId.Palm (デフォルト): ゲームパッドコントローラー、VR コントローラー、モバイル、または手に関連する任意のハプティックデバイスで再生します
    • GroupId.Index: ゲームパッドのトリガー (例: Xbox コントローラー) で再生します
    • GroupId.Head: 頭やヘッドフォンに関連するハプティックデバイス (例: Razer Kraken V4 Pro) で再生します
    • GroupId.Chest/Waist/Leg: これらのハプティックボディパーツに関連するハプティックデバイス (例: Razer Freyja ハプティッククッション) で再生します
var textAsset = /* ... */; // UnityEngine.TextAsset (例: haps ファイルの内容)
int hapticEffectId = HAR.AddHM(textAsset);
HAR.PlayHapticEffectId(hapticEffectId); // 追加したばかりのハプティック効果をデフォルトのコントローラーで再生します

StopCurrentHapticEffect

Unity の StopCurrentHapticEffect メソッドは、進行中のハプティックフィードバックを即座に停止するように設計されています。この関数は、ハプティック効果が必要以上に長引かず、関連するゲームやアプリケーションのイベントと同期するようにするために重要です。

使用方法:

このメソッドは、特にモバイルアプリケーション (Android または iOS) で現在実行中のすべてのハプティックアクティビティを停止するために使用されます。パラメータなしのシンプルな呼び出しです。

// 任意のタイミングでハプティック効果を停止する
HAR.StopCurrentHapticEffect();

HapticPreset

HapticPreset.Play は、Apple の Human Interface Guidelines にインスパイアされた、事前定義されたハプティック効果を再生できる Unity 環境内のメソッドです。この機能は Interhaptics.Utils 名前空間の HapticPreset クラスの一部であり、さまざまな触覚を表すハプティックパターンを提供するように設計されています。

Interhaptics.Utils 名前空間 (using Interhaptics.Utils;) を必ずインクルードしてください。

パラメータ:

  • presetType: 再生するハプティックプリセットのタイプを定義する列挙型 (PresetType) です。PresetType は Apple の Human Interface ガイドラインに基づいています。これらの各プリセット (Selection、Light、Medium、Heavy、Rigid、Soft、Success、Failure、Warning) は、触覚を定義する特定のハプティックパラメータのセットに対応しています。これらのプリセットは、アプリケーションにハプティックフィードバックを実装するプロセスを簡素化するように設計されており、軽いタップ (Light)、より強い振動 (Heavy)、成功を示唆するパターンなど、特定の触覚エクスペリエンスを簡単に呼び起こすことができます。

使用方法:

HapticPreset.Play を使用するには、希望する PresetType 列挙値を渡すだけで済みます。メソッドは対応するハプティックパターンを取得し、ハプティック効果を開始します。

using Interhaptics.Utils;

void Start()
{
HapticPreset.Play(HapticPreset.PresetType.Success); // 'Success' のハプティックパターンを再生します
}

Event Control

SetEventLoop

  • パラメータ:
    • _hMaterialId: int -- ハプティックソースの ID。
    • _isLooping: bool -- ソースをループする場合は True。
  • 概要: 特定のハプティックソースのループフラグを設定します。
  • 使用例:
HAR.SetEventLoop(1, true); // ID 1 のソースのループを有効にします

GetVibrationLength

  • パラメータ:
    • _id: int -- ハプティック効果の識別子。
  • 戻り値: double -- 振動の長さ。
  • 概要: 指定したハプティック効果の振動の長さを取得します。
  • 使用例:
// ID 1 のハプティック効果の振動長を秒単位で取得
double vibrationLength = HAR.GetVibrationLength(1);

PlayEvent

  • パラメータ:
    • _hMaterialId: int -- 再生するハプティックソースの ID。
    • _vibrationOffset: double -- 振動オフセット。
    • _textureOffset: double -- テクスチャオフセット。
    • _stiffnessOffset: double -- スティフネスオフセット。
  • 概要: 指定したオフセットでハプティックソースのレンダリング再生を開始します。
  • 使用例:
// ID 1 のハプティックイベントを指定したオフセット (0.2 秒の遅延) で再生
HAR.PlayEvent(1, 0.2, 0.0, 0.0);

StopEvent

  • パラメータ:
    • _hMaterialId: int -- 停止するハプティックソースの ID。
  • 概要: ハプティックソースのレンダリング再生を停止します。
  • 使用例:
HAR.StopEvent(1); // ID 1 のハプティックイベントを停止します

ClearActiveEvents

  • 概要: メモリからアクティブなすべてのハプティックソースを削除します。
  • 使用例:
HAR.ClearActiveEvents(); // メモリからすべてのアクティブなハプティックイベントをクリアします

ClearInactiveEvents

  • 概要: メモリから非アクティブなすべてのハプティックソースを削除します。
  • 使用例:
HAR.ClearInactiveEvents(); // メモリからすべての非アクティブなハプティックイベントをクリアします

ClearEvent

  • 概要: アクティブかどうかに関係なく、特定のハプティックソースをクリアします。
  • 注記:
    • 振幅、ピッチ、トランジェントの配列がペアまたはトリプレットで正しく整形されており、サイズパラメータがそれらの長さを正確に反映していることを確認してください。
    • ループ機能を使用して連続した効果を作成でき、背景的な感覚や繰り返しの通知に便利です。
  • 使用方法:
HAR.ClearEvent(hMaterialId);

SetEventOffsets

  • パラメータ:
    • _hMaterialId: int -- ハプティックソースの ID。
    • _vibrationOffset: double -- 振動オフセット。
    • _textureOffset: double -- テクスチャオフセット。
    • _stiffnessOffset: double -- スティフネスオフセット。
  • 概要: 特定のハプティックソースのオフセットを設定します。
  • 使用例:
HAR.SetEventOffsets(1, 0.2, 0.3, 0.1); // ID 1 のハプティックイベントのオフセットを設定します

ComputeAllEvents

  • パラメータ:
    • _curTime: double -- 現在の時刻 (秒)。
  • 概要: 特定の時刻にすべてのハプティックバッファのレンダリングをトリガーします。
  • 使用例:
HAR.ComputeAllEvents(Time.time); // 現在の時刻に基づいてすべてのイベントを計算します

AddTargetToEventMarshal

  • パラメータ:
    • _hMaterialId: int -- ハプティックソースの ID。
    • _target: CommandData[] -- ターゲットの CommandData 配列。
    • _size: int -- ターゲット配列のサイズ。
  • 概要: ハプティックソースの範囲にターゲットを追加します。
  • 使用例: (このメソッドは private のため、通常はクラス内部で使用されます。)

AddTargetToEvent

  • 概要: ハプティックイベントにターゲットを追加します。
  • パラメータ:
    • _hMaterialId: int -- ハプティック効果の ID。
    • _target: List<CommandData> -- ターゲットを表す CommandData のリスト。
  • 使用例:
// ID 1 のハプティック効果にターゲットを追加します
List<CommandData> targets = new List<CommandData> { /* ... */ };
HAR.AddTargetToEvent(1, targets);

RemoveTargetFromEventMarshal

  • パラメータ:
    • _hMaterialId: int -- ハプティックソースの ID。
    • _target: CommandData[] -- ターゲットの CommandData 配列。
    • _size: int -- ターゲット配列のサイズ。
  • 概要: ハプティックソースの範囲からターゲットを削除します。
  • 使用例: (このメソッドは private のため、通常はクラス内部で使用されます。)

RemoveTargetFromEvent

  • 概要: ハプティックイベントからターゲットを削除します。
  • パラメータ:
    • _hMaterialId: int -- ハプティック効果の ID。
    • _target: List<CommandData> -- ターゲットを表す CommandData のリスト。
  • 使用例:
HAR.RemoveTargetFromEvent(1, targets);

RemoveAllTargetsFromEvent

  • パラメータ:
    • _hMaterialId: int -- ハプティックソースの ID。
  • 概要: ハプティックソースの範囲からすべてのターゲットを削除します。
  • 使用例:
HAR.RemoveAllTargetsFromEvent(1); // ID 1 のハプティックイベントからすべてのターゲットを削除します

Lifecycle

AddHM

  • パラメータ:
    • _material: UnityEngine.TextAsset または HapticMaterial -- 追加するハプティック効果。
  • 戻り値: int -- ハプティック効果の ID。ロードに失敗した場合は -1。
  • 概要: .haps ファイルまたはテキスト文字列からハプティック効果を Unity に追加します。.haps ファイル形式を参照してください。
  • 使用例:
var textAsset = /* ... */; // UnityEngine.TextAsset
int hapticEffectId = HAR.AddHM(textAsset);

AddHMString

HAPS 準拠の JSON 文字列から直接、ハプティックマテリアルをシステムに追加します。StreamingAssets または Resources からファイルをロードする場合に便利です。

string hapsJsonContent;
// haps 準拠のコンテンツで文字列を初期化します (例: Resources または StreamingAssets からファイルを読み込みます)
int hapticEffectId = HAR.AddHMString(jsonContent);

AddParametricEffect

  • パラメータ

    • double[] _amplitude: 指定した時刻にレンダリングされる振動振幅の配列です。各振幅は 0 (振動なし) から 1 (最大振動) の間で表現し、関連する時刻 (秒) とペアにする必要があります。振動振幅は、それぞれの時刻における 2 つの振幅値の間で線形補間されます。
    • int _amplitudeSize: 振幅配列のサイズ。
    • double[] _pitch: 指定した時刻にレンダリングされるピッチ値の配列です。ピッチは、振動周波数の正規化された値で、0 (_freqMin) から 1 (_freqMax) です。各ピッチは 0 から 1 の間で表現し、関連する時刻 (秒) とペアにする必要があります。
    • int _pitchSize: ピッチ配列のサイズ。
    • double _freqMin: ピッチ用の振動触覚出力周波数の最小値 (Hz)。
    • double _freqMax: ピッチ用の振動触覚出力周波数の最大値 (Hz)。
    • double[] _transient: 特定の時刻にレンダリングされるトランジェント効果の配列です。各値「時間―振幅-ピッチ」のトリプルとして表現する必要があります。振幅とピッチの値は 0 から 1 の間でなければなりません。時刻は秒で表されます。
    • int _transientSize: トランジェント配列のサイズ。
    • bool _isLooping: 効果をループするかどうかを示します。
  • 戻り値

    • int: 作成されたハプティックソースの ID。作成に失敗した場合は -1 を返します。
  • 概要: 振幅、ピッチ、トランジェントパラメータを使用してハプティック効果を作成するために設計されたメソッド。

  • ハプティックレンダリングのガイドライン:

    • 振幅とピッチは、定義された値の間で線形補間されます。
    • 各プロパティの最後の値が実行されると、その最後の値が効果の終了まで保持されます。
    • ハプティック効果の長さは、振幅またはトランジェントキーフレーム間で伝達される最新の値によって決定されます。
    • 宣言されていない場合のデフォルトの周波数値は _freqMax です。
  • 注記

    • 振幅、ピッチ、トランジェントの配列がペアまたはトリプレットで正しく整形されており、サイズパラメータがそれらの長さを正確に反映していることを確認してください。
    • ループ機能を使用して連続した効果を作成でき、背景的な感覚や繰り返しの通知に便利です。
// 振幅配列
double[] amplitude = { };
// ピッチ配列
double[] pitch = { };
// トランジェント配列
double[] transient = {};

int hapticSourceId = HAR.AddParametricEffect(
amplitude, amplitude.Length, // 振幅配列とそのサイズ
pitch, pitch.Length, // ピッチ配列とそのサイズ
_freqMin, _freqMax, // 最小および最大周波数範囲
transient, transient.Length, // トランジェント配列とそのサイズ
false // この例ではループなし
);

if (hapticSourceId != -1)
{
// ハプティックソースが正常に作成されました
// ここにボディパーツを割り当ててハプティクスをトリガーするロジックを追加します
}

Init

  • 概要: Interhaptics Engineのコンポーネントとモジュールを初期化します。
    • Haptic Material Manager: ハプティック効果のロードと保存を担当するモジュール。
    • Human Avatar Manager: デバイス、ヒューマンアバター、エクスペリエンス間のマッピングを担当するモジュール。
    • Haptic Event Manager: ハプティックソースの制御を担当するモジュール。
  • 戻り値: bool -- 常に true で、初期化の完了を示します。
  • 使用例:
if (HAR.Init())
{
// 初期化成功
}

Quit

  • 概要: Interhaptics Engineのさまざまなコンポーネントとモジュールをクリーンアップします。この関数はアプリケーションを終了する前に呼び出す必要があります。
  • 使用例:
// アプリケーションを終了する前にこのメソッドを呼び出します
HAR.Quit();

UpdateHM

  • パラメータ:
    • _id: int -- 更新するハプティック効果の ID。
    • _material: UnityEngine.TextAsset または HapticMaterial -- 新しいハプティック効果。
  • 戻り値: bool -- 効果が正常に更新された場合は True。
  • 概要: 既にロード済みのハプティック効果のコンテンツを置き換えます。
  • 使用例:
var newMaterial = /* ... */; // HapticEffect
bool updated = HAR.UpdateHM(1, newMaterial);

Intensity Control

SetGlobalIntensity

  • パラメータ:
    • _intensity: double -- 正の値で、0 は強度なしを意味し、基準値は 1 です。
  • 概要: エンジン全体のグローバルレンダリング強度を設定します。
  • 使用例:
HAR.SetGlobalIntensity(0.5); // 強度を中程度のレベルに設定します

GetGlobalIntensity

  • 戻り値: double -- グローバル強度。ミキサーが初期化されていない場合は -1。
  • 概要: エンジンのグローバルレンダリング強度係数を取得します。
  • 使用例:
double intensity = HAR.GetGlobalIntensity();
if (intensity != -1)
{
// 取得した強度を処理します
}

SetEventIntensity

  • パラメータ:
    • _hMaterialId: int -- ハプティックソースの ID。
    • _intensity: double -- 強度係数値。
  • 概要: 特定のソースのハプティック強度を設定します。
  • 使用例:
HAR.SetEventIntensity(1, 0.75); // ID 1 のソースの強度を設定します

SetTargetIntensityMarshal

  • パラメータ:
    • _hMaterialId: int -- ハプティックソースの ID。
    • _target: CommandData[] -- ハプティックターゲットを表す配列。
    • _size: int -- ターゲット配列のサイズ。
    • _intensity: double -- 新しい強度係数。
  • 概要: ソースの特定のターゲットのハプティック強度を更新します。
  • 使用例:
// ID 1 のハプティック効果に対するターゲット強度を設定します
CommandData[] targetData = new CommandData[] { /* ... */ };
HAR.SetTargetIntensityMarshal(1, targetData, targetData.Length, 0.8);

SetTargetIntensity

  • 概要: ハプティックイベントの特定のターゲットの強度を設定します。
  • パラメータ:
    • _hMaterialId: int -- ハプティック効果の ID。
    • _target: List<CommandData> -- ターゲットを表す CommandData のリスト。
    • _intensity: double -- 強度係数値。
  • 使用例:
HAR.SetTargetIntensity(1, targets, 0.75);