背景
Appleが毎年行う開発者向けイベント WWDC(Worldwide Developers Conference)。
今年は、2017年6月5日〜9日開催。
WWDC2017の話は色々あるが、自分が気になったのは、Appleが、とうとうARにがっつり参画してきたこと。そこで、発表された中の一つであるARKitというものを触ってみることにした。
もともと、VR/ARに興味があり、暇な時にUnity(C#で)を使い、VRアプリとか少し作ってみたりしていた。
が、SwiftでARアプリを作って遊んでみる将来も楽しそう!ってなったのがはじまり。
今回は、ARKitのサンプルをシュミレーターで動作確認ができるところまでいきます。
(ゴール:ARKitを使ってアプリを作成)
必要なもののインストール
Xcode9 beta/iOS11は、Apple Developer Programのメンバーシップがないと
ダウンロードできないが、去年個人でアプリ開発するために登録したものが(最近放置気味だが)
まだ期限きれてなかったので早速ダウンロード。
ここからiOS11とXcode9のベータ版をダウンロード。
(Xcode9のベータ版はmacOS10.12.4以上なら使えた)
Xcodeを開いてみる
新規でプロジェクトを早速作ろう。
開くと、AR用のものが!!
これを今回は触っていきます。
使うのは、やっぱり、3D扱えるSceneKitにしました。(他に、SpriteKitとMetal)
ちなみに、この状態でビルドすると、この飛行船が画面中央に表示される形になっており、飛行船の後ろが見える。
そして、シュミレーターの雰囲気がなんかリアル。
また、今回このXcode9では、iPhone7のこのシュミレーターと同時にiPadも平行してシュミレートするとかもできるよう。
現状のViewController.swift。
import UIKit
import SceneKit
import ARKit
class ViewController: UIViewController, ARSCNViewDelegate {
    @IBOutlet var sceneView: ARSCNView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Set the view's delegate
        sceneView.delegate = self
        
        // Show statistics such as fps and timing information
        sceneView.showsStatistics = true
        
        // Create a new scene
        let scene = SCNScene(named: "art.scnassets/ship.scn")!
        
        // Set the scene to the view
        sceneView.scene = scene
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        // Create a session configuration
        let configuration = ARWorldTrackingSessionConfiguration()
        
        // Run the view's session
        sceneView.session.run(configuration)
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        
        // Pause the view's session
        sceneView.session.pause()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }
    // MARK: - ARSCNViewDelegate
    
/*
    // Override to create and configure nodes for anchors added to the view's session.
    func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
        let node = SCNNode()
     
        return node
    }
*/
    
    func session(_ session: ARSession, didFailWithError error: Error) {
        // Present an error message to the user
        
    }
    
    func sessionWasInterrupted(_ session: ARSession) {
        // Inform the user that the session has been interrupted, for example, by presenting an overlay
        
    }
    
    func sessionInterruptionEnded(_ session: ARSession) {
        // Reset tracking and/or remove existing anchors if consistent tracking is required
        
    }
}
このサンプルコードをビルドするだけで、ARのアプリを体感できる!
(今後、この辺りをいじりちょっとずつオリジナリティを出して行く予定。)
最後に
今回、初めてXcode9のベータ版をいじってみた。
思ったことは、何と言ってもデバックがワイヤレスでできるので、線が嫌いな自分には嬉しい!!
これに関しては、最初に一度PCとデバック用端末をケーブルでつなぎ、
Xcodeのメニューのバー"Window"で、"Devices and Simulators"から、
Connect via networkにチェックすると次からケーブルなしでOK!!
今週は時間ないので、来週あたり早いうちにコード触り出そう、、。
(ARKitを触ってみよう 〜第2話〜で)
参考
ARKit リファレンス
https://developer.apple.com/documentation/arkit?changes=latest_minor
Unity ARKit プラグイン
https://oc.unity3d.com/index.php/s/3hfM9T05P9vOpCf
(これを使えば、Unityで簡単に作った3DオブジェクトをiPhoneから楽しめる)