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

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

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

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

Unity

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

Q&A

解決済

1回答

2010閲覧

配列を使ったTransformの代入について

4423

総合スコア16

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2018/08/31 15:43

Unity、C#初心者です。
現在、アイテムのランダムは位置を使用したく、
「Vectorの配列にランダムな座標を格納して、
それをゲームオブジェクト配列のtransform.positionに代入する。」
ということを試みておりましたが、参照が得られないというエラーばかり出てしまいました。

座標の代入の方法として、

Vevtor3 myPos; myPos.x=3.0f; transform.position=myPos;

上記の方法を配列でも同じことができるのではないかと考え

C#ここに言語を入力C#

1void Start () { 2 3 chest =new GameObject[dropMax]; 4 dropPos = new Vector3[dropMax] ;//配置座標 5 dropRotate = new Quaternion[dropMax];// 配置方向 6 7 int i = 0; 8 while (i < dropMax) 9 { 10 dropPos[i].x = Random.Range(-4.0f, 4.0f); 11 dropPos[i].z = Random.Range(-0.5f, 0.5f); 12 dropRotate[i].y = Random.Range(-50.0f, 50.0f); 13 chest[i].transform.position = dropPos[i]; 14       chest[i].transform.rotation= dropRotate[i]; 15 ++i; 16 } 17} 18

としてみたのですが、
chest[i].transform.position = dropPos[i];
chest[i].transform.rotation= dropRotate[i];
の箇所で、「NullReferenceException」のエラーが出てしまいました。

原因について、ご教授いただければと考えております。
また、今回のアイテムについては同種のアイテムなので、
位置だけをランダムに配置したいと考えています。

どうぞ、よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

chest[i] 変数に入っている内容が null だからです。
null の transform を取得しようとすると、NullReferenceExceptionが発生します。

なぜ chest[i] が null なのかというと、

C#

1chest =new GameObject[dropMax];

で「配列を作成」はしていますが、「配列の中身の初期化」をしていないからです。
初期化していないので配列の各内容には、GameObjectの既定値であるnullが入った状態になっています。

対策として

C#

1chest[i] = new GameObject(); // chest[i]の初期化 2chest[i].transform.position = dropPos[i]; 3chest[i].transform.rotation= dropRotate[i];

……のように chest[i] の初期化のコードを入れる必要があります。

投稿2018/08/31 17:21

編集2018/08/31 17:28
ku__ra__ge

総合スコア4524

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

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

4423

2018/08/31 17:52

ご回答頂きありがとうございます。 なるほど、作成を初期化と勘違いしていましたことがわかりました。 サンプルまで添えていただき、ありがとうございます。 もう一度作り直してみます。 ありがとうございまいた。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問