初心者です。unityで次のサイトを参考にして2Dのゲームを作成しています。
Unityでゲームを作ろう!2Dアクションゲーム「ユニティちゃんの2Dアクション」
下記リンクの手順まで終了したのですが、キャラクターの後ろに常にゲームクリア画面、ゲームオーバー画面が表示されてしまっています。
クリア&ゲームオーバー処理の作り方(2):キャンバスの作成
コードの書き間違え等確認したのですがありませんでした。どうすれば解決するのでしょうか?
以下にGamemanagerのソースコードとヒエラルキーを載せておきます
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; //追加 5[RequireComponent(typeof(MoveSceneManager))] 6[RequireComponent(typeof(SaveManager))] 7[RequireComponent(typeof(SoundManager))] 8[DefaultExecutionOrder(-5)] 9public class GameManager : SingletonMonoBehaviour<GameManager> 10{ 11 [Header("シーンロード時に自動生成するプレハブを登録")] 12 [SerializeField] 13 GameObject[] prefabs = null; 14 //追加 15 [Header("UIの設定")] 16 [SerializeField] 17 GameObject clearCanvasPrefab = null; 18 [SerializeField] 19 GameObject gameOverCanvasPrefab = null; 20 [SerializeField] 21 string nextButtonName = "NextButton"; 22 [SerializeField] 23 string retryButtonName = "RetryButton"; 24 [SerializeField] 25 string titleButtonName = "TitleButton"; 26 MoveSceneManager moveSceneManager; 27 SaveManager saveManager; 28 SoundManager soundManager; 29 //追加 30 bool isClear = false; 31 bool isGameOver = false; 32 int numOfCoins = 0; 33 int correctedCoins = 0; 34 public int CorrectedCoins 35 { 36 set 37 { 38 correctedCoins = value; 39 if (correctedCoins >= numOfCoins) 40 { 41 Clear(); 42 } 43 } 44 get 45 { 46 return correctedCoins; 47 } 48 } 49 protected override void Awake() 50 { 51 base.Awake(); 52 if (Debug.isDebugBuild) 53 { 54 55 } 56 moveSceneManager = GetComponent<MoveSceneManager>(); 57 saveManager = GetComponent<SaveManager>(); 58 soundManager = GetComponent<SoundManager>(); 59 } 60 void Start() 61 { 62 if (Debug.isDebugBuild) 63 { 64 InstantiateWhenLoadScene(); 65 InitGame(); //追加 66 } 67 } 68 void Update() 69 { 70 71 } 72 public void InstantiateWhenLoadScene() 73 { 74 if (moveSceneManager.SceneName == "Title") 75 { 76 return; 77 } 78 foreach (GameObject prefab in prefabs) 79 { 80 Instantiate(prefab, transform.position, Quaternion.identity); 81 } 82 } 83 //--ここから追加-- 84 //ゲーム初期化メソッド 85 public void InitGame() 86 { 87 isClear = false; 88 isGameOver = false; 89 numOfCoins = GameObject.FindGameObjectsWithTag("Coin").Length; 90 correctedCoins = 0; 91 } 92 public void Clear() 93 { 94 if (isClear || isGameOver) 95 { 96 return; 97 } 98 isClear = true; 99 GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>().isActive = false; 100 //クリア画面のキャンバスを生成 101 Instantiate(clearCanvasPrefab, transform.position, Quaternion.identity); 102 //ボタンのコンポーネントを取得 103 Button nextButton = GameObject.Find(nextButtonName).GetComponent<Button>(); 104 Button titleButton = GameObject.Find(titleButtonName).GetComponent<Button>(); 105 //ボタンに、クリックしたときの処理を登録 106 //ただし「次のステージ」ボタンは次のステージがないときは押せないようにする 107 if (moveSceneManager.CurrentSceneNum < moveSceneManager.NumOfScene - 1) 108 { 109 nextButton.onClick.AddListener(() => moveSceneManager.MoveToScene(moveSceneManager.CurrentSceneNum + 1)); 110 } 111 else 112 { 113 nextButton.interactable = false; 114 } 115 titleButton.onClick.AddListener(() => moveSceneManager.MoveToScene(0)); //タイトル画面に戻るので、シーン番号は0番 116 } 117 public void GameOver() 118 { 119 if (isGameOver || isClear) 120 { 121 return; 122 } 123 isGameOver = true; 124 GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>().isActive = false; 125 //ゲームオーバー画面のキャンバスを生成 126 Instantiate(gameOverCanvasPrefab, transform.position, Quaternion.identity); 127 //ボタンのコンポーネントを取得 128 Button retryButton = GameObject.Find(retryButtonName).GetComponent<Button>(); 129 Button titleButton = GameObject.Find(titleButtonName).GetComponent<Button>(); 130 //ボタンに、クリックしたときの処理を登録 131 retryButton.onClick.AddListener(() => moveSceneManager.MoveToScene(moveSceneManager.CurrentSceneNum)); //リトライなので、今と同じシーンを再読み込み 132 titleButton.onClick.AddListener(() => moveSceneManager.MoveToScene(0)); //タイトル画面に戻るので、シーン番号は0番 133 } 134}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/06 09:09