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

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

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

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

解決済

途中でObject reference not set to an instance of an objectが出る

toa
toa

総合スコア10

C#

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

1回答

0評価

0クリップ

186閲覧

投稿2022/06/13 10:15

Unityでゲーム制作を勉強しています。
ライツアウト風パズルゲーム「UniLightsOut」を試しに動かしてみたのですが、エラーが出て動きません。どうすればよいでしょうか。

エラー内容

SizeDropdown.csで、main.ClearLights();はちゃんと呼び出されてreturnから出てくるのに、main.CreateLights(dropDown.value + 4);は
NullReferenceException: Object reference not set to an instance of an object
のエラーが出てしまいます。
別のプロジェクトで、配布されているunitypackageを入れたものを起動してみるとちゃんと動きます。コードも見本をコピペしたので打ち間違いなどはないと思います。

コード抜粋

C# SizeDropdown.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class SizeDropdown : MonoBehaviour { [SerializeField] UniLightsMain main; Dropdown dropDown; void Start() { dropDown = GetComponent<Dropdown>(); OnValueChanged(); } public void OnValueChanged() { Debug.Log("valuecahge"); main.ClearLights(); Debug.Log("valuecahge2"); main.CreateLights(dropDown.value + 4); } }

C# UniLightsMain.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class UniLightsMain : MonoBehaviour { [SerializeField] int minSize = 3; [SerializeField] int maxSize = 9; [SerializeField] int randomCount = 5; [SerializeField] GameObject lightPrefab; [SerializeField] Transform lightParent; [SerializeField] GridLayoutGroup grid; [SerializeField] Color onButtonColor; [SerializeField] Color onButtonHighlightedColor; [SerializeField] Color offButtonColor; [SerializeField] Color offButtonHighlightedColor; [SerializeField] TextMeshProUGUI clearText; bool[,] lightStatus; GameObject[,] lightObjects; //ランダムに問題を生成する処理 public void CreateProblem() { Debug.Log("create"); clearText.enabled = false; foreach (GameObject light in lightObjects) { Button button = light.GetComponent<Button>(); button.interactable = true; } lightStatus = new bool[lightStatus.GetLength(0), lightStatus.GetLength(1)]; int roopCount = Random.Range(2, lightStatus.Length); randomCount = Mathf.Max(randomCount, 1); for (int i = 0; i < roopCount; i++) { int choosedRow = 0; int choosedCol = 0; //乱数に「コク」を加える for (int j = 0; j < randomCount; j++) { choosedRow += Random.Range(0, lightStatus.GetLength(0)); choosedCol += Random.Range(0, lightStatus.GetLength(1)); } choosedRow /= randomCount; choosedCol /= randomCount; SwitchLights(choosedRow, choosedCol, true); } SetLightColor(); } //ライトを生成する処理 public void CreateLights(int size) { size = Mathf.Clamp(size, minSize, maxSize);//値を制限 clearText.enabled = false; lightStatus = new bool[size, size]; lightObjects = new GameObject[size, size]; grid.constraintCount = size; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { GameObject button = Instantiate(lightPrefab); button.transform.SetParent(lightParent); button.transform.localScale = transform.lossyScale; LightButton light = button.GetComponent<LightButton>(); light.row = i; light.col = j; lightObjects[i, j] = button; } } CreateProblem(); } public void ClearLights() { if (lightObjects == null || lightObjects.Length <= 0) { Debug.Log("Clear1"); return; } foreach (GameObject buttonObj in lightObjects) { Debug.Log("Clear2"); Destroy(buttonObj); } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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