ゲームクリア後にボールを消してゲームクリア・オーバーの両UIを出さない方法を自分なりに考えた結果、GameManagerにpublic GameObject destroy_ball;を追加してvoid updateの中にDestroy(destroy_ball);を挿入。unity内のGameManagerにDestroy_ballがあるからそこにBallを選択することで解決できた! using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class GameManager : MonoBehaviour { public Enemy[] blocks; public GameObject gameover_ui; public GameObject gameclear_ui; public GameObject destroy_ball; //クリア後にボール消す private bool isgameclear = false; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if(isgameclear != true) { if (DestroyAllBlocks()) { Debug.Log("ゲームクリア!"); gameclear_ui.SetActive(true); isgameclear = true; Destroy(destroy_ball); //ここでボールを消した } } } private bool DestroyAllBlocks() { foreach(Enemy b in blocks) { if(b != null) { return false; } } return true; } public void Gameover() { Debug.Log("ゲームオーバー"); gameover_ui.SetActive(true); } public void GameRetry() { SceneManager.LoadScene("game"); } }
ボールが下の壁につくと、「NullReferenceException:Object reference not set to an instance of an object ball.OnCollisionEnter(UnityEngine.Collision collision)(at Asset/ball.cs:29) 」とエラーが出ます。😢
ブロックを消すときにOnCollisionEnter(Collision collision)のなかでDestroy(gameObject)としていますが、これをgameObject.SetActive(false)とすることで対応しました。ブロックが全部消えたら、プレイヤーがボールを跳ね返すタイミングでforeach (Block b in Blocks) b.gameObject.SetActive(true);とやってすべてのブロックを表示させるという方法で対応しました。この方法で合っていますか?もっとスマートな方法はあるのでしょうか?
Uiが出なくて鬱になりそう わかる人教えてください public block[] blocks; public GameObject gameOverUI; public GameObject gameClearUI; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if(DestroyAllblocks()) { Debug.Log("kuria"); gameClearUI.SetActive(true); } } private bool DestroyAllblocks() { foreach (block b in blocks) { if (b != null) { return false; } } return true; } public void GameOver() { Debug.Log("負け犬"); gameOverUI.SetActive(true); } public void GameRetry() { SceneManager.LoadScene("game"); } }
@user-uq6pe9zd3w3 жыл бұрын
自分はpublic block[] blocks;とforeach (block b in blocks)の行の、 型指定しているところがエラー吐いてたので block[] をGameObject[]に、block b をGameObject bにしたらうまくいきましたね。解になってるかわかりませんが参考になれば