質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

439閲覧

unity ] シーンが移行せずに常に画面にうつり続けてしまう

Satsuki_

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/06/27 09:09

初心者です。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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

端的に言うとヒエラルキー上のClearCanvasとGameOverCanvasを削除してしまえばいいと思います。

リンク先を少し読んでみましたがクリア画面とゲームオーバー画面を作成してプレハブを作成したようですね。
そしてゲームクリアしたらClear()を呼んでその中でClearCanvasを生成しているのでヒエラルキーから消してしまっても大丈夫です。

投稿2022/06/29 12:13

syorice

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Satsuki_

2022/07/06 09:09

解決しました!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問