2022年2月9日水曜日

UnityのGameObject取得

 UnityのGameObjectの取得方法もようやく概要がつかめてきた。

取得方法も大きく分けて、2通りあって、オブジェクトがアクティブでないと取得できない場合、非アクティブでも取得できる場合があることが最初わからなかった。

最初から、変数をPublicにして、IDEを通して、オブジェクトを指定もできるが、数が多い場合面倒な時もある、できればスクリプトで解決したい。そうなると、非アクティブのものがうまく取得できない(基準となるオブジェクトより下の階層しか取得できない制限などあるため)こともあり、意外とやっかいだ。

 そこで、思いついた解決策が、とりあえず、なるべく上位階層のオブジェクトで、アクティブなオブジェクトをまず、取得して、それをもとに、非アクティブなオブジェクトを取得していく方法だ。

例として

 Canvas
   PanelMondai
    Button1
               Text1
             Button2
               Text2
             Button3
               Text3
             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>();


0 件のコメント:

コメントを投稿