MRが楽しい

MRやVRについて学習したことを書き残す

Unityに設計おけるクラス設計を考える その10(フィールド処理)

おいかけっこアプリの修正枠です。
ゲーム開始時のエフェクト、音声認識、空間マッピング(フィールド処理)の実装が完了しました。
パネルUI、視線追従の機能実装が残っていますが、少し設計を悩みたいのでひとまず再設計作業を完了とします。
bluebirdofoz.hatenablog.com


ゲーム開始時のエフェクトの管理クラスとして、MainCharactorオブジェクト内に新たに「EffectManager」を追加しました。
本オブジェクトがゲーム開始時の「球体が弾け飛び、ユニティちゃんが現れる」という演出を管理します。
f:id:bluebirdofoz:20170605043342j:plain
「EffectManager」が球体オブジェクトを管理しており、初期化時にマテリアルを有効化します。
このため、実装作業時には球体オブジェクトのメッシュを無効にしておけます。
f:id:bluebirdofoz:20170605043349j:plain
再設計前と比べ、シーン画面が見やすくなりました。


空間マッピングのフィールド処理は「GameField」オブジェクトが担当しています。
Unityデバッグ上では「SpatialMapping」の代わりに「TestField」オブジェクトを有効化します。
このため、Unity上で「TestField」を編集することで様々なフィールドでのデバッグ操作が可能です。
f:id:bluebirdofoz:20170605043357j:plain
フィールド処理そのものはシグナルを受け取ると、メッシュの変更処理を行います。
「SpatialMapping」と「TestField」で管理を共通化しているため、Unity上で空間マッピングへの処理のデバッグが可能です。
f:id:bluebirdofoz:20170605043405j:plain
Iguanaシグナルを受け取るとメッシュが変わります。


音声認識は「GameUI」オブジェクトの下位スクリプト「Speech」オブジェクトとしてアタッチされています。
また同じくキーボード認識には「Keyboard」オブジェクトがアタッチされています。
f:id:bluebirdofoz:20170605043416j:plain

前述のIguanaシグナルはキーボード操作の「I」キーが押下されたとき、「Keyboard」オブジェクトがこれを検出し、「GameUI」オブジェクトを通してPresenterへと通知されます。
・Keyboard.cs(抜粋)

if (Input.GetKey(KeyCode.I))
{
    // 「I」キーを検出したとき、「Iguana」シグナルをキャストする
    EFreeSignal signal = EFreeSignal.Iguana;
    p_GameUI.EventOnFreeSignalClicked(signal);
}

また、音声認識では"メッシュ"の音声が認識されたとき、「Speech」オブジェクトがこれを検出し、「GameUI」オブジェクトを通してPresenterへと通知されます。
・Speech.cs(抜粋)

// "mesh"を辞書に登録
p_DictionaryKeywords.Add("mesh", () =>
{
    // メッシュ効果を切り替え
    if (p_GameUI != null)
    {
        // 「mesh」音声を検出したとき、「Iguana」シグナルをキャストする
        EFreeSignal signal = EFreeSignal.Iguana;
        p_GameUI.EventOnFreeSignalClicked(signal);
    }
});


今回で一通り、実装として形が固まりましたが、まだ完了ではありません。
次はコメント記述や不要コードの削除など、コード自体のブラッシュアップを行います。

会社は有休を取っておいたので、明日の内に終わらせてしまいます。