Unity 向け iOS/visionOS 接続ガイド
bHaptics Unity SDK 2.8.0 以降、iOS および visionOS の実機のみに適用されます。[bHapticsUIApple] プレハブと BhapticsAppleDevices API は、エディターや他のプラットフォームでは何も動作しません。iOS/visionOS でのみ使用し、必ず実機でテストしてください。
Windows/macOS/Android では、bHaptics Player アプリがデバイス接続を管理します。iOS/visionOS ではそれができません。アプリサンドボックスが、あるアプリが他のアプリのために Bluetooth 接続を維持することを許可しないためです。代わりに、各アプリが CoreBluetooth を通じてデバイスを直接スキャンして接続します。
SDK は BhapticsAppleDevices API と、サンプル UI プレハブ [bHapticsUIApple] を提供します。以下の手順ではこのプレハブを使用します。
- Bluetooth 使用目的の説明を追加する
- サンプル UI プレハブでスキャンと接続を管理する
- ハプティックを再生する
Bluetooth 使用目的の説明を追加する
ハプティックデバイスは Bluetooth で通信するため、アプリには NSBluetoothAlwaysUsageDescription キーが必要です。bHaptics SDK は このキーを自動的に追加しません ので、ご自身で追加する必要があります。
追加しなかった場合:
- アプリが初めて CoreBluetooth にアクセスしたとき(たとえば、SDK がペアリング済みデバイスを再接続するために Bluetooth マネージャーを初期化するとき、またはスキャンを開始するとき)、iOS は アプリを即座にクラッシュさせます:
This app has crashed because it attempted to access privacy-sensitive datawithout a usage description. The app's Info.plist must contain anNSBluetoothAlwaysUsageDescription key ...
- App Store Connect のアップロード検証は、アプリが実行時にスキャン API をまったく呼び出さない場合でも、ITMS-90683 (Missing purpose string) でビルドを拒否することがあります。ビルドされたアプリケーションが CoreBluetooth API を参照しているためです。
説明の追加方法
生成された Xcode プロジェクトで、アプリのメインターゲット(iOS ビルドの場合は通常 Unity-iPhone)を選択し、Info タブを開きます。Privacy - Bluetooth Always Usage Description を追加するか、Info.plist を直接編集します:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app uses Bluetooth to connect to nearby bHaptics haptic devices (such as TactSuit) and play haptic feedback.</string>
アプリが Bluetooth を使用する理由を説明する、アプリ固有の 文章を記述してください。曖昧または一般的な文章は App Review で拒否されることがあります(ガイドライン 5.1.1)。
権限のポップアップはアプリを初めて起動したときに表示され、この文章が示されます。ローカライズには InfoPlist.strings を使用してください。
サンプル UI を使って接続する
[bHapticsUIApple] プレハブは、bHaptics デバイスをスキャンして接続する方法を示すサンプル UI で、内部的に BhapticsAppleDevices API を使用しています。
[bHapticsUIApple] プレハブは iOS/visionOS でのみ使用してください。
このガイドは、bHaptics Unity SDK をすでにインポートし、ハプティックアプリを連携済みであることを前提としています。まだの場合は、先に Unity ガイド をご覧ください。
UI プレハブを追加する
![シーンに配置された [bHapticsUIApple]](/ja/assets/images/apple-guide-scene-9b3d2dfc399b62c74919d28a04b3abc7.jpg)
Assets/Bhaptics/SDK2/Prefabs/[bHapticsUIApple] プレハブをシーンに配置します。
スキャン

- Scan をタップすると、周辺の bHaptics デバイスを検索します。
- スキャンは 30 秒後に自動的に停止 し、ボタンに残り時間のカウントダウンが表示されます。もう一度タップすると、すぐにスキャンを停止します。
- リストには 今回のスキャンで見つかったデバイスと、以前にペアリングしたデバイスが一緒に 表示されます。
接続

- デバイスの Connect をタップすると、ペアリング(記憶)と接続が一度に行われます。ステータスが緑色に変わり、
Connectedと表示されます。 - Disconnect は、デバイスのペアリングを解除(忘れる)し、接続を切断します。
各デバイスには接続ステータスが表示されます。ステータスは次の 3 種類です:
| ステータス | 意味 |
|---|---|
[Position] - Connected (緑) | 接続済み |
[Position] - Paired (グレー) | 記憶されているが、現在は接続されていない |
[Position] | スキャンされたが、ペアリングされていない |
ペアリング情報は、iOS の設定アプリにおけるシステムレベルの Bluetooth ペアリングではなく、アプリ自身のサンドボックス に保存されます。
- アプリごとに個別にペアリング する必要があります。別のアプリで同じデバイスを使用するには、そのアプリから再度接続してください。
- 一度ペアリングすると、次に SDK が初期化されるときにデバイスが 自動的に再接続されます(アプリ起動時に
[bHaptics]プレハブがこれを行います)。 - ペアリングしていないデバイスが自ら接続することはありません — スキャンとペアリングは常に明示的です(マルチユーザーや現場イベントに便利です)。
次のステップ: ハプティックの再生
スキャンと接続はそれ自体で動作しますが、イベントを再生するには SDK が初期化されている必要があります。初期化は [bHaptics] プレハブが処理します。最初のシーンにこのプレハブを追加してください(Unity ガイドの Add Prefab for Initialization を参照)。
プレハブを配置したら、いつもどおりイベントを再生します:
BhapticsLibrary.Play("my_event"); // Plays on the connected device
付録: UI を使わずに直接制御する
[bHapticsUIApple] はサンプルにすぎません — 同じ低レベル API を使って独自の接続 UI を作成できます。リファレンスの Class BhapticsAppleDevices をご覧ください。