ARKit アプリを Unity でつくるか、SceneKit でつくるか
ゲームアプリでは多分 SceneKit が使用されているケースは少ないが、 ARKit に関しては SceneKit が使用されているケースがそこそこある。
今回は SceneKit や Unity などのゲームエンジンでの違いを見ていこうと思う。
ゲームエンジンは Unity を指定しているが Unreal Engine も方のだいたい同じ感じだと思われる。
Unity で行う場合の利点
- Unity でノウハウがあり、既存のコンテンツがありリソースを流用できる環境ある
- 豊富な Asset や Romote Debug を使用して簡単につくりたい
- Apple Watch などの App Extensions 連携を行わない
- Unity を使用していないネイティブアプリなど、既存 iOS アプリに組み込まない
- あまり iOS のネイティブアプリの知識がない
強く言いたいのは Unity で既存のコンテンツがある場合は SceneKit を使う必要性はない。
SceneKit は Unity より簡単に制作できる部分もあるが、面倒な部分はネットやドキュメントでも書かれていないことがあるため、心構えが必要。
App Extensions 連携に関しては Unity の場合できないわけではないので、Xcode のプロジェクトが書き出されたあとにネイティブの実装とネイティブプラグインをつくる必要がある。
また、Android の ARCore とのクロスプラットフォームに関して書いていないのは、わりと別々でつくる形になるし、
現状 ARCore はハイエンド機でも平面認識に時間がかかったり、精度が良くない。
また、対応端末が多く出回っていないなどの問題がある。
Pokémon GO で AR+モード が Android 対応がされないのはこのような問題があるのだと思われる。
SceneKit や SpriteKit などネイティブライブラリで行う場合の利点
- シンプルなものを簡単につくりたい
- 既存の iOS のアプリの一機能として実装したい
- iOS のネイティブ機能へ簡単にアクセスしたい
- アプリのビルドが速い方が良い
- Apple Watch などの App Extensions と連携したい
- 新しい Beta の機能を早く使いたい
Unity など使用していない既存のネイティブアプリの一機能として実装したい場合は一択。
個人的には SceneKit の方が楽だとは思うが、これから覚えるなら学習コストはあまり変わらないし、Unity の方が情報が多いので、絶対ゲームエンジンを使わない方が良いとは思わない。
Unity での欠点
自分の環境のように、ネットワークの関係で ARKit Remote のリモートビルドができないと割とつらい。
シミュレーターでは ARKit のアプリが動作せず、実機にビルドする必要があり、Unity からの iOS ビルドが遅いため。
また、ARKit の Plug-in は Unity 本体に実装されているわけではない。
内容的にはネイティブの ARKit の機能を呼ぶだけのラッパーなので、Unity 自体をアップデートしても ARKit の新しい機能は使えない可能性がある。
Beta でちょくちょくあるのだが、API 名が変更され、気付かずクラッシュの原因がわからない場合があり罠だし、
単純に iOS Beta のバグでクラッシュする可能性という罠もある。
これは仕方ないのだが、SceneKit の場合は Beta の SDK が公開された時点で開発が始められるのだが、ゲームエンジンの場合は事前に情報が渡されていない限り、SDK 公開後 Plug-in が作成されるため、使用できるまでに数日から数週間かかる。
今後どうなるかわからんが、Apple Watch のように iPhone を母艦とした AR グラスが出るのなら、多分ゲームエンジン側は対応が遅れる可能性がある。
まとめ
まとめてみる。
Unity | SceneKit | |
---|---|---|
Unity に慣れている。既存のコンテンツがある | ○ | × |
Asset で簡単にコンテンツをつくりたい | ○ | × |
ゲームエンジン等使用していないネイティブのiOS アプリの一機能として追加したい | × | ○ |
iOS ネイティブの機能を使いたい | △ | ○ |
Apple Watch などと連携したい | △ | ○ |
Beta 版を即使いたい | × | ○ |
開発環境の価格 | 無料 収益、資金調達規模によって月額3,000〜15,000円が開発する人数分必要になる |
無料 |
開発言語 | C# / プラグインを書くなら Objective-C も必要 | Objective-C / Swift |
ビルド時間 | 遅い | 速い |
リモートデバッグ | 可能かつ速い | 可能だが有線より遅い |
注意点
一応、Unity を使う場合 Plug-in のサンプルを触ると ARKit の実装はわかるのだが、ちゃんとした振る舞いなどは書かれていないため(ドキュメントでも書かれていない場合もあるが)ハマった時は ARKit のドキュメントを読む必要がある。
がんばってというところ。