いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

Unityで非アクティブなUIオブジェクトを取得する

 すみません、タイトルは少し意味が取りづらいかも。ボタンをクリックするとUIのパネル(Panel)に作っておいたランキング表が表示されるようにしようと思いました。
 最初は非アクティブ状態にしておきます。↓ こういう風に。
f:id:Inuosann:20210429230231p:plain:w250
この状態からスクリプトでアクティブにすれば必要な表が現れます。しかし、

    GameObject goRanking = GameObject.Find("Ranking");
    goRanking.SetActive(true);

を実行するとエラーが出ます。アクティブでないオブジェクトは取得できないようです。仕方がないので、設計時にインスペクタでアクティブにしておきました。そうすればStart()で

    goRanking = GameObject.Find("Ranking");

を実行してゲームオブジェクトを取得でき、以降は

 goRanking.SetActive(true);

でも

 goRanking.SetActive(false);

でも、いつ実行してもOKです。でも何だかスマートでないような気がします。

 以下のようにすると設計時にアクティブにしていようがいまいが大丈夫です。

    GameObject goRanking = 
            GameObject.Find("Canvas").transform.Find("Ranking").gameObject;
    goRanking.SetActive(true);

でアクティブになりますし、「true」の部分を「false」にすれば非アクティブになります。

 しかし……よくもこう毎日毎日トラブルが起こるものです……。今回はトラブルってほどでもないけれど。サイトではやはり皆さん「どうしたらいいですか」みたいな質問をしています。まあこれでこの件は解決!!