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

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

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

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

Q&A

解決済

1回答

495閲覧

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

toa

総合スコア10

C#

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

0グッド

0クリップ

投稿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

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class SizeDropdown : MonoBehaviour 7{ 8 9 [SerializeField] 10 UniLightsMain main; 11 12 Dropdown dropDown; 13 14 void Start() 15 { 16 dropDown = GetComponent<Dropdown>(); 17 OnValueChanged(); 18 } 19 20 public void OnValueChanged() 21 { 22 Debug.Log("valuecahge"); 23 main.ClearLights(); 24 Debug.Log("valuecahge2"); 25 main.CreateLights(dropDown.value + 4); 26 } 27 28}

C# UniLightsMain.cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using TMPro; 6 7public class UniLightsMain : MonoBehaviour 8{ 9 10 [SerializeField] 11 int minSize = 3; 12 [SerializeField] 13 int maxSize = 9; 14 [SerializeField] 15 int randomCount = 5; 16 [SerializeField] 17 GameObject lightPrefab; 18 [SerializeField] 19 Transform lightParent; 20 [SerializeField] 21 GridLayoutGroup grid; 22 [SerializeField] 23 Color onButtonColor; 24 [SerializeField] 25 Color onButtonHighlightedColor; 26 [SerializeField] 27 Color offButtonColor; 28 [SerializeField] 29 Color offButtonHighlightedColor; 30 [SerializeField] 31 TextMeshProUGUI clearText; 32 33 bool[,] lightStatus; 34 GameObject[,] lightObjects; 35 36 //ランダムに問題を生成する処理 37 public void CreateProblem() 38 { 39 Debug.Log("create"); 40 clearText.enabled = false; 41 42 foreach (GameObject light in lightObjects) 43 { 44 Button button = light.GetComponent<Button>(); 45 button.interactable = true; 46 } 47 48 lightStatus = new bool[lightStatus.GetLength(0), lightStatus.GetLength(1)]; 49 50 int roopCount = Random.Range(2, lightStatus.Length); 51 52 randomCount = Mathf.Max(randomCount, 1); 53 54 for (int i = 0; i < roopCount; i++) 55 { 56 int choosedRow = 0; 57 int choosedCol = 0; 58 59 //乱数に「コク」を加える 60 for (int j = 0; j < randomCount; j++) 61 { 62 choosedRow += Random.Range(0, lightStatus.GetLength(0)); 63 choosedCol += Random.Range(0, lightStatus.GetLength(1)); 64 } 65 66 choosedRow /= randomCount; 67 choosedCol /= randomCount; 68 69 SwitchLights(choosedRow, choosedCol, true); 70 } 71 72 SetLightColor(); 73 } 74 75 //ライトを生成する処理 76 public void CreateLights(int size) 77 { 78 size = Mathf.Clamp(size, minSize, maxSize);//値を制限 79 80 81 clearText.enabled = false; 82 lightStatus = new bool[size, size]; 83 lightObjects = new GameObject[size, size]; 84 grid.constraintCount = size; 85 86 for (int i = 0; i < size; i++) 87 { 88 for (int j = 0; j < size; j++) 89 { 90 GameObject button = Instantiate(lightPrefab); 91 button.transform.SetParent(lightParent); 92 button.transform.localScale = transform.lossyScale; 93 94 LightButton light = button.GetComponent<LightButton>(); 95 light.row = i; 96 light.col = j; 97 98 lightObjects[i, j] = button; 99 } 100 } 101 102 CreateProblem(); 103 } 104 105 public void ClearLights() 106 { 107 if (lightObjects == null || lightObjects.Length <= 0) 108 { 109 Debug.Log("Clear1"); 110 return; 111 } 112 113 foreach (GameObject buttonObj in lightObjects) 114 { 115 Debug.Log("Clear2"); 116 Destroy(buttonObj); 117 } 118 } 119 120 121 122}

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

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

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

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

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

guest

回答1

0

自己解決

普通のdropdownではなくTextMeshProのdropdownでした。
Dropdown dropDown;

TMP_Dropdown dropDown;にしたら出来ました。

投稿2022/06/13 10:37

toa

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問