先日 Xamarin.iOS で ARKit を試し始めた話を書きました。
試し中のコード
スクリーンショット
上記の記事では試し始めましたという話だけだったので、今日はコードを見てみたいと思います。
■ コード
<summary>
</summary>
public class SimpleCode : CodeBase
{
<summary>
</summary>
<value></value>
ARSCNView _arscnView { get; set; }
<summary>
</summary>
public override void ViewDidLoad()
{
_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.Scene = SCNScene.FromFile("art.scnassets/ship.scn");
}
<summary>
</summary>
<param name="animated"><c></c></param>
public override void ViewWillAppear(bool animated)
{
_arscnView.Session.Run(new ARWorldTrackingConfiguration(), new ARSessionRunOptions());
}
<summary>
</summary>
<param name="animated"><c></c></param>
public override void ViewWillDisappear(bool animated)
{
_arscnView.Session.Pause();
}
}
ViewController のコードではないですが、ViewController のそれぞれのメソッドから呼ばれるメソッドを持ったクラスです。
コードを把握するだけなら、ViewController に書かれたコードと思って読んで大丈夫です。
View
プロパティも、ViewController の View
をセットしています。
要点だけを抽出
上記コードではライフサイクルイベントやレイアウトのコードが結構な割合で記述されています。AR 部分を理解するには邪魔になるので要点部分だけを抜き出してみます。
public override void ViewDidLoad()
{
_arscnView = new ARSCNView();
View.AddSubview(_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.Scene = SCNScene.FromFile("art.scnassets/ship.scn");
これだけで、宇宙船が空間に存在する AR 表示ができました。
最初の一歩が簡単なのはとてもありがたいですね。