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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

3181閲覧

UnityのC#スクリプトで、多次元配列に格納時にエラー

valval

総合スコア43

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2018/01/03 12:08

編集2018/01/03 12:10

お世話になります

C#

1public class Hit: MonoBehaviour 2{ 3 private bool[][][] hit = new bool[8][][]; 4 5 // Use this for initialization 6 void Start() 7 { 8 int num2,num3; 9 10 11 for (int num = 0; num < 8; num++) 12 { hit[num] = new bool[8][]; 13 for (num2 = 0; num2 < 8; num2++) 14 { hit[num][num2] = new bool[8]; 15 for (num3 = 0; num3 < 8; num3++) 16 hit[num][num2][num3] = false; 17 } 18 19 } 20 21 22 23 } 24 public void setHit(bool val,int num1,int num2,int num3) { 25 26 print("setHit x=" + num1 + " y=" + num2 + " z=" + num3); 27 28 hit[num1][num2][num3] = val; 29 30 31 } 32 public bool getHit( int num1, int num2, int num3) {return hit[num1][num2][num3]; } 33}

上記クラスにおいて、setHit関数を走らせたところ、
hit[num1][num2][num3] = val;
にて
NullReferenceException: Object reference not set to an instance of an object
というエラーが出ました。
この関数の戻り値であり、かつ寸前のprintの表示は、
setHit x=2 y=4 z=2
なので、配列の範囲外を指定して格納しておらず、エラーになる理由が分かりません。

なお、このときのvalはtrueですが、なぜエラーになるのですか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

多次元配列とジャグ配列がごっちゃになっています。
多次元配列の方は初期化されていません。
次のようにしてください。

C#

1private bool[][][] hit = new bool[8][8][8];

失礼。
上記は間違いです。
ジャグ配列として Start で初期化されています。

逆に言えば Start を通らない場合は初期化されないことになります。
hit.Length を表示させてみてください。

投稿2018/01/03 12:11

編集2018/01/03 12:18
Zuishin

総合スコア28660

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

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

valval

2018/01/03 13:18

ありがとうございます。 このクラスを張り付けたオブジェクトをInstantiateした直後に、これでできたコピーに対しsetHit関数を走らせたため、Startが通らなかったのが真実でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問