Unityボタンがクリックできない
Unityのボタンがクリックできません。
超初心者であり、原因の究明のやり方がわからないため、ここで質問します。すいません。
ちなみに、Unity ボタン 反応しないでググっては見たのですが刺さる物はありませんでした。
YouTubeで初心者向けにテトリスの作り方と言った内容のものです
https://youtu.be/IbHhV_-8VxQ?si=FiJBMUtspZ8CHpOl
バージョンはUnity2022.3.6f1です
ちなみに、参考動画の使っていたバージョンは2020.3.12f1です
変わらないだろうと思い使ってしまいました。
ただ、最後の最後(2:00:00当たりから)
ゲームオーバー画面となり、リトライボタンを押す。という最後の最後ができず困っております。
scriptもUnityにもエラーが出ず、何が原因なのかがわからない状態です。
何が言いたいのと言えば
『リトライボタンが押せない』
です。
おかしな点として今現状いえるのは
動画では、↓のように[GameManager] > [Restart()]と選択できるのですが
↑僕の画面では[newBehaviourScript] > [Restart()]となっており、結果画面は出るもののボタンが反応しません。
何が原因なのかわからないためスクショを張ります
情報が多くてすいません。
あとGameManagerのscriptです。
一番下にRestartの変数?関数?です
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;//シーン遷移のライブラリ
public class NewBehaviourScript : MonoBehaviour
{
//変数の作成//
Spawner spawner;//スポナー
Block activeBlock; //生成されたブロック格納
[SerializeField]
private float dropInterval = 0.25f;//次にブロックが落ちるまでのインターバル時間
float nextdropTimer;//次にブロックが落ちるまでの時間
//変数の作成//
//ボードスクリプトを格納
Board board;
//変数の作成//
//入力受付タイマ―(3種類)
float nextKeyDownTimer, nextKeyLeftRightTimer, nextKeyRotateTimer;
//入力インターバル(3種類)
[SerializeField]
private float nextKeyDownInterval, nextKeyLeftRightInterval, nextKeyRotateInterval;
//変数の作成//
//パネルの格納
[SerializeField]
private GameObject gameOverPanel;
//ゲームオーバー判定
bool gameOver;
//スポナーオブジェクトをスポナー変数に格納するコードの記述
private void Start()
{
spawner = GameObject.FindObjectOfType<Spawner>();
//ボードを変数に格納する
board = GameObject.FindObjectOfType<Board>();
spawner. transform.position = Rounding.Round(spawner.transform.position);
//タイマーの初期設定
nextKeyDownTimer = Time.time + nextKeyDownInterval;
nextKeyLeftRightTimer = Time.time + nextKeyLeftRightInterval;
nextKeyRotateTimer = Time.time + nextKeyRotateInterval;
//スポナークラスからブロック生成関数を読んで変数に格納する
if (!activeBlock)
{
activeBlock = spawner.SpawnBlock();
}
//ゲームオーバーパネルの非表示設定
if(gameOverPanel.activeInHierarchy)
{
gameOverPanel.SetActive(false);
}
}
private void Update()
{
if (gameOver)
{
return;
}
PlayerInput();
}
//関数の作成//
//キーの入力を検知してブロックを動かす関数
//ボードの底に着いた時に次のブロックを生成する関数
void PlayerInput()
{
if (Input.GetKey(KeyCode.D) && (Time.time > nextKeyLeftRightTimer)
|| Input.GetKeyDown(KeyCode.D))
{
activeBlock.MoveRight();//右に動かす
nextKeyLeftRightTimer = Time.time + nextKeyLeftRightInterval;
if (!board.CheckPosition(activeBlock))
{
activeBlock.MoveLeft();
}
}
else if (Input.GetKey(KeyCode.A) && (Time.time > nextKeyLeftRightTimer)
|| Input.GetKeyDown(KeyCode.A))
{
activeBlock.MoveLeft();//左に動かす
nextKeyLeftRightTimer = Time.time + nextKeyLeftRightInterval;
if (!board.CheckPosition(activeBlock))
{
activeBlock.MoveRight();
}
}
else if(Input.GetKey(KeyCode.E) && (Time.time > nextKeyRotateTimer))
{
activeBlock.RotateRight();
nextKeyRotateTimer = Time.time + nextKeyRotateInterval;
if (!board.CheckPosition(activeBlock))
{
activeBlock.RotateLeft();
}
}
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))
{
if (board.OverLimit(activeBlock))
{
GameOver();
}
else
{
//底に着いた時の処理
BottomBoard();
}
}
}
}
void BottomBoard()
{
activeBlock.MoveUp();
board.SaveBlockIngrid(activeBlock);
activeBlock = spawner.SpawnBlock();
nextKeyDownTimer = Time.time;
nextKeyLeftRightTimer = Time.time;
nextKeyRotateTimer = Time.time;
board.ClearAllRows();//埋まっていれば削除する
}
//関数の作成//
//ゲームオーバーになったらパネルを表示する
void GameOver()
{
activeBlock.MoveUp();
//ゲームオーバーパネルの非表示設定
if (!gameOverPanel.activeInHierarchy)
{
gameOverPanel.SetActive(true);
}
gameOver = true;
}
//シーンを再読み込みする(ボタン押下で呼ぶ)
public void Restart()
{
SceneManager.LoadScene(0);
}
}
物凄い量になって申し訳ないです。