こちらを元に解説しています。
https://qiita.com/hanatan079/items/3675855784e14acda119
★★★★★随時更新★★★★★
2022.11.22追記
2022.12.3追記
2022.12/9追記
★★★★★★★★★★★★★★★
(ライブラリ)
【シーン移動】
using UnityEngine.SceneManagement;
(変数)
【パネル格納】
[SerializeField]
private GameObject gameOverPanel;
【ゲームオーバー判定】
bool gameOver;
【ゲームオーバーパネルの非表示設定(スタート)】
①if (gameOverPanel.②activeInHierarchy)
{
③gameOverPanel.SetActive(false);
}
①ゲームオーバーパネルが現在表示されているのか
②Hierarchyで表示されているか
③falseならgameOverPanelを非表示にする
パネルが表示 されているなら、gameOverPanelオブジェクトを非表示にする
(関数)
【ゲームオーバーになったらパネルを表示する】
void GameOver()
{
activeBlock.MoveUp();
if (!gameOverPanel.activeInHierarchy)
{
gameOverPanel.SetActive(true);
}
gameOver = true;
}
①activeBlockを一段上にあげる
②ゲームオーバーパネルの非表示設定と反対の実装
!否定→非表示だったら表示する
【シーンを再読み込みする(ボタン読み込み)】
public void Replay()
{
① SceneManager.LoadScene(0);
}
①File > BildSetteing のサンプルシーンが0番目になっている
サンプルシーンを表示したい為0を入れる
【ゲームオーバーの時はプレイヤーの受付をしないようにする(アップデート)】
if ①(gameOver)
{
return;
}
①ゲームオーバーになったらパネルを表示する関数の受け取り
【線を超えたかどうか(Board.cs)】
①public bool OverLimit(Block block)
{
②foreach (Transform item in block.transform)
{
③if (item.transform.position.y >= heigt - header)
{
④ return true;
}
}
return false;
}
①他から呼び出し可能なオーバーリミット関数
②ブロックがボードの枠からはみ出ていないかの確認
③線を超えたかどうか
heigt - header現在表示されているブロック
よりyが高い=ボードからはみ出ていることになる
④超えた場合
【OverLimitを呼び出し(GameManeger.cs)】
(見本)
//下に動かす
else if (Input.GetKey(KeyCode.S) && (Time.time > nextKeyDownTimer) || (Time.time > nextdropTimer))
{
activeBlock.MoveDown();
nextKeyDownTimer = Time.time + nextKeyDownInterval;
nextdropTimer = Time.time + dropInterval;
if (!board.CheckPosition(activeBlock))
{
//⑨OverLimitを呼び出し
if (board.OverLimit(activeBlock))
{
GameOver();
}
else
{
//底についた時の処理
BottomBoard();
}
}
}
解説
//追記
①if (board.OverLimit(activeBlock))
{
② GameOver();
}
else
{
③
}
①activeBlockが底についているのかの判定
②true =はみ出ている。その為GameOverにしたい
③GameOverでない場合、底についた時の処理をする