Skip to content

Latest commit

 

History

History
273 lines (163 loc) · 12 KB

README-ar.md

File metadata and controls

273 lines (163 loc) · 12 KB

ARアプリ向け箱庭Unityプラグライン

目次

はじめに

Unity版の箱庭は、ARアプリを作成するための簡単なライブラリを提供します。この文書では、ライブラリの内容と使用方法について説明します。

動作環境

本ライブラリは以下の環境で動作することを確認しています。

  • iOS(iPhone/iPad)
  • Android

また、本ライブラリを使用する場合は、Unityの以下のパッケージが必要となります。

  • AR Foundation
  • Apple ARKit XR Plugin

設計情報

アーキテクチャ

箱庭とAR端末は、UDP通信で接続します(下図)。現時点では、1対1の構成になります。

スクリーンショット 2024-01-22 9 38 08

通信ポート:

  • AR端末:54002 UDPポートで受信します。
  • 箱庭は:54001 UDPポートで受信します。

内部構成と通信データ

AR端末と箱庭側で登場するアクターは下図のとおりです。

スクリーンショット 2024-01-22 9 50 09

どちらにも 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です。

内部クラス

内部クラス設計は下図のとおりです。

スクリーンショット 2024-01-22 10 42 58

ソース配置場所:

https://github.com/toppers/hakoniwa-unity-simasset-plugin/tree/main/plugin-srcs/Assets/Plugin/src/Unity/AR

Unityのゲームオブジェクトにアタッチするクラスは以下のとおり。

  • HakoObjectSynchronizer
    • Emptyなゲームオブジェクトを作成し、アタッチします。
  • ArAvatorObject
    • Avator対象となるゲームオブジェクトにアタッチします。
  • ArPlayerObject
    • Player対象となるゲームオブジェクトにアタッチします。

設定情報

本ライブラリを利用するには、アタッチしたスクリプトに対して、各種設定を追加で行う必要があります。

箱庭側

AR(名前は任意です)というEmptyなゲームオブジェクトをHierachyビューに配置し、HakoObjectSynchronizer をアタッチします。

スクリーンショット 2024-01-22 10 48 40

次に、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端末側

AR(名前は任意です)というEmptyなゲームオブジェクトをHierachyビューに配置し、HakoObjectSynchronizer をアタッチします。

スクリーンショット 2024-01-22 10 59 45

次に、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がデフォルトです。

Unity設定

Build Settings

Build Settings を開きます。

スクリーンショット 2023-09-21 12 24 36

Platformを iOS にして、switch platform を選択します。

スクリーンショット 2023-09-21 12 25 15

既存のシーンを削除します。

スクリーンショット 2023-09-21 12 25 59

Package Manager

Package Managerで、Unityのレジストリを選択します。

スクリーンショット 2023-09-21 12 29 20

AR foundationApple ARKit XR Plugin をインストールします。

スクリーンショット 2023-09-21 12 30 01

最新バージョンd値は、Apple ARKit XR Plugin のエラーが出ることがあります。

BuildFailedException: ARKit requires a Camera Usage Description (Player Settings > iOS > Other Settings > Camera Usage Description)

この場合は、エラー内容に従って、Camera Usage Description に何か文字列を入れましょう。今回は、Hakoniwa と入れておきます。

スクリーンショット 2024-01-23 7 20 05

Project Settings

XR Plugin-in ManagementApple ARKit を選択します。

スクリーンショット 2023-09-21 12 33 39

Project vValidation のエラーを解消するために、Fix をクリックします。

ARDevice Scene の設定

ARDevice Scene を選択します。

スクリーンショット 2023-09-21 12 36 38

Hierarchyビューの AR を選択し、インスペクタービューの Server_ipaddr に iphone のIPアドレスを設定します。 Client_ipaddr には、Mac の IPアドレスを設定します。

スクリーンショット 2023-09-21 12 37 11

Hakoniwa Scene の設定

Hakoniwa Scene を選択します。

Hierarchyビューの AR を選択し、インスペクタービューの Server_ipaddr に Mac のIPアドレスを設定します。 Client_ipaddr には、iphone の IPアドレスを設定します。

スクリーンショット 2023-09-21 12 39 35

Unityビルド手順

Build Settings のシーンに、ARDeviceを追加し、Build をクリックします。

スクリーンショット 2023-09-21 12 42 04

Buildディレクトリとして、適当な空の場所を作り、選択します。

スクリーンショット 2023-09-21 12 43 50

ビルド成功すると、Xcodeでビルド可能なプロジェクトが作成されます。

スクリーンショット 2023-09-21 12 45 42

iphone へのインストール手順

準備物:

  • iphone
    • Appleアカウント認証が必要になります
  • Mac

以下のステップで設定およびインストールします。

iphoneをデベロッパーモードにする

設定 => プライバシーとセキュリティ => デベロッパーモードオン にしてください。

もし、デベロッパーモードが表示されない場合は、「XCodeで認証する」と「Xcodeでのビルド」を先に実行することで表示されるようになります。

参考:https://zenn.dev/m_j_t/articles/17f6a8631b88f8

XCodeで認証する

XcodeのSigning & Capabilities を開き、下図のように指定してください。

スクリーンショット 2024-01-23 9 02 12

注意:Bundle Identifier は、インストール対象端末後に変える必要がある

Xcode でのビルド

デベロッパモードのiphoneとMacをUSB接続します。

次に、Buildディレクトリを Xcode でオープンします。

Signing & Capabilities で、以下のように Teamには AppleID と Bundle Identifier には、com.hakoniwa-lab.picomodel と入力して、ビルドボタンをクリックします。

スクリーンショット 2023-09-21 12 49 25

当該アプリを信頼する

設定 => 一般 => VPNとデバイス管理を開き、当該ARアプリ(model)を信頼するようにしてください。