先日のWWDC 2019で発表されたARKit 3、大幅に機能拡張されて衝撃を受けました。
ARKit 3の新機能のサンプルをUnityから動作させることができるので手順をメモしておきます。
ARKit 3はiOS/iPadOS 13の機能になりますので、実機にどちらかのインストールが必要です。
Apple Developer Programに参加して、Downloadからインストールイメージをダウンロードしておきます。
(無料の会員でもダウンロードは可能です)
また、Xcode 11ベータもダウンロードして、インストールしておきます。
なお、インストールにmacOS 10.15ベータは必要ありません。
iTunesを起動して、デバイス画面の「アップデートの確認」をOptionキーを押しながらクリックすると、イメージを指定するダイアログが出てくるので、先ほどダウンロードしたiOS/iPadOSのイメージを指定します。(バックアップなどは事前に取っておいてください)
復元が始まると初期化されると思いきや、iOS 12の時に使っていたアプリや設定は引き継がれたままiOS 13になりました(いつもそうなるとは限りませんし、iOS 12に戻す場合にも備えてバックアップは取っておいてください)
ARKit 3のサンプルプログラムですが、AR Foundationを使用して作成されています。これまでのARKitは、ARKitのSDKをBitbucketからダウンロードして使用していましたが、今回からはAR Froundationに統合されたようです。AR Foundationは、ARKitやARCoreといったプラットフォーム依存のAR技術をラッピングしつつ同一のコードで作成できる仕組みで、Unity Package Managerから入手することができます。
なお、最新の情報に関しては下記のフォーラムで議論されています。
AR Foundation 2.1で、ARKit 3の一部の機能がサポートされたと記載があります。
また、Unity 2018.4を使っている場合はAR Foundation 2.1.0は利用できないが、1.5.0を使用すればよい旨の記載もありました。
サンプルプログラムプログラムは下記になります。
cloneしてみると、プロジェクトで使用されているUnityは(6/9時点で)2019.1.5f1でしたので、素直にインストールしましたが、2019系でしたらば動くのではないかと思います。
また、2018.4を使用している場合は、Asset以下のファイルから適宜コピーして、Package ManagerでAR Foundation 1.5を入れれば動かすことはできると思うのですが、試していないので詳しくは不明です。
Unity 2019.1.5f1で開いた場合、Package Managerでは既に
・AR Foundation 2.2.0
・ARKit XR Plugin 2.2.0
がインストールされた状態でした。
あとはBuild SettingsでiOSに切り替えてビルドして、Xcode 11で開いて実行すれば実機で動かすことができました。
NDAのため実機のスクリーンショットは載せられないのですが、Scene/HumanSegmantation 以下のBody Tracking関連のサンプルは非常に精度が高くて驚きました。(A12以降のチップでしか動かないらしいです)
こういうシーンがたくさんあるサンプルを動かす時に、シーン切り替えの機能を毎回作ってしまう気がするので、単純ですがスクリプトをメモしておきます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class ScneneChange : MonoBehaviour { void Awake() { DontDestroyOnLoad(gameObject); } public string[] scenes; void OnGUI() { foreach (string scene in scenes) { if (GUILayout.Button(scene, GUILayout.Width(250), GUILayout.Height(50))) { SceneManager.LoadScene(scene); } } } }
新しいシーンを作って、空オブジェクトにアタッチして、インスペクタにシーン名(Build Settingsの一覧と同一のもの)を入れて、作ったシーン自体も登録してScene一覧の一番上に移動させておきます。すると、シーン切り替えボタンが表示されます。