rksoftware

Visual Studio とか C# とかが好きです

Xamarin iOS で ARKit を使う最初のシンプルなサンプルの説明

先日 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);

次に、作成した ARSCNViewScene プロパティにモデルデータから作成した SCNScene をセットします。
モデルのデータは iOS のサンプルでおなじみの宇宙船になっています。FromFile メソッドの引数でモデルのファイルを指定します。

        // ARSCNView のシーンをモデルデータで作成します
        _arscnView.Scene = SCNScene.FromFile("art.scnassets/ship.scn");

これだけで、宇宙船が空間に存在する AR 表示ができました。

最初の一歩が簡単なのはとてもありがたいですね。

Xamarin iOS で ARKit を使ってみたい

Xamarin iOS で ARKit を使ってみたいのでチャレンジ中です。
チャレンジは大事です。世界はチャレンジであふれています。

■ 今のところ

今のところは、シンプルに空間にモデルを表示するものだけ動作できています。
こんな感じに、空間に宇宙船が存在しています。


■ 参考情報

ARKit は次の素晴らしい記事とサンプルがあります。

※素晴らしいと断言していますが、実際よくわかっていません。すみません。
プロトコルを C# に置き換えるところや、メニューの UI で手間取ってまだコードを全然見れていません。

とりあえず GitHub

まだ、最初の非常に簡単 (インスタンスを二つ生んで設定しただけ) なサンプルだけの状態ですが。
SimpleCode クラスだけ見てください。
コード量としては ViewController が多いですが、メニュー画面的な UI を作っているだけで ARKit とは全く関係ありません。
全く見る必要はありません。

■ まとめ

当然ではあるのですが、Xamarin でも ARKit が使えました。
xR 流行の昨今、HoloLens 買えないマンでも何かしたいですよね。
iPhone 6s 以降または iPad 第5世代なら何とか入手できるのではないでしょうか?
決して安いものでもないですが何とかなると思います。

富豪の方へ
HoloLens ください。

秋葉原 C# もくもく会 #26 勉強会を開催しました。

■ C# もくもく会

C# もくもく会 #26 を開催しました。

C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。
もくもく自習を基本とし、分からないことを教えあったり情報共有したりしている会です。

前回よりさらに C# 度を上げるよう頑張って C# らしい写真を撮ってみました。
f:id:rksoftware:20180216011506j:plain

定期開催していますので、お時間のある時に遊びに来ていただければと思います。
ちょっと詰まった時、ネット上で聞くのははずかしいなぁ、という課題のできた時などにも思い出していただけると嬉しいです。

■ 次回予定

次回は 2018/02/22 に開催予定です。

C# に関心のある方、是非遊びに来てください。

強めのクリックを無効にする

不器用なので、mac でファイルをドラッグしようとすると、よくファイル名の変更になってしまいます。
これは「強めのクリック」という機能によるものだそうです。

■ Finder でファイルを強めのクリック

をすると、ファイル名の変更になります。ドラッグする際は途中で意図せず指を放してしまわないよう意識すると、自然力が入ってしまいます。
すると、強めのクリックになってしまう。そういうことの様です。
私の精進が足りないのですが、デモの最中など精進が足りない中でも可能な限りスムーズに操作することは追及したいものです。

■ 強めのクリックを無効にする

https://support.apple.com/ja-jp/HT204352 に書かれている手順で無効にできます。
わざわざリンクをクリックするのも面倒だと思うので、要点だけまとめます。

システム環境設定 > トラックパッド > ポイントとクリック > 強めのクリックと触覚フィードバック を OFF

これで好きなだけ強く抑えながらのドラッグが思いのままです。

Android エミュレーターをコマンドラインから実行する

mac で Xamarin 環境の AVD マネージャーをコマンドラインで実行する方法です。
Android Studio 環境の Android SDK では同様のコマンドでマネージャーを起動することができませんでした。
※コマンドにこのオプションがありませんでした。

■ コマンド

cd /Users/{ユーザー名}/Library/Developer/Xamarin/android-sdk-macosx/tools
./android avd

Visual Studio for mac では、プロジェクトを開かなくても AVD マネージャーを開けるので、無理にコマンドラインで起動することもないかもしれませんが選択肢として。

JXUG Xamarin iOS & Xamarin Androidハンズオン! で Android 講師をさせていただきました

先日開催の JXUG Xamarin iOS & Xamarin Androidハンズオン!
にて、Android 師匠をさせていただきました。

f:id:rksoftware:20180212135241j:plain
※会場準備中の様子

■ テキスト等

今回は皆さん最後まで完成していただけたようです。

■ 環境など

最近は環境構築がだいぶ良くなってきたことを実感します。
結局環境構築だけで終わってしまった、という事にはならなくなりました。
今回は本当に環境の事前準備を皆さんきちんと整えてきていただけたのでとても助かりました。

■ メンターの皆さん

ハンズオンでは本当にメンターの皆さんのお力が大切です。
講師より重要です。

それとおそらく各卓の中でも周りの方をサポートしてくださった方がいらっしゃるともいます。
皆さんのお力でイベントを成功することができました。本当にありがとうございました。

■ 参加してくださった皆さん

そして何より、参加してくださった皆さんです。
皆さんのお力でイベントを成功することができました。本当にありがとうございました。

■ 今後

今回のハンズオンが参加してくださった皆様のお役に立てていればうれしいです。
ハンズオンは今後もメニューを増やしながら継続して行って行こうと思っています。
今回ご都合により参加できなかった方、これから Xamarin を始める方、またメニューが増えた場合など、皆様ぜひ今後ともよろしくお願いいたします。

iOS シミュレーターがしゃべってくれない

Xamarin でスマートフォンをしゃべらせたい場合、TextToSpeechPlugin などで簡単に音声をしゃべらせることができます。

しかし、条件によっては特にエラーなども発生せずに無音。しゃべってくれない場合があります。

■ 無音

TextToSpeech で指定した文字列を読み上げてくれますが、読めない(音の設定されていない)文字は読み飛ばします。
つまり、読めない文字だけで構成された文字列を指定すると無音です。

■ 日本語が読めない

iOS の言語設定が日本語になっていないと日本語を読んでくれません。
つまり

・iOS の言語設定が日本語になっていない。
・日本語の文字列を指定している。

場合、無音になってしまいます。

■ 言語設定を変える

iOS の設定アプリ(Settings) > General > Language & Region > iPhone Language を日本語にします。

これで日本語をしゃべってくれるようになります。