UnityのGameObjectの取得方法もようやく概要がつかめてきた。
取得方法も大きく分けて、2通りあって、オブジェクトがアクティブでないと取得できない場合、非アクティブでも取得できる場合があることが最初わからなかった。
最初から、変数をPublicにして、IDEを通して、オブジェクトを指定もできるが、数が多い場合面倒な時もある、できればスクリプトで解決したい。そうなると、非アクティブのものがうまく取得できない(基準となるオブジェクトより下の階層しか取得できない制限などあるため)こともあり、意外とやっかいだ。
そこで、思いついた解決策が、とりあえず、なるべく上位階層のオブジェクトで、アクティブなオブジェクトをまず、取得して、それをもとに、非アクティブなオブジェクトを取得していく方法だ。
例として
Canvas
PanelMondai
Button1
Text1
Button2
Text2
PanelMondai
Button1
Text1
Button2
Text2
Button3
Text3
Mtext
Mtext
ならば
GameObject cv = GameObject.Find("Canvas");
Mpanel=cv.transform.Find("PanelMondai").gameObject;
mtext=Mpanel.transform.GetChild(3).GetComponent<Text>();
Button bt1= Mpanel.transform.GetChild(0).GetComponent<Button>();
atext1 = bt1.transform.GetChild(0).GetComponent<Text>();
Button bt2 = Mpanel.transform.GetChild(1).GetComponent<Button>();
atext2 = bt2.transform.GetChild(0).GetComponent<Text>();
Button bt3 = Mpanel.transform.GetChild(2).GetComponent<Button>();
atext3 = bt3.transform.GetChild(0).GetComponent<Text>();
Mpanel=cv.transform.Find("PanelMondai").gameObject;
mtext=Mpanel.transform.GetChild(3).GetComponent<Text>();
Button bt1= Mpanel.transform.GetChild(0).GetComponent<Button>();
atext1 = bt1.transform.GetChild(0).GetComponent<Text>();
Button bt2 = Mpanel.transform.GetChild(1).GetComponent<Button>();
atext2 = bt2.transform.GetChild(0).GetComponent<Text>();
Button bt3 = Mpanel.transform.GetChild(2).GetComponent<Button>();
atext3 = bt3.transform.GetChild(0).GetComponent<Text>();
0 件のコメント:
コメントを投稿