[過去ログ] 【3Dゲームエンジン】Unity質問スレッド30 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
758(2): 2017/08/22(火)23:41 ID:ZYqSKZvD(1) AAS
質問です。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
GameObject[] button;
public int numButtons;
// Use this for initialization
void Start () {
button = GameObject.FindGameObjectsWithTag ("button");
for (int i = 0; i < numButtons; i++) {
Debug.Log (button [i]);
}
}
}
これでindexoutofrangeexceptionが出るのですが、配列で宣言してるので理解できません。
ほかのシーンではこれとほとんど同じスクリプトが動いてます。
760: 2017/08/23(水)00:20 ID:0fyfcMVA(1/4) AAS
>>758
実際に取得できたbuttonの配列数とnumButtonsの値が不一致なんだと思います。
例えばbuttonが2個しかないのに
numButtons = 4
のように設定しているとforループで
button[0] //大丈夫
button[1] //大丈夫
button[2] //indexoutofrangeexception
button[3] //indexoutofrangeexception
と用意されていない配列まで呼び出そうとし
「indexoutofrangeexception(存在しない配列番号を指定しています)エラーなりますよ。
for (int i = 0; i < numButtons; i++)
ではなく
for (int i = 0; i < button.Length; i++)
の方が確実です
767(4): 2017/08/23(水)06:33 ID:9IfN6Xrm(1) AAS
>>758だけど、みんなありがとう。おかげで多少進展しました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
public int numButtons;
private GameObject[] buttons = new GameObject[25];
// Use this for initialization
void Start () {
this.buttons = GameObject.FindGameObjectsWithTag ("button");
Debug.Log (buttons.Length);
}
}
これをあるシーンに使ったら 一見何も関係なさそうなpublic int numButtons;を入れるとログは27、入れないと0が出ました。
別のシーンで使ったら合ってもなくても0でした。
numbuttonsはスクロールパネル上にボタンのプレハブを大量に並べるときにつくった変数で、インスペクタ上で27で上のどちらのシーン上にも存在しています。
試しに前者のシーンでnumbuttonsに26を設定したらログの27が26になりました。
配列の大きさを決める表現が間違っていたら元も子もないですが、
それにしてもなぜ関係ない変数が干渉してくるのか理解できません。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.031s