Unity版の箱庭は、ARアプリを作成するための簡単なライブラリを提供します。この文書では、ライブラリの内容と使用方法について説明します。
本ライブラリは以下の環境で動作することを確認しています。
- iOS(iPhone/iPad)
- Android
また、本ライブラリを使用する場合は、Unityの以下のパッケージが必要となります。
- AR Foundation
- Apple ARKit XR Plugin
箱庭とAR端末は、UDP通信で接続します(下図)。現時点では、1対1の構成になります。
通信ポート:
- AR端末:
54002
UDPポートで受信します。 - 箱庭は:
54001
UDPポートで受信します。
AR端末と箱庭側で登場するアクターは下図のとおりです。
どちらにも Avator と Player が存在しており、AR端末と箱庭側とで対の関係になっています。 それぞれの役割は以下のとおりです。
- Player
- 自律的に移動するアクターです。
- 箱庭側のPlayerの例としては、仮想ロボットなどです。
- AR端末側のPlayerの例としては、AR端末そのものになります。
- Avator
- Playerの分身であり、Playerの動きに追従して動きます。
- 箱庭側のAvatorの例としては、AR端末のアバターがあります。他にもAR端末内で自律的に動作するPlayerがいる場合は、それらも対象となります。
- AR端末側のAvatorの例としては、箱庭側に存在する仮想ロボットなどです。
AR端末と箱庭の間でやり取りする通信データは、Playerの名前、位置。姿勢および内部状態です。
- name:名前
- nameLength:名前の長さ
- position(x, y, z):Unity座標系での位置
- rotation(x, y, z):Unity座標系での姿勢
- state:内部状態(int型)
通信データの送信周期は、UnityのFixed Timestep
です。
内部クラス設計は下図のとおりです。
ソース配置場所:
Unityのゲームオブジェクトにアタッチするクラスは以下のとおり。
- HakoObjectSynchronizer
- Emptyなゲームオブジェクトを作成し、アタッチします。
- ArAvatorObject
- Avator対象となるゲームオブジェクトにアタッチします。
- ArPlayerObject
- Player対象となるゲームオブジェクトにアタッチします。
本ライブラリを利用するには、アタッチしたスクリプトに対して、各種設定を追加で行う必要があります。
AR
(名前は任意です)というEmptyなゲームオブジェクトをHierachyビューに配置し、HakoObjectSynchronizer
をアタッチします。
次に、Inspectorビューを参照し、HakoObjectSynchronizer
の設定項目を埋めます。
- Players
ArPlayerObject
をアタッチしたゲームオブジェクトを配列要素として全て追加します。
- Avators
ArPlayerObject
をアタッチしたゲームオブジェクトを配列要素として全て追加します。
- Server_ipaddr
- 箱庭を実行するマシンのIPアドレスを設定します。
- Server_portno
- 箱庭を実行するマシンの受信UDPポート番号を設定します。54001がデフォルトです。
- Timeout_sec:UDP受信スレッドのタイムアウト値です(デフォルトのままで、変更不要です)。
- Scale:基本的には
1
を設定してください。もし、箱庭とAR端末とで縮尺を変更したい場合に利用できます。 - Client_ipaddr
- AR端末のIPアドレスを設定します。
- Client_portno
- AR端末の受信UDPポート番号を設定します。54002がデフォルトです。
AR
(名前は任意です)というEmptyなゲームオブジェクトをHierachyビューに配置し、HakoObjectSynchronizer
をアタッチします。
次に、Inspectorビューを参照し、HakoObjectSynchronizer
の設定項目を埋めます。
- Players
ArPlayerObject
をアタッチしたゲームオブジェクトを配列要素として全て追加します。
- Avators
ArPlayerObject
をアタッチしたゲームオブジェクトを配列要素として全て追加します。
- Server_ipaddr
- AR端末のIPアドレスを設定します。
- Server_portno
- AR端末の受信UDPポート番号を設定します。54002がデフォルトです。
- Timeout_sec:UDP受信スレッドのタイムアウト値です(デフォルトのままで、変更不要です)。
- Scale:基本的には
1
を設定してください。もし、箱庭とAR端末とで縮尺を変更したい場合に利用できます。 - Client_ipaddr
- 箱庭を実行するマシンのIPアドレスを設定します。
- Client_portno
- 箱庭を実行するマシンの受信UDPポート番号を設定します。54001がデフォルトです。
Build Settings を開きます。
Platformを iOS にして、switch platform
を選択します。
既存のシーンを削除します。
Package Managerで、Unityのレジストリを選択します。
AR foundation
と Apple ARKit XR Plugin
をインストールします。
最新バージョンd値は、Apple ARKit XR Plugin
のエラーが出ることがあります。
BuildFailedException: ARKit requires a Camera Usage Description (Player Settings > iOS > Other Settings > Camera Usage Description)
この場合は、エラー内容に従って、Camera Usage Description
に何か文字列を入れましょう。今回は、Hakoniwa
と入れておきます。
XR Plugin-in Management
の Apple ARKit
を選択します。
Project vValidation
のエラーを解消するために、Fix
をクリックします。
ARDevice Scene を選択します。
Hierarchyビューの AR
を選択し、インスペクタービューの Server_ipaddr
に iphone のIPアドレスを設定します。
Client_ipaddr には、Mac の IPアドレスを設定します。
Hakoniwa Scene を選択します。
Hierarchyビューの AR
を選択し、インスペクタービューの Server_ipaddr
に Mac のIPアドレスを設定します。
Client_ipaddr には、iphone の IPアドレスを設定します。
Build Settings
のシーンに、ARDevice
を追加し、Build
をクリックします。
Build
ディレクトリとして、適当な空の場所を作り、選択します。
ビルド成功すると、Xcodeでビルド可能なプロジェクトが作成されます。
準備物:
- iphone
- Appleアカウント認証が必要になります
- Mac
以下のステップで設定およびインストールします。
- iphoneをソフトウェアアップデートをする(最新にする)
- iphoneとMacをUSB接続し、Macを信頼する
- iphoneをデベロッパーモードにする
- XCodeで認証する
- Xcodeでのビルド
- 当該アプリを信頼する
設定
=> プライバシーとセキュリティ
=> デベロッパーモード
を オン
にしてください。
もし、デベロッパーモード
が表示されない場合は、「XCodeで認証する」と「Xcodeでのビルド」を先に実行することで表示されるようになります。
参考:https://zenn.dev/m_j_t/articles/17f6a8631b88f8
XcodeのSigning & Capabilities
を開き、下図のように指定してください。

注意:Bundle Identifier は、インストール対象端末後に変える必要がある
デベロッパモードのiphoneとMacをUSB接続します。
次に、Buildディレクトリを Xcode でオープンします。
Signing & Capabilities
で、以下のように Teamには AppleID と Bundle Identifier には、com.hakoniwa-lab.picomodel
と入力して、ビルドボタンをクリックします。
設定
=> 一般
=> VPNとデバイス管理
を開き、当該ARアプリ(model)を信頼するようにしてください。