こんにちはmorimori(@TatsunoriMorita)です。
仕事の関係でARアプリ開発することになり、Unityで開発するにしても、ネイティブ言語のSwiftを使った開発知識が必要だと思うので、いろいろ調べながらメモして行こうと思います。
開発環境
Xcode ver10.1
iPhone7 Plues(iOS12.1)
はじめに
SwiftでARアプリを作成するにはARKitとSceneKitを使用します。
ARKitとはARアプリを開発するためのライブラリで、地面の検出やスケール、光の検知などのARに必要な基本的な機能を提供するものです。
SceneKitとは3DCGライブラリで、3Dオブジェクトやアニメーションなどを作成するものになります。
3DCGにおいては、Unityの方がSceneKitより得意なようなので、アニメーションで凝ったことをするにはUnityの方が良いかもしれません。
取り敢えず現状はARKitに慣れるために、Xcodeを使ってARKitとSceneKitで開発をすることにします。
新規プロジェクト作成
iOSのAugmented Reality Appを選択して、Content TechnologyをSceneKitを選択します。
実機で動かす
作成されたプロジェクトをそのまま実機に接続してアプリを動かしてみます。
変な船?が表示されるのが確認できました。
コードを眺める
コードを確認すると意外にコーティング量は少ないです。ARアプリだからもっといろいろコードが書かれていると思いましたが。
使用されているクラスを確認
ARアプリを動かすにあたって、主に使用されているクラスを確認しておきましょう。
全体構成の粒度としてはARSession>ARSCNView>SCNSceneみたいですね。
ARSession
Shared objectで、ARアプリに必要なデバイスカメラとモーション管理や、プロセスの調整などを取りまとめている司令塔のような存在。
ARKitを使用するにあたって、必ずひとつは必要となるが、ARCSNViewやARCKViewオブジェクトを使用する場合は、これらのインスタンス内に含まれているため独自にARSessinのインスタンスを作成する必要はない。
逆にARCSNViewやARCKViewオブジェクトを使用せずに、独自のシーンを作成して使用する場合は、インスタンス化して自分で管理する必要がある。
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オブジェクトを表示するために、光源、カメラビュー、オブジェクトをツリービューのノード要素として管理している。
ARSCNViewのsceneプロパティにセットすることで画面上に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のもの。
セッションが切れた時や、アプリがバックグランドに移動した時の処理を実装する。
https://developer.apple.com/documentation/arkit/arscnviewdelegate
まとめ
あまり長くならないよう細かく切ってメモして行こうと思いますが、
今回はテンプレートのコードで使用されている主なクラスについて説明しました。
次回はコードの内容について詳しく見ていこうと思います。