先日 Xamarin.iOS で ARKit を試し始めた話を書きました。
試し中のコード
スクリーンショット
上記の記事では試し始めましたという話だけだったので、今日はコードを見てみたいと思います。
■ コード
/// <summary> /// 空間にモデルを置くだけのシンプルなサンプル /// </summary> public class SimpleCode : CodeBase { /// <summary> /// ARSCNView の参照を取得または設定します /// </summary> /// <value>The arscn view.</value> ARSCNView _arscnView { get; set; } /// <summary> /// 初期化処理を行います /// </summary> public override void ViewDidLoad() { // ARSCNView のインスタンスを生成し画面にセット、レイアウトを指定します _arscnView = new ARSCNView(); View.AddSubview(_arscnView); _arscnView.TranslatesAutoresizingMaskIntoConstraints = false; _arscnView.LeftAnchor.ConstraintEqualTo(View.LeftAnchor).Active = true; _arscnView.TopAnchor.ConstraintEqualTo(View.TopAnchor).Active = true; _arscnView.RightAnchor.ConstraintEqualTo(View.RightAnchor).Active = true; _arscnView.BottomAnchor.ConstraintEqualTo(View.BottomAnchor).Active = true; // ARSCNView のシーンをモデルデータで作成します _arscnView.Scene = SCNScene.FromFile("art.scnassets/ship.scn"); } /// <summary> /// セッションを開始します /// </summary> /// <param name="animated">If set to <c>true</c> animated.</param> public override void ViewWillAppear(bool animated) { _arscnView.Session.Run(new ARWorldTrackingConfiguration(), new ARSessionRunOptions()); } /// <summary> /// セッションを停止します /// </summary> /// <param name="animated">If set to <c>true</c> animated.</param> public override void ViewWillDisappear(bool animated) { _arscnView.Session.Pause(); } }
ViewController のコードではないですが、ViewController のそれぞれのメソッドから呼ばれるメソッドを持ったクラスです。
コードを把握するだけなら、ViewController に書かれたコードと思って読んで大丈夫です。
View
プロパティも、ViewController の View
をセットしています。
要点だけを抽出
上記コードではライフサイクルイベントやレイアウトのコードが結構な割合で記述されています。AR 部分を理解するには邪魔になるので要点部分だけを抜き出してみます。
public override void ViewDidLoad() { // ARSCNView のインスタンスを生成し画面にセットします _arscnView = new ARSCNView(); View.AddSubview(_arscnView); // ARSCNView のシーンをモデルデータで作成します _arscnView.Scene = SCNScene.FromFile("art.scnassets/ship.scn"); }
要点はこれでだけです。
■ コード解説
まず、AR のための View の ARSCNView
を作成し画面にセットします。
この View を置いただけでカメラの映像が表示され AR が開始されるようです。簡単ですね。
_arscnView = new ARSCNView();
View.AddSubview(_arscnView);
次に、作成した ARSCNView
の Scene
プロパティにモデルデータから作成した SCNScene
をセットします。
モデルのデータは iOS のサンプルでおなじみの宇宙船になっています。FromFile
メソッドの引数でモデルのファイルを指定します。
// ARSCNView のシーンをモデルデータで作成します _arscnView.Scene = SCNScene.FromFile("art.scnassets/ship.scn");