質問: Resources.Load("Image/" + item_name, typeof(Sprite)) as Sprite; break; } } } ``` ### 試したこと オブジェクトの名称と、Resources/Imageフォルダ内のSpriteの名称はしっかり一致させています。大文字と小文字なども確認しました。 参考元のサイトとはunityのバージョンが違うので、それが原因なのでしょうか(現在では使用できない記述がある、など) クラスをうまく機能させられていないか、あるいはResources/Imageフォルダをうまく参照できていないかと考え、該当ワードで検索を繰り返しましたが解決には至りませんでした。 もし解決方法もしくは代替案などご存知の方がいましたら、知恵を貸していただきたく思います。 よろしくお願いいたします。 ### 補足情報(FW/ツールのバージョンなど) Unity 2019.3.15f1
回答: 提示されている`add`の処理に問題があるようには見えないので、それより前のデザイナーでの作業に問題があるのではないでしょうか。以下、リンク先のページのコードも考慮に入れて対策を述べます。 (1) btnListに登録されている要素の数を確認する。 `add`の先頭(for文より前)に`Debug.Log`で`btnList.Count`を表示させ、Consoleに表示されるログを確認する。たとえば、 `Debug.Log($"Count -> {btnList.Count}";`とか。打つのが面倒なら`Debug.Log(btnList.Count);`でもいい。 もし、btnList.Countの値が0になっていれば、for文は一度も実行されないので画像が追加されないし、btnList.Countの値が0でなければ、原因はfor文の中の処理にあることがわかる。 (2) butList.Countの値しだいで変わる次の確認を行なう (a) btnList.Countの値が0の場合 bntListに要素を追加している処理を確認する。 シングルトンを生成する`ItemList()`の内容を見ると、`GameObject.Find`で見つけたオブジェクトを`btnList`に追加するwhile文がある。オブジェクト名を `"Button (0)", "Button (1)", ...` と順に探しているので、実際のボタンのオブジェクト名がこの形式になっているか確かめる。 リンク先のページには、 > > 今後のために、番号のついていないボタンButtonの名前をButton (0)に変えておく。 > > > と書いてある。`"Button (0)"`が存在しないと、`Find`が`null`を返すので、それ以降のボタンもすべて追加されない。コピーでボタンを作成した場合、最初のボタンの名前は`"Button (0)"`ではなく`"Button"`なので、手作業で修正する必要がある。 (b) btnList.Countの値が0以外の場合 ボタンに「割り当てなしの画像」を初期値として割り当てているか確認する。 `add`のfor文の中を見ると、`btnList[i].GetComponent().sprite.name`が、`"no_image"`と等しい場合、そのボタンの画像をアイテムのものに変更する処理を行なっている。 ということは、すべてのボタンの画像は、初期値として`"no_image"`(割り当てなしの画像)に設定しておかないといけない。 コードにはそれをしている部分が見あたらないので、リンク先の人はデザイナー画面でそれを行なっているはずで、よくよく読むと、 > > 全てのボタンのテキストを消し、画像を変更してそれっぽくした。 > > > と書いてある部分がそれに該当する。