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

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

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

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

Q&A

0回答

281閲覧

配列から出したオブジェクトのスクリプト取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2020/01/12 14:04

現状

プレイヤージェネレーターを作ってその配列からキャラを開始時に出している
最初から配置されている時はpublicに入れることでゲームオーバーやスコア上がっていたのですが配列から出したらできなくなった
エラーコード
NullReferenceException: Object reference not set to an instance of an object
GameManager.LateUpdate () (at Assets/Scripts/GameManager.cs:42)

実現したいこと

キャラの数を増やしたいのでゲーム開始時に配列からだしてちゃんとゲームオーバーになったりスコア上げたい

該当コード

unity

1配列作った後のコード 2public class GameManager : MonoBehaviour 3{ 4 //ゲームステート 5 enum State 6 { 7 Ready, Play, GameOver 8 } 9 State state; 10 int score;//スコア 11 int coin;//コイン 12 public Text StateLabel; 13 public Text scoreLabel; 14 public Text coinLabel; 15 public GameObject EnemyGenerator;//敵生成オブジェ 16 GameObject Player; 17 PlayerCotroller playcon; 18 19 // Start is called before the first frame update 20 void Start() 21 { 22 //開始時にRedayステート開始 23 Ready(); 24 Player = GameObject.Find("Player"); 25 playcon = Player.GetComponent<PlayerCotroller>(); 26 } 27 28 void LateUpdate() 29 { 30 //ステートごとにイベント監視 31 switch (state) 32 { 33 case State.Ready://タッチしたらゲームスタート 34 if (Input.GetButtonDown("Fire1")||Input.GetKeyDown("space")) GameStart(); 35 break; 36 case State.Play://車が破壊されたらゲームオーバー 37 if (playcon.IsDead()) GameOver(); 38 39 break; 40 case State.GameOver:// 41 break; 42 } 43 } 44 45 // Update is called once per frame 46 void Update() 47 { 48 49 } 50 51 void Ready() 52 { 53 state = State.Ready; 54 //オブジェクトを無効にする 55 EnemyGenerator.SetActive(false); 56 //ラベル更新 57 scoreLabel.text = "Score : " + 0; 58 StateLabel.gameObject.SetActive(true); 59 StateLabel.text = "READY"; 60 coinLabel.text = "Coin : " + 0; 61 } 62 void GameStart() 63 { 64 state = State.Play; 65 //オブジェクトを有効にする 66 EnemyGenerator.SetActive(true); 67 //ラベル更新 68 StateLabel.gameObject.SetActive(false); 69 StateLabel.text = ""; 70 } 71 void GameOver() 72 { 73 state = State.GameOver; 74 //ラベル更新 75 StateLabel.gameObject.SetActive(true); 76 //オブジェクトを無効にする 77 EnemyGenerator.SetActive(false); 78 StateLabel.text = "GAMEOVER"; 79 //ハイスコアを更新 80 if (PlayerPrefs.GetInt("HighScore") < score) 81 { 82 PlayerPrefs.SetInt("HighScore", score); 83 } 84 PlayerPrefs.SetInt("Totalcoin", coin + PlayerPrefs.GetInt("Totalcoin")); 85 if (Input.GetButtonDown("Fire1") || Input.GetKeyDown("space")) 86 { 87 //タイトルシーンを読み込み 88 SceneManager.LoadScene("Title"); 89 } 90 } 91 92 public void IncreaseScore() 93 { 94 if (playcon.IsDead()) return; 95 score += 50; 96 //スコア更新 97 scoreLabel.text = "Score : " + score; 98 } 99 public void IncreasCoin() 100 { 101 if (playcon.IsDead()) return; 102 coin++; 103 coinLabel.text = "Coin : " + coin; 104 } 105}

unity

1配列作る前のコード 2public class GameManager : MonoBehaviour 3{ 4 //ゲームステート 5 enum State 6 { 7 Ready, Play, GameOver 8 } 9 State state; 10 int score;//スコア 11 int coin;//コイン 12 public Text StateLabel; 13 public Text scoreLabel; 14 public Text coinLabel; 15 public GameObject EnemyGenerator;//敵生成オブジェ 16 public PlayerCotroller playcon;//プレイヤースクリプト取得 17 18 // Start is called before the first frame update 19 void Start() 20 { 21 //開始時にRedayステート開始 22 Ready(); 23 24 } 25 26 void LateUpdate() 27 { 28 //ステートごとにイベント監視 29 switch (state) 30 { 31 case State.Ready://タッチしたらゲームスタート 32 if (Input.GetButtonDown("Fire1")||Input.GetKeyDown("space")) GameStart(); 33 break; 34 case State.Play://車が破壊されたらゲームオーバー 35 if (playcon.IsDead()) GameOver(); 36 37 break; 38 case State.GameOver:// 39 break; 40 } 41 } 42 43 // Update is called once per frame 44 void Update() 45 { 46 47 } 48 49 void Ready() 50 { 51 state = State.Ready; 52 //オブジェクトを無効にする 53 EnemyGenerator.SetActive(false); 54 //ラベル更新 55 scoreLabel.text = "Score : " + 0; 56 StateLabel.gameObject.SetActive(true); 57 StateLabel.text = "READY"; 58 coinLabel.text = "Coin : " + 0; 59 } 60 void GameStart() 61 { 62 state = State.Play; 63 //オブジェクトを有効にする 64 EnemyGenerator.SetActive(true); 65 //ラベル更新 66 StateLabel.gameObject.SetActive(false); 67 StateLabel.text = ""; 68 } 69 void GameOver() 70 { 71 state = State.GameOver; 72 //ラベル更新 73 StateLabel.gameObject.SetActive(true); 74 //オブジェクトを無効にする 75 EnemyGenerator.SetActive(false); 76 StateLabel.text = "GAMEOVER"; 77 //ハイスコアを更新 78 if (PlayerPrefs.GetInt("HighScore") < score) 79 { 80 PlayerPrefs.SetInt("HighScore", score); 81 } 82 PlayerPrefs.SetInt("Totalcoin", coin + PlayerPrefs.GetInt("Totalcoin")); 83 if (Input.GetButtonDown("Fire1") || Input.GetKeyDown("space")) 84 { 85 //タイトルシーンを読み込み 86 SceneManager.LoadScene("Title"); 87 } 88 } 89 90 public void IncreaseScore() 91 { 92 if (playcon.IsDead()) return; 93 score += 50; 94 //スコア更新 95 scoreLabel.text = "Score : " + score; 96 } 97 public void IncreasCoin() 98 { 99 if (playcon.IsDead()) return; 100 coin++; 101 coinLabel.text = "Coin : " + coin; 102 } 103}

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

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

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

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

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

sakura_hana

2020/01/14 01:49

「GameManagerの42行目」がどこか提示してください。 また、PlayerオブジェクトにPlayerCotrollerコンポーネントが付与されているか確認してください。(playconがnullな気がします)
退会済みユーザー

退会済みユーザー

2020/01/14 01:52

付与はしていました タグを作って敵側から送ることにしました
sakura_hana

2020/01/14 02:15

現状どこがエラーになっているか分からない(このコードだと42行目は「}」なのでエラーコードと内容が合わない)ので提示をお願いしたのですが…… とりあえず解決出来たなら自己回答付けて質問クローズをお願いします。(「タグを作って敵側から送る」という意味がよく分からないので、後から似たような疑問を持ってこの質問を見た人の為に分かりやすい回答をお願いします)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問