Unreal Engineで「ARKit」を使ってみよう
今回は、米Appleより現地時間2017年6月5日に「WWDC2017」で発表された、iOS用の新しいフレームワーク「ARKit」をUnreal Engineで使ってみました。本記事はWindowsを利用しておらず、Macのみを利用した紹介になっていますのでご了承ください。
1.開発環境の準備
1.1 開発環境
名称 | バージョン |
iPhone7 Plus | iOS 11 beta |
Macbook Pro | macOS Sierra 10.12.5 |
Xcode | Version 9.0 beta(9M136h) |
Unreal Engine | Version 4.17.0 |
1.2 iOSのアップデート
公式サイトによるとARkitを動作させるためには「Apple A9」または「Apple A10」プロセッサが搭載された端末が必要とのことですのでお気をつけ下さい。また、「iOS 11 beta」にアップデートするためには「Apple Developer Program」への登録が必要となりますので、登録されていない方はアップデートを行うことができません。登録されている方は「Downloads」より「iOS 11 beta」を「Configuration Profile」または「Restore Image」によってインストールして下さい。私は、前者の方法を利用したので、iPhoneからDownloadsページにアクセスしてプロファイルを端末にインストールした後、ソフトウェアアップデートからOSのアップデートを行いました。
1.3 macOSのアップデート
「macOS Sierra」はデフォルトインストールされている「App Store」アプリケーションからインストールしました。
1.4 Xcodeのアップデート
「iOS 11 beta」と同様にXcodeをアップデートするためには「Apple Developer Program」への登録が必要となりますので、登録されていない方はアップデートを行うことができません。Xcodeを複数バージョン同じMac内で共存させるためには、名前の変更だけで実現できます(例:Xcode.app、Xcode_beta.app)。
2.Unreal Engineのセットアップ
2017年6月13日の時点ではバイナリサポート(4.17 previewで利用可能になるとのこと)がされていませんが、GitHubから早期アクセスサポートをして頂けているため自分でソースをビルドすれば、実機上で作成したARアプリを実行することが可能となります。
2.1 UEリポジトリへアクセス
Unreal Engineのソースコードが管理されているリポジトリにアクセスするためには下記を参照して下さい。
https://www.unrealengine.com/ja/ue4-on-github
登録が完了するとGitHubアカウントからUnreal Engineのリポジトリへアクセスできるので、ARサンプルを動作させることのできる実装が入ったブランチ「dev-ar-kit」を取得しましょう。リポジトリのブランチを「dev-ar-kit」に切り替えてZIPをダウンロードするか、コマンドからクローンしてソースを取得します。
2.2 ビルド
2.2.1 Setup.command
Setup.commandを右クリックメニューから「開く」で実行します(ZIPでダウンロードした場合はセキュリティ面からダブルクリックで開けないことがあります)。処理が完了するまで少し時間が掛かります。
2.2.2 GenerateProjectFiles.command
GenerateProjectFiles.commandを右クリックメニューから「開く」で実行します(ZIPでダウンロードした場合はセキュリティ面からダブルクリックで開けないことがあります)
2.2.3 UE4.xcworkspace
UE4.xcworkspaceを右クリックメニューから「開く」で実行します(ZIPでダウンロードした場合はセキュリティ面からダブルクリックで開けないことがあります)。この時、お使いのMacに複数バージョンのXcodeがインストールされている場合は、「このアプリケーションで開く」からXcode 9.0を選択して下さい。
「ShaderCompileWorker」をターゲットに選択してBuild(Command + B)を実行します。
「UE4」をターゲットに選択してBuild(Command + B)を実行します。
その後「UE4」に対してRun(Command + R)を実行するとランチャーが起動します(かなり時間が必要となります)。
1度上記の作業が完了しランチャー起動に成功している場合は「Engine/Binaries/Mac/UE4Editor」が作成されているので、こちらからランチャーを起動することもできます(実行するとシェーダーコンパイルが始まってしまい時間が掛かるので、Runで起動したランチャーと作成されたランチャーどちらか1つを使うべきだと思います)。
2.3 デプロイ
実機でアプリを実行するためには証明書、プロビジョニングファイルが必要になってきます。そちらの準備方法については本記事では説明致しません(Macでの証明書関連の準備方法は様々な記事で紹介されているので調べてみて下さい)。
2.3.1 証明書関連の設定
プロジェクト設定より証明書とプロビジョニングをインポートしておきます。
2.3.2 起動
起動オプションから実行させたい端末を選択するとデプロイが開始されます。
※この時、お使いのMacに複数バージョンのXcodeがインストールされている場合は、「Xcode」という名前が優先されましたので注意して下さい(昇順の可能性もありますがここは未調査です)。
2.4 試行錯誤
2.4.1 実行結果
iOS 11から利用可能な「Screen Recoding」にて動作を共有したかったのですが、不具合があり横画面に対応できていないため今回は利用していません。また、アプリケーション起動時に下図1枚目のスプラッシュの状態(端末左回転状態で起動)でなければカメラ表示がおかしくなります。どうやら「プロジェクト設定>iOS」にある「Orientation」項目が正しく効かないようです。
2.4.2 向きを修正
円錐や球モデル以外のモデルを表示して何か作ってみようと思ったのですが、実は2.4章の円錐と球モデルの位置は本来なら円錐の位置に球があり、球の位置に立方体があるはずなのです(向きが回転している)。
「AlignmentActor」のブループリントに実装されている「Handle Touch」関数を見ると、「Player Alignment Actor」という変数のトランスフォームを設定している部分があります。この時、カメラのYawから90度引いた値が設定されていますが、0に修正すると表示されるモデルの向きが回転しなくなります。もしくは、モデル自体を90度回転させれば同様に修正できます。
2.4.2 カメラ移動
何度も最新のアプリケーションを実機で起動するのは時間が掛かってしまうので、エディタで期待通りの処理を作成、そしてデバッグを行うべきです。エディタではカメラが無いのだから視点を動かせないのではと思うかもしれませんが、「左Altキー」を押すことでカメラを移動させることのできるデバッグ機能が用意されています。
2.4.3 モデル変更結果
既に配置されているモデルを変更するとともに簡単なシーンを作ってみました。ここでは物体との衝突判定に「LineTraceForObjects」を利用しています。ARPlayerPawnのカメラに「Box Collision」を取り付けて利用しようと検証してみましたが、ARPlayerPawn自体の座標が移動していないことから衝突判定イベントが発火しません。これをやるとしたら既存のカメラ座標を変更する実装をやめて、ARPlayerPawnの座標を変更する実装に修正する必要がありそうです。
こちらの動画が今回作成したシーンで、宝箱を盗ろうとしたトレジャーハンターに宝の守護者が襲いかかる内容となってます。守護者の登場時には「CameraShake」を使ってカメラの揺れを実現しています(手では揺らしてません)。
3.まとめ
今回はUnreal EngineのARKitを使うために、予め用意されていたサンプルプロジェクトの動作確認を行いました。ブループリントは追っていけば容易に読めますが、実際に実機上で動作確認を行うところまでに非常に時間が必要でした(ビルド時間)。
Unreal EngineのForumを見ると、Macのグラフィックスによって動作するしないが別れることもあるらしいので確実に起動するという保証は無さそうでした。本記事ではMacのみを利用した紹介となりましたが、Windowsからリモートビルドによる起動検証も試していました。そちらに関しては、「LogPlayLevel: UnrealBuildTool: IPP ERROR: RPCCommand Zip failed with return code Error_Unknown」といったエラーによりうまく起動しておりません。エラー文で検索すると解決方法が提案されていましたが、私の環境では現在でも解決することができていません。