Unityに関連する記事です

手順2 ーカメラの自動切り替え機能の実装ー

 新しい学習内容は、以下の通りです。

 ・プラットフォーム依存コンパイル −プラットフォームに合わせて処理を変える機能−



3.AR Camera と Main Camera をプラットフォームによって自動的に切り替える機能を実装する


 ARCamera ゲームオブジェクトがアクティブの場合、ゲーム実行時以外には Game ビューは黒い画面になっています。
これはエディターでは ARCamera が認識しないためです。

 もしも Scene ビューだけではなく、ゲーム実行時以外でも Game ビューでの静止画面を事前に確認しておきたい場合には
ARCamera ゲームオブジェクトを非アクティブに切り替えてください。そうすることで Game ビューが通常のカメラで映している状態に戻ります。

 ただし、制作が終わって実機でのテストを行う場合には、必ず ARCamera ゲームオブジェクトをアクティブに戻すようにしてください。

 この手順は任意ですので、必ず行う必要はありません。


1.設計


 AR ゲームの場合、エディターでのデバッグよりも、実機(スマホ端末)でのデバッグが必須要件になります。
(ARFoundation 5 バージョンではエディターでのシミュレータ機能が搭載されますが、現在の 4.2 バージョンでは実機でのテストが必要です。)

 エディターでデバッグを行う場合には AR Camera ゲームオブジェクトがアクティブ状態だと MainCamera ゲームオブジェクトが正常に機能しません。
そのため、その都度、AR Camera ゲームオブジェクトを非アクティブ化する必要があります。
それとは逆に、実機でデバッグを行う場合にはビルド前の前に MainCamera ゲームオブジェクトを、やはりその都度非アクティブ化したりしないと、正常に ARCamera が機能しません。
これらは手間であると同時に、実行前の作業が増えて効率が悪い上、この作業を忘れてしまうと正常な機能がデバッグできないという大きなデメリットもあります。



 そこで、ゲームを起動した際に、どのプラットフォーム(ゲーム環境)でゲームを起動しているかに合わせて、
利用するカメラを自動的に切り替える機能を実装し、先ほどの手動でカメラの切り替えを行う部分を自動化します。
手間が省けるだけではなく、非アクティブ化し忘れ、有効化し忘れを防止することにもつながります。

 Unity にはプラットフォーム依存コンパイルという機能があり、こちらを利用することにより、起動しているゲーム環境に応じて
カメラを制御する処理を実装していきます。


2.CameraModeSwitcher スクリプトを作成する


 AR とエディター用のカメラを登録し、制御するためのスクリプトを作成します。
制御にはプラットフォーム依存コンパイルを利用しています。


CameraModeSwitcher.cs

<= クリックすると開きます


 スクリプトを作成したらセーブを行います。


3.<プラットフォーム依存コンパイル −プラットフォームに合わせて処理を変える機能−>


 Unityではプラットフォーム(PC、Androidなどの動作する環境)に合わせて処理を変更する機能があり、それをプラットフォーム依存コンパイルと呼びます。

    void Awake()
    {
# if UNITY_EDITOR
        arCamera.SetActive(false);
# elif UNITY_ANDROID || UNITY_IOS
        editorCamera.SetActive(false);
# endif
    }

 #if プラットフォーム名(Unityで定義されている)を指定することで、そのプラットフォームの場合のみ指定した処理を行うように設定できます。
また if / else 文と同じように #elif を追加する、あるいは else 文と同じように #else を追加することで別のプラットフォームの場合の分岐を作成できます。
そのため使用方法は通常のif文の制御と同様です。

 今回のケースでは、プラットフォームが UnityEditorの場合(PCも含みます)には、arCamera 変数に対して SetActive メソッドを実行するように記述しています。
プラットフォームが elif、つまり、UnityEditor 以外でゲームを実行している場合であり、かつ Andorid か iOS のプラットフォームの場合には、
editorCamera 変数に対して SetActive メソッドを実行するように記述しています。

 この機能を利用することにより、1つのメソッド内でプラットフォームに応じた処理を分岐して記述できます
今回は、Unity エディター(PC)においてゲームを実行した場合には、MainCamera ゲームオブジェクトを利用できる状態にし、
スマホ端末でゲームを実行した場合には AR のカメラを利用できる状態にしています。

 また、プラットフォームによって入力の方式が異なる場合にも適用することができます。
スマホとPCではキー入力の方式が異なるため、一概に1つの処理ですべてをカバーすることが出来ないためです。
そういったケースを想定して、こういったプラットフォームに依存した形式のコンパイル方法が用意されています。


<参考サイト>
Unity公式スクリプトリファレンス
プラットフォーム依存コンパイル
https://docs.unity3d.com/ja/current/Manual/Platfor...
XR-Hub 様
【Unity】プラットフォームごとに処理を変更する方法
https://xr-hub.com/archives/13648


4.MainCamera ゲームオブジェクトを作成する


 AR テンプレートを利用している場合、ARCamera しかありませんので、Camera を追加します。
すでに MainCamera ゲームオブジェクトがヒエラルキーにある場合にはこの手順はスキップし、【5】の手順へ移ってください。

 ヒエラルキーの空いている場所で右クリックをしてメニューを開き、Camera を選択します。
新しい Camera が作成されますので、名前を MainCamera に変更します。


ヒエラルキー画像



インスペクター画像




5.CameraModeSwitcher ゲームオブジェクトを作成し、CameraModeSwitcher スクリプトをアタッチして設定を行う


 ヒエラルキーの空いている場所で右クリックをしてメニューを開き、Create Empty を選択します。
新しいゲームオブジェクトが作成されますので、名前を CameraModeSwitcher に変更します。

 先ほど作成した CameraModeSwitcher スクリプトをドラッグアンドドロップしてアタッチしてください。
インスペクターを確認し、変数が2つ表示されていますので、アサイン情報を登録します。

 EditorCamera 変数には、ヒエラルキーにある MainCamera ゲームオブジェクトをドラッグアンドドロップしてアサインします。

 ARCamera 変数には、ヒエラルキーにある AR Camera ゲームオブジェクト(AR Session Origin ゲームオブジェクトの子オブジェクト)をドラッグアンドドロップしてアサインします。


ヒエラルキー画像



インスペクター画像



 以上で設定は完了です。

 いずれのゲームオブジェクトもスイッチは入れた状態、つまりアクティブの状態にしておいてください。
スクリプトを使用して、利用しないゲームオブジェクトの方のスイッチを切るように制御を行っているためです。


6.ゲームを実行して動作を確認する


 まずはエディターでゲームを実行してください。
ヒエラルキーにある AR Camera ゲームオブジェクトが非アクティブの状態になれば、制御成功です。


エディターでの確認



 なお、Bulid Settings のプラットフォーム設定で Android か iOS を設定している場合であっても、
エディター上で起動した場合、設定しているプラットフォームではなく、エディターでのコンパイルになります。
そのため、先ほどのプラットフォーム依存コンパイルが処理されて、ARCamera が非アクティブになります。



 また Console ビューに警告メッセージが表示されます。
こちらは AR 環境下であるにもかかわらず、ARCamera が動作できない環境(端末ではない)ことに原因があります。


Console ビュー



 これは ARCamera がアクティブの状態であっても表示されます。
現時点では無視して問題ありません。



 次は、ビルドを行って、実機にてテストを行います。
MainCamera ゲームオブジェクトが非アクティブの状態になり、AR カメラが起動していれば制御成功です。

 見分け方ですが、真っ黒の画面になっている場合には、MainCamera が起動してしまっています。
画面がカメラの状態(部屋などを撮影できる状態)になっていれば、AR カメラが起動しています。



  以上でこの手順は終了です。

 => 次は 手順3 AR空間に画像付きのオブジェクトを生成する です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます