【Unity/2D】スイカゲーム風の落ち物ゲームを作ってみる話 #10 ゲームのリトライ機能を作る
記事をご覧いただき、誠にありがとうございます。
これで下準備が整ったので、スクリプトを編集を編集します。
今回は追加したメンバ変数はありませんが、usingにSceneManagementを追加しています。
この時の注意なのですが、左下のGameManagerを設定する際に、オブジェクト選択画面を開くとデフォルトではAssetタブが選択されています。
投稿主の無能です。
前回は、次の果物の色を表示する機能を実装しました。
今回はゲームをリトライする機能を作りたいと思います。
ゲームのリトライ
ゲームのリトライ機能と言っても、同じシーンを再読み込みしてやればゲームは開始時に戻ります。
ということで、UIにリトライボタンを追加しましょう。
リトライボタンの追加
UI_GameOverをアクティブにして、メニュー > UI > Button - TextMeshProで「Retry」というボタンを追加してUI_GameOverの子オブジェクトにします。
UI_GameOverをアクティブにする
メニュー > UI > Button - TextMeshProで「Retry」というボタンを追加する
「Retry」というボタンを追加してUI_GameOverの子オブジェクトにする
そしてRetryの子オブジェクトの表示テキストを編集して、ボタンを配置します。
表示テキストを編集する
ボタンを配置
Gameビュー
そしてUI_GameOverを非アクティブに戻します。
UI_GameOverを非アクティブにする
スクリプトを編集
今回はスクリプトを追加せずGameManagerに追記していきます。
GameManager.cs
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
#region Var-GameOverUI
[Header("ゲームオーバーのUI")]
[SerializeField] GameObject UI_GameOver;
#endregion
#region Var-ScoreUI
[Header("得点の数字部分のオブジェクト")]
[SerializeField] TMP_Text UI_ScoreText;
#endregion
#region Var-Internal
public static bool isGameOver = false; // ゲームオーバーのフラグ
int currentScore = 0; // 現在のスコア
#endregion
#region Start
void Start()
{
// スコアの更新
ScoreUpdate();
}
#endregion
#region Update
void Update()
{
// ゲームオーバーのフラグがtrueだった場合
if (isGameOver)
{
// ゲームオーバーのUIが非アクティブの場合
if(!UI_GameOver.activeInHierarchy)
{
// ゲームオーバー処理
GameOver();
}
}
}
#endregion
#region GameOver
// ゲームオーバー
void GameOver()
{
// ゲームオーバーのUIをアクティブ
UI_GameOver.SetActive(true);
}
#endregion
#region GameRetry
// ゲームのリトライ
public void GameRetry()
{
// ゲームオーバーのフラグをfalse
isGameOver = false;
// ゲームオーバーのUIを非アクティブ
UI_GameOver.SetActive(false);
// 現在のシーンを再読み込み
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
#endregion
#region AddScore
// スコアの加算
public void AddScore(int score)
{
// スコアを加算
currentScore += score;
// スコアの更新
ScoreUpdate();
}
#endregion
#region ScoreUpdate
// スコアの更新
void ScoreUpdate()
{
// 現在のスコアをUIに反映
UI_ScoreText.SetText(currentScore.ToString());
}
#endregion
}
今回は追加したメンバ変数はありませんが、usingにSceneManagementを追加しています。
では処理を見ていきます。
GameRetry関数
GameRetry関数は、スクリプト外のボタンからアクセスされるので、アクセス範囲をpublicにしています。まずゲームオーバーのフラグをfalseにして、UI_GameOverを非アクティブにします。
そして現在のシーン名を取得して、その名前のシーンを再読み込みします。
ではスクリプトが編集できたので、Unityでの作業をします。
Unityでの作業
RetryボタンのButtonコンポーネントに、OnClick()というボタンが押し下げられた時に呼び出す関数を設定します。OnClick()にGameManagerのGameRetry関数を設定する
そのタブをSceneタブに切り替え、GameManagerを設定します。
オブジェクト選択画面はSceneタブに切り替えてGameManagerを設定
すると右側のアクセス可能な一覧が表示されるので、GameManager > GameRetry関数を設定します。
アクセス可能な一覧が表示されるのでGameManager > GameRetry関数を設定
これで準備ができたので動作確認をします。
動作確認
今回の確認事項は
- ゲームオーバーになったらリトライのボタンが表示されるか
- リトライボタンを押してゲーム開始時の状態で遊べるか
- ゲーム再開時はUI_GameOverは非アクティブになっているか
になります。
では確認しましょう。
ゲームオーバーになったらリトライボタンが表示された
リトライボタンを押して再度遊べるようになった
ゲームオーバーの表示も消えて、再び遊べるようになりました。
まとめ
今回は
- ゲームオーバーの表示の際にリトライボタンを追加した
- ゲームを繰り返し遊べるようにリトライ機能を実装した
という事をやりました。
ここまでお疲れ様でした。
これでスイカゲームの基本的な機能は実装出来たと思うので、後は見た目を整えたりBGMや効果音を付けたり、またはオリジナルの要素を足したりして、ゲームの肉付けをして面白いゲームに仕上げてみてください。
それではまた、何時か何処かで!












コメント
コメントを投稿