Unityに関連する記事です

 ゲームをスマホでも操作を行えるようにします。
現時点での実装内容において、すでに利用できる部分もあるため、足りない部分を精査して設計を行い、そちらの実装を行います。

<実装動画>
動画ファイルへのリンク



発展18 ースマホでの操作機能ー

<学習内容>
 ・プラットフォーム依存コンパイル



設計


 スマホでもゲームが遊べるように、機能を追加します。


現在、プレイヤーであるユーザーが操作できる項目は、次の通りです。

 1.画面をクリックする => |討鯣射する。弾がない場合にはリロードする
              ▲燹璽咫失得犬鬟好ップする

 2.分岐ボタン / 武器取得・キャンセルボタンをクリックする => 分岐を選択、武器の取得か諦めるかを選択する

 3.キーボードの武器切り替えボタンを押す => 所持している武器の切り替えを行う

 上記のうち、【1.画面のクリック】と【2.ボタンのクリック】については、どちらもスマホのタップが同じ動作を行います

 よって、現在のゲームの操作において、スマホでの操作に対応していないのは、【3.キーボードの武器切り替えボタンを押す】だけですので、
こちらについて、新しく画面にボタンを配置して、スマホ画面での操作が行えるようにします。

 その後、ボタンは UI になりますので、UIManager スクリプトの修正を行い、ボタンの機能を制御出来るようにします。

 次に GameManager スクリプトを修正して、UIManager スクリプトに用意したボタンに対して
WeaponChanger スクリプトの ChangeWeapon メソッドを登録してボタンとしての機能を持たせます。

 最後に、RayControlller スクリプトの修正を行い、分岐選択や武器取得用のポップアップウインドウが開いている場合に弾を発射しないようにしている制御部分に
スマホにおいても同様の制御が入るように処理の追加を行います。


Canvas の子オブジェクトとして、ButtonSet ゲームオブジェクトを作成する


 Canvas の子オブジェクトとして、CreateEmpty を実行して新規のゲームオブジェクトを作成し、
ButtonSet に名前を変更します。このゲームオブジェクトは各ボタンのフォルダ役となるゲームオブジェクトです。


インスペクター画像



ヒエラルキー画像



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


ButtonSet ゲームオブジェクトの子オブジェクトとして武器切り替え用のボタンを作成し、適宜な位置に配置する


 ボタンを作成したら、どのような役割のボタンであるかわかるように、適宜な名前を変更しておいてください。

 サイズや位置についても、この通りである必要はありません。
武器切り替え用のボタンの画像も任意です。わかりやすいものを利用しましょう。

 下記は参考画像です。


インスペクター画像



Sceneビュー画像



Gameビュー画像



UIManager スクリプトを修正する


 新しく作成したボタンを制御するため、UIManager スクリプトの修正を行います。
なぜ、このスクリプトを修正するのかを考えた上で、出来るだけ教材を見ずに、ボタンの制御処理を完成させてみてください。


UIManager.cs


 スクリプトを修正したらセーブします。


UIManager ゲームオブジェクトの設定を行う


 新しく追加した変数に武器切り替えボタンのゲームオブジェクトをドラッグアンドドロップしてアサインしてください。
自動的に Button コンポーネントの情報が登録されます。


インスペクター画像



 以上で設定は完了です。


GameManager スクリプトを修正する


 UIManager スクリプトに追加した武器切り替えボタンにメソッドを登録します。

 この処理だけが実装の方法ではありませんので、自分でイメージできた処理が合ったらそちらで実装に挑戦してください。

 今回の実装例では戻り値を活用した処理の作り方について提示しています。
処理を記述するときは、ただ見て書いていくのではなく、どのような処理によってプログラムが構築されているのかも
きちんと読み解いていくようにしましょう。


GameManager.cs

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


 スクリプトを修正したらセーブします。


RayControlller スクリプトを修正する


 スマホ対応の1つとして、画面のタップ処理の優先順位の制御があります。
分岐の選択や武器の取得のポップアップウインドウが開いている間は、弾を発射しないように制御を行っていましたが、
現在記述されている処理ではスマホでの制御が行われません。

 そのため、プラットフォーム依存コンパイルの機能を利用し、スマホにおいても、同様の制御が行われるように処理を追加します。


RayController.cs

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


 スクリプトを修正したらセーブします。


<プラットフォーム依存コンパイル>


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

#if UNITY_EDITOR
  // UI がタップされたときは処理しない(UI のボタンを押したらそちらのみを反応させる) 
  if (EventSystem.current.IsPointerOverGameObject()) { return; }
#else // スマホ用
  if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)) { return; }
#endif
#if プラットフォーム名(Unityで定義されている)を指定することで、そのプラットフォームの場合のみ指定した処理を行うように設定できます。
また if / else 文と同じように #elif を追加する、あるいは else 文と同じように #else を追加することで別のプラットフォームの場合の分岐を作成できます。
そのため使用方法は通常のif文の制御と同様です。

 今回のケースでは、処理の内容としては同じ処理になるのですが、プラットフォームによって異なる記述が必要になるため、
このプラットフォーム依存コンパイルの機能を利用して処理の分岐を作っています。

 プラットフォームが UnityEditorの場合(PCも含みます)には、
ゲーム画面の前面に Canvas などのクリックのイベントを感知するゲームオブジェクトが存在する場合には、処理を行わないように実する記述をしています。

 プラットフォームが else、つまり、UnityEditor 以外でゲームを実行している(Andorid や iOS のプラットフォームなど)の場合にも同じですが、
画面のタップについては判定する処理が異なるため、別の処理を記述しています。

 この機能を利用することにより、1つのメソッド内でプラットフォームに応じた処理を分岐して記述できます
今回は、同じイベントの感知を行う処理ではありますが、Unity エディター(PC)とそれ以外のプラットフォームにおいてゲームを実行した場合には、それぞれに異なる処理が必要になるため、
プラットフォームの確認をした上で、適切な処理が行われるように制御しています。

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


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


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


 ゲームの実行については、エディターでの実行のあとに、スマホ実機にて動作検証を行い、デバッグする必要があります。

 まずは今まで通り、エディターでゲームを実行して、想定している挙動になっているかを確認してください。
ボタンの制御だけではなく、分岐用のポップアップウインドウが開いている場合にも確認が必要です。

 問題がなければ、スマホ用のビルドの設定を行い、ファイルを出力して、自分のスマホでゲームを実行して武器切り替えボタンの操作を行ってください。
所持している武器が2つ以上ないとボタンは押せませんので、事前に準備しておくか、ゲーム内で取得するようにしてください。

 デバッグにおいて必要な情報を事前に用意することは、検討するべき重要な内容になります。
そのため、処理の内容を把握できていないと、用意する情報も分からなくなりますので、処理を読み解いて、自分で理解してからデバッグを行いましょう。


<実装動画>
動画ファイルへのリンク



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

 => 次は 発展19 ークリアしたステージ番号の登録機能ー です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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