これちのPost-it

技術ネタをペラペラ貼っていくぞ!

ARKit用サンプルアプリを作る2つの方法

はじめに

ARKit用サンプルアプリの作成する以下の2つの手順を紹介します。
1. Xcodeのみを使ってアプリを作成
2. Unityでアプリを作成し、Xcodeを使ってビルド

1はiOSのネイティブコードでARKitを直接利用する方法、2はUnity ARKit Pluginを使用してUnityでアプリを作成し、最後にXcodeを使ってビルドする方法です。
ARKitについては前回の記事で紹介したため、そちらも読んでください。
korechipostit.hatenablog.com
どちらを使うかは作りたいアプリによって使い分けると良いと思います。この記事では両方の方法でサンプルアプリを作る方法を紹介します。

Xcodeのみを使ってアプリを作成

まずはAppleの公式ドキュメントでも紹介されている、Xcodeのみを使ったサンプルアプリの作成方法について説明します。

アプリの実行結果

f:id:korechi:20170817233833g:plain
宙に飛行機オブジェクトが浮かんでいるのが確認できるアプリとなっています。

必要なもの

  • Xcode 9 beta ← ここからDL
  • iOS11がインストールされたデバイス(A9プロセッサ以降のもの)

アプリの作成

  1. Xcode-betaを起動し、Create a new Xcode projectを選択します。
    f:id:korechi:20170817000321p:plain:h300
  2. Augmented Reality Appを選択→Nextをクリック
    f:id:korechi:20170817000851p:plain:h250
  3. アプリの初期設定を行う
    f:id:korechi:20170817001251p:plain:h250
    • 任意の値を入れてください。
    • 「Product Name」と「Organization Identifier」から成る「Bundle Identifier」は、世界中のアプリの中から自身のアプリを識別するIDとなります。主に、ドメインを逆さまから並べたものをOrganization Identifierに設定することが推奨されています。
    • Content Technologyは、「Scene Kit」「Sprite Kit」「Metal」の3つから選べますが、今回はとりあえず「Scene Kit」を選択しました。

アプリのビルド

  1. ビルド対象のデバイスを自身のデバイスに設定
    f:id:korechi:20170817003200p:plain
    ここにある「Generic iOS Device」という箇所をクリックし、自身のデバイスを選択してください。
  2. ビルド

無事、宙に飛行機が浮かぶサンプルアプリがiPhone上で実行されるはずです。 コードの中身が気になる方は各自Xcodeを確認してください。

②Unityでアプリを作成し、Xcodeを使ってビルドする方法

こちらはUnityを使ってARKit用アプリを作成する方法を紹介します。
何となくこっちの方がTangoでの開発に近い気もします。

アプリの実行結果

f:id:korechi:20170817233250g:plain

必要なもの

Unityでの操作

  1. 新規Unityプロジェクトの作成
  2. unity-arkit-plugin.unitypackageをインポート
    f:id:korechi:20170817101140p:plain:h300
    Projectビューは以下のようになっています。
    f:id:korechi:20170817101252p:plain:h200
  3. Build Settings -> PlatformをiOSに切り替える
  4. No iOS module loadedとなっている方は、横にある「open download page」ボタンをクリックしてください(DLが終わるまで1時間弱かかる場合があります)
    f:id:korechi:20170817010324p:plain:h300
  5. Build Settings -> Platform -> iOSを選択し、PlayerSettingsからIdentificationを設定
  6. Camera Usage Descriptionに何らかしらの文字を入れる(これをやらないとアプリがカメラ利用許可を得られず、起動時に落ちるらしい)
    f:id:korechi:20170817101656p:plain:h300
  7. Assetsフォルダ直下にある、UnityARKitScene.unityをダブルクリックしてシーンを開く
    シーンを開くと以下のような画面になります。
    f:id:korechi:20170817102111p:plain:h300
  8. Build Settings -> Add Open Scenes をクリック 注)これをしないと現在のシーンがビルド対象となりませんので注意してください
    f:id:korechi:20170817102346p:plain:h300
  9. UnityParticlePainter.unityのシーンも同様にビルド対象とし、ビルドします
    ただし、Unityのパッチが古いと以下のようなエラーが出ます。
Assets/Plugins/iOS/UnityARKit/UnityARVideo.cs(59,31): error CS0117: `UnityEngine.TextureFormat' does not contain a definition for `R8'
Assets/Plugins/iOS/UnityARKit/UnityARVideo.cs(66,31): error CS0117: `UnityEngine.TextureFormat' does not contain a definition for `RG16'

エラーが出なかった場合は、Xcode向けにビルドされたプロジェクトが生成されます。

Xcodeでの操作

  1. Unityから生成されたXcodeプロジェクトを開きます
    f:id:korechi:20170817104622p:plain:h250
  2. 実機で実行(やり方は①Xcodeのみを使ってアプリを作成、と同じ)
    ただし以下のようなエラーが出てしまいました。
ARKitUnitySample[3217:1623803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ARFrame displayTransformWithViewportSize:orientation:]: unrecognized selector sent to instance 0x1c42eff80'

調べたところこれは、unitypackageが少し古いために発生した問題みたいです。
もしそのようなエラーが出てアプリが強制終了してしまった方は、unitypackageを使わずにUnity-ARKit-pluginをbitbucketからダウンロードして、それをそのままUnityで開いてください
それ以外の手順は大体同じです!

最後に

Xcodeのみを使ってアプリを作成する方法と、Unityを使ってアプリを作成する方法を紹介しました。
どちらを選択するかは皆さんに判断をお任せしますが、やはり3Dオブジェクトをごりごり動かしたい場合はUnityの方が良いのではないかとも思います。
反対に、そうでないものを作るのならばXcodeのみで開発した方が良さそうにも思えます。
自分はもう少し両方のパターンで慣れて見てから判断しようと思います!