ARの開発環境では、Unityがデファクトスタンダードだと思いますが、Unityに使いにくさを感じることもあり、Unreal Engineも試してみることにしました。
そもそもなんでUnityを使ってたんだっけ?
ARを始めた当初(といっても1年半くらい前ですが)、最新のARデバイスと言えばHoloLensとTangoで、ネイティブ環境を除くとどちらも開発環境がUnity一択でした。
元々はUnityを一度も触ったことがなくて、積極的に選択したという訳ではなかったと思います。
Unityのつらみ
あくまで経験1年ちょっとの素人目線ですが、公式のスクリプトリファレンスが超絶わかりにくいです。
メソッドやプロパティが何をするためのものなのか、説明が1,2行でざっくりとしか書かれていないので、名称と型から雰囲気で察しながら実装しています。
一体、みんなどうやって開発しているのか...
当然、意図通りに動かないことも多く、有益な情報がないかとググる訳ですが、出てくる情報が軒並み古かったりするんですよね。
今までは、TangoやARCoreのドキュメント、サンプルコードを読み漁って対応していましたが、それ以上のことをやろうとすると想像以上に苦戦します。
というわけで、UEも使えるようになりたい。
Unreal EngineのAR対応
UEでARを利用するためのプラグインは、UEにビルトインされているようです。
"設定" > "Plugins" > "Augmented Reality"で プラグインが見つかるので、"Enabled"にチェックを入れれば有効になります。
ビルトインで楽ではあるんですけど、ARKit/ARCoreのバージョンが上がったら、UEのバージョンも上げないとってことですよね?
この記事を書いている時点で、UEの最新バージョンは4.19、プレビュー版の4.20が出ている状況です。
UEのAR対応についての記事を見ると、ARKit 1.5、ARCore 1.2に対応しているのは4.20以上になっているので、プレビュー版を使わないと最新の機能は使えないみたいです。
https://docs.unrealengine.com/en-US/Platforms/AR/AROverview
バージョンの追加は、Epic Games Launcherから簡単にできます。1バージョンで15GBくらいあるけどね…
ARKit
UE 4.20であれば、ARKit 1.5だけでなくARKit 2.0にも対応しているようです。
https://docs.unrealengine.com/en-US/Platforms/AR/ARKitPrerequisites
ARCore
UE 4.20がARCore 1.2に対応しています。
https://docs.unrealengine.com/en-US/Platforms/AR/ARCorePrerequisites
ARCoreに関しては既にv1.3.0が出ているのですが、UEのサイトには記述が見当たりません。
ARCoreのサイトを見てみると、GoogleがforkしたバージョンのUEをGithubからインストールしろと書かれています。
Quickstart for Unreal | ARCore | Google Developers
仕方ないので、リンク先のGithubをクリックしてみると…
ちょっと意味がよくわからないですね。
UEでARプロジェクトを作る
プロジェクトテンプレートから作る
UEにはARプロジェクトのブループリントがあり、簡単に開発をスタートすることができます。
手順としては、公式のQuick Startをそのままやっていくだけです。
https://docs.unrealengine.com/en-US/Platforms/AR/ARQuickStart
基本のビューは構成されており、ARKit/ARCoreのプラグインもデフォルトで有効になっているので、プラットフォーム(iOS/Android)の設定をして、デバイスで起動するだけです。
Androidの場合、SDKのセットアップで少し迷いましたが、以下の記事に載っているCodeworksを使ったら問題なく動きました。
Installing CodeWorks for Android | Unreal Engine Documentation
UEのARサンプルはプルンプルンしてる。 pic.twitter.com/Lvo0k27kwA
— jyuko (@jyuko49) 2018年7月7日
せっかくなので、どんな感じで動いているかも見てみました。
"コンテンツ" > "HandheldARBP" > "Blueprints" > "GameFramework"にある"BP_ARPawn"をダブルクリックします。
ブループリントのイベントグラフが表示されて、処理のフローが見れます。
メインフローとして、TouchイベントからHitTestが実行され、最終的にHitResultを受け取ったBP_PlaceableがSpawn(生成)されていることがわかります。
まだ全然慣れてないですが、処理のフローが可視化されているのはよいですね。
ちなみに、プルンと出てくる処理の正体は、BP_PlaceableのIntro Animのタイムラインアニメーションでした。
"コンテンツ" > "HandheldARBP" > "Blueprints" > "Placeable" > "BP_Placeable"をダブルクリックでイベントグラフが表示され、さらにIntro Animのノードをダブルクリックでタイムラインエディタが開きます。
ARCoreのサンプルプロジェクトを使う
UEのテンプレートとは別に、GoogleのGithubにARCore SDK for Unrealのリポジトリがあります。
こちらをgit clone
するか、zipファイルをダウンロードして解凍すれば、ARCoreのサンプルプロジェクトをベースに開発ができます。
プロジェクトごとにフォルダが作られており、直下にある.uprojectのファイルを開きます。
開くとUEのバージョン選択が表示され、Unreal Editorが起動します。
初回起動時にPluginの追加を促すコーションが表示された場合は"Yes"で起動すればOKです。
起動した直後は、Androidプラットフォームが有効になっていないので、Quick Startと同様の手順で設定します。
Androidであれば、"設定" > "プロジェクト設定" > "Android"でプラットフォームを有効にします。
実機で起動してみると、Unity版と同じようなサンプルアプリが動きました。
Andyはプルンプルンしてない。 pic.twitter.com/lzBlYkkbQc
— jyuko (@jyuko49) 2018年7月7日
これならUEでも開発できるかなと思ったのですが、Cloud Anchorのサンプルに相当する"CloudPin"だけは起動しようとするとエラーになります。
UEのバージョンを4.20にしてもダメ。Not FoundになっていたGithubからARCore 1.3に対応したUEをインストールすればできるのかもしれませんが、Not Foundですし。
そもそも、Cloud AnchorはARCore 1.2で動くはずなのですけど、どうにも上手くいきません(諦め)
その他UE関連
ヒストリアさんのブログが半端ない
UEについて色々調べていたら、ヒストリアさんのブログの情報量がすごかったです。
これ読めば、UEかなり詳しくなりそう。
ありがとうの気持ちを込めて、Airtoneを宣伝しておく。
Unity引っ越しガイド
Unityの用語との対応表がありました。Unityで行なっていた操作がUEでどうやるのかわからないときは、見比べながら進めていけばなんとかなりそうです。
http://api.unrealengine.com/JPN/GettingStarted/FromUnity/index.htmlapi.unrealengine.com
まとめ
- ARKit/ARCoreの最新バージョン対応がUnityに比べると遅い
- ブループリントは慣れれば便利そう
プレビュー版じゃないと最新のAPIに対応していない上、ARCore 1.3とCloud Anchorに至っては、すんなり試せなかったのが致命的です。
ブループリントは使いこなせれば便利だと思いますけど、慣れるまでに時間もかかりそう。面倒な処理はスクリプトをゴリゴリ書いていく派なので、その点もちょっと合わないかもしれません。
地味なところだと、AndroidとiOSのプラットフォーム切り替えが要らないので、クロスプラットフォーム開発が楽です。
結論
UEよさそうだけど、ARならまだUnityかな・・・。
実際に試してみて、AR(特にモバイルAR)に関しては、依然としてUnityがファーストチョイスかなぁと思いました。
もしVRをメインでやっていくなら、UEを勉強する気がします。
ARKit/ARCoreやサードパーティ製のプラグインを使ってスクリプトを書いていきたい場合は、Unityで良さそうです。Unity自体の機能は、理解することを諦めた。
逆にUE使う場合は、ARの機能やスクリプトに頼る部分はシンプルにして、アニメーションやエフェクトなどグラフィックにこだわるとか、そういった使い方になると思います。
今後はWebARの利用範囲が徐々に増えていくと思うので、いずれはUnity/UEじゃなくて、Webと同じプラットフォームで開発していくことになるかと。