ぬるぽ

ゆるくプログラミングなどを語っていくブログ

ARKit入門 その1

こんにちはmorimori(@TatsunoriMorita)です。

 

仕事の関係でARアプリ開発することになり、Unityで開発するにしても、ネイティブ言語のSwiftを使った開発知識が必要だと思うので、いろいろ調べながらメモして行こうと思います。

 

開発環境

Xcode ver10.1

iPhone7 Plues(iOS12.1)

 

はじめに

SwiftARアプリを作成するにはARKitSceneKitを使用します。

ARKitとはARアプリを開発するためのライブラリで、地面の検出やスケール、光の検知などのARに必要な基本的な機能を提供するものです。

SceneKitとは3DCGライブラリで、3Dオブジェクトやアニメーションなどを作成するものになります。

3DCGにおいては、Unityの方がSceneKitより得意なようなので、アニメーションで凝ったことをするにはUnityの方が良いかもしれません。

取り敢えず現状はARKitに慣れるために、Xcodeを使ってARKitSceneKitで開発をすることにします。

 

新規プロジェクト作成

iOSAugmented Reality Appを選択して、Content TechnologySceneKitを選択します。

f:id:nooootion:20181125202448p:plain

f:id:nooootion:20181125202509p:plain

 

実機で動かす

作成されたプロジェクトをそのまま実機に接続してアプリを動かしてみます。

変な船?が表示されるのが確認できました。

f:id:nooootion:20181125202543p:plain

  

コードを眺める

コードを確認すると意外にコーティング量は少ないです。ARアプリだからもっといろいろコードが書かれていると思いましたが。

f:id:nooootion:20181125202617p:plain

 

使用されているクラスを確認

ARアプリを動かすにあたって、主に使用されているクラスを確認しておきましょう。

全体構成の粒度としてはARSession>ARSCNView>SCNSceneみたいですね。

 

ARSession

Shared objectで、ARアプリに必要なデバイスカメラとモーション管理や、プロセスの調整などを取りまとめている司令塔のような存在。

ARKitを使用するにあたって、必ずひとつは必要となるが、ARCSNViewARCKViewオブジェクトを使用する場合は、これらのインスタンス内に含まれているため独自にARSessinのインスタンスを作成する必要はない。

逆にARCSNViewARCKViewオブジェクトを使用せずに、独自のシーンを作成して使用する場合は、インスタンス化して自分で管理する必要がある。

https://developer.apple.com/documentation/arkit/arsession

 

ARSCNView

作成した 3Dコンテンツと、デバイスカメラを融合して、カメラ越しに見える拡張現実のシーンを管理するためのビュー。

UIView=>SCNView=>ARSCNViewの継承関係となっているので

UIView・・・アプリの画面を描画するビュー

SCNView・・・UIViewが進化してSceneKitという3Dオブジェクトの描画が管理できるようになったビュー

ARSCNView・・・SCNViewが進化してAR機能の描画が管理できるようになったビュー

みたいなイメージですかね(たぶん)

https://developer.apple.com/documentation/arkit/arscnview

 

SCNScene

3Dオブジェクトを表示するために、光源、カメラビュー、オブジェクトをツリービューのノード要素として管理している。

ARSCNViewsceneプロパティにセットすることで画面上に3Dオブジェクトを表示している。

https://developer.apple.com/documentation/scenekit/scnscene

 

ARWorldTrackingConfiguration

リファレンスの説明だけだと役割がよくわからないけど、

平面、垂直の検出設定、端末の傾き情報などの設定を管理するもよう。

https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration

 

ARAnchor

実際に存在するオブジェクト、仮想オブジェクトの位置と向きを追跡できる。

https://developer.apple.com/documentation/arkit/aranchor

 

ARSCNViewDelegate

新たなアンカーが追加、更新された時に呼ぼれるイベントを実装したクラス。

テンプレート作成時にデフォルトで作成されているイベントは親クラスであるARSessionObserverのもの。

セッションが切れた時や、アプリがバックグランドに移動した時の処理を実装する。

f:id:nooootion:20181125202720p:plain

https://developer.apple.com/documentation/arkit/arscnviewdelegate

 

まとめ

あまり長くならないよう細かく切ってメモして行こうと思いますが、

今回はテンプレートのコードで使用されている主なクラスについて説明しました。

次回はコードの内容について詳しく見ていこうと思います。

 

www.nullnullpon.com