Unityに関連する記事です

 この手順ではゲームオーバー表示中にゲーム画面をクリック(タップ)すると、ゲームが最初からスタートする処理を実装していきます。


<実装画面 ゲームオーバー表示 => 画面をクリックするとゲームが最初からスタート>
https://gyazo.com/98a07b6008ac4430d38d62a073a2fbb7


手順22 ーリスタート処理の実装ー
39.ゲームオーバー表示中にゲーム画面をクリック(タップ)すると、ゲームが最初からスタートする処理を追加する



 新しく学習する内容は以下になります。

・RemoveAllListenersメソッド
・DOTweenの機能と実装例 ーOnCompleteメソッドー



39.ゲームオーバー表示中にゲーム画面をクリック(タップ)すると、ゲームが最初からスタートする処理を追加する

1.設計


 ゲームオーバー表示のゲームオブジェクトに Button コンポーネントを追加して、ゲームオーバー中はゲーム画面全体をボタンとして扱えるように変更します。
この状態でゲーム画面をクリック(タップ)すると、ゲームオーバー表示が徐々に見えなくなっていき、もう一度、最初からゲームかスタートする制御を実装します。

 ゲームオーバー表示は、Canvas ゲームオブジェクトの子の子(孫)オブジェクトである InfoBackGround ゲームオブジェクトを制御することで表示/非表示を行っています。
こちらのゲームオブジェクトに Button コンポーネントをアタッチして、薄暗い背景画像全体をボタンとしてクリックできるように設定を変更します。

 このボタンの制御処理を UIManager スクリプトに追加して、ゲームオーバー表示中の画面をクリックしたら、もう一度ゲームシーンを読み込む処理を追加します。

 まずは最初に InfoBackGround ゲームオブジェクトの設定を変更していきます。ボタンとしての機能が追加されますので、名前も変更しておきます。

 こちらの設定が終了したら、UIManager スクリプトを修正して、Button コンポーネントを操作出来るようにするための変数を追加したり、
メソッドを修正・追加したりして、ゲームシーンを再度読み込む処理を追加します。


2.btnInfo_BackGround ゲームオブジェクトを設定する


1.InfoBackGround ゲームオブジェクトの名前を btnInfo_BackGround に変更する

 ヒエラルキーの InfoBackGround ゲームオブジェクト(Canvas/InfoPlace/InfoBackGround)を選択し、名前を btnInfo_BackGround に変更します。


ヒエラルキー画像



2.Button コンポーネントを追加する

 btnInfo_BackGround ゲームオブジェクトを選択し、インスペクターの一番下にある Add Component ボタンを押して、Button コンポーネントを追加します。
追加するだけで他に変更箇所はありません。


btnInfo_BackGround ゲームオブジェクト インスペクター画像



3.Image コンポーネントの Raycast Target のチェックを入れる

 btnInfo_BackGround ゲームオブジェクトを選択し、Image コンポーネントの Raycast Target のスイッチにチェックを入れます。
このチェックが外れていると、Button コンポーネントがアタッチされていても、クリックやタップに反応しません。


btnInfo_BackGround ゲームオブジェクト インスペクター画像



3.UIManager スクリプトを修正する


 Button コンポーネントが追加された btnInfo_BackGround ゲームオブジェクトを操作できるように新しく変数を1つ宣言して追加します。
 
 新しく RestartGame メソッドを追加して、もう一度現在のゲームシーンを読み込む処理を追加します。
シーンの遷移を行うためには using に UnityEngine.SceneManagement の宣言が必要になります。

 DisplayGameOverInfo メソッドに処理を追加し、Button コンポーネントのOnClick イベントに RestartGame メソッドを登録します。
btnInfo_BackGround ゲームオブジェクトはゲーム画面全体を覆うように配置されています。よって画面全体がボタンとして扱われるようになります。
そのため、ゲーム画面のどの部分をクリック、あるいはタップしても、RestartGame メソッドが実行されるようになります。


UIManager.cs

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



4.<RemoveAllListenersメソッド>


 Button コンポーネントにスクリプトからイベント(メソッド)を登録している場合に、そのメソッドを削除することができるメソッドです。

  // ボタンからメソッドを削除(重複クリック防止)
  btnInfo.onClick.RemoveAllListeners();

 この処理を行うことによって、btnInfo 変数の Button コンポーネントにスクリプトから追加された RestartGame メソッドを削除し、実行できなくすることが出来ます。
これは複数回画面をクリックした際に処理が重複して実行されてしまうのを防ぐため、一度、画面をクリックして RestartGame メソッドが実行されたら、
次に画面をクリックしても処理を行わないようにするための制御処理になります。(2回目以降クリックしてもメソッドが削除されているため、何も処理を行わない)


参考サイト
Unity公式スクリプトリファレンス
UnityEventBase .RemoveAllListeners
UnityEventBase.RemoveAllListeners
デジタルフロッグ様
ボタンのイベントをスクリプトから登録、削除する方法
http://karaagedigital.hatenablog.jp/entry/2016/11/...


5.<DOTweenの補間機能の実装例 ーOnCompleteメソッドー>


 OnCompleteメソッドは、他のDoTweenメソッドに付随する処理です。この処理はコールバック処理になっており、一緒に処理しているメインのメソッドの処理の終了を待ちます。
その処理が終了してから、このOnCompleteメソッドの中に記述した処理を実行してくれます。

  canvasGroupInfo.DOFade(0f, 1.0f)
            .OnComplete(()=> { 
                Debug.Log("Restart");
                SceneManager.LoadScene(sceneName); 
            });

 今回の実装では、canvasGroupInfo.DOFadeメソッドによって、CanvasGroup コンポーネントの Alpha 値の値を操作し、その処理が終了した後で
OnCompleteメソッドの中に書かれた処理が実行されるようになっています。

 canvasGroupInfo.DOFadeメソッドでは、CanvasGroup コンポーネントによってゲームオーバー表示を非表示にする処理が行われます。
そして、すべて非表示(Alpha = 0)になった段階で OnComplete メソッドが実行されて、Debug.Logによる表示と、SceneManager.LoadSceneメソッドが実行されて
現在のシーンをもう一度読み込む、という処理の設計になっています。


6.UIManager ゲームオブジェクトの UIManager スクリプトを設定する


 UIManager ゲームオブジェクトを選択してインスペクターを確認します。
UIManager スクリプト内に新しく宣言した変数のアサイン情報が表示されますので設定します。


UIManager ゲームオブジェクト インスペクター画像



 btnInfo 変数には、Button コンポーネントがアタッチされているゲームオブジェクトをアサインします。
ヒエラルキーにある btnInfo_BackGround ゲームオブジェクトをドラッグアンドドロップしてアサインします。
自動的に、btnInfo_BackGround ゲームオブジェクトにアタッチされている Button コンポーネントがアサインされます。


<手順動画 アサイン>
https://gyazo.com/422650b5e604da74dfd287c7be3d2d50


UIManager ゲームオブジェクト アサイン後のインスペクター画像



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


 ゲームを実行し、ゲーム画面外へ落下してゲームオーバーになります。画面にゲームオーバー表示が出ますので、
画面をクリックして、このゲームオーバーの表示が徐々に消えていき、もう一度最初からゲームが開始されるか確認します。
 

<実行動画 ゲームオーバー表示中に画面をクリックすると、もう一度最初からゲームが開始される>
https://gyazo.com/c5ba3dd1a6cb150a436021bd123269ff


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

 次は 手順23 ータイトル表示の実装ー です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

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

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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