質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3552閲覧

Unity C# 動的に生成したボタンの画像を変更したい

sushiyaro

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/06/06 09:21

タイトル通りなのですが、forでボタンを複数回生成していて、それぞれに画像を貼り付けたいと思っています。
静的に追加されたボタンの画像を変更することはできたのですが、動的に追加したボタンだと”NullReferenceException: Object reference not set to an instance of an object”などとエラーが出てしまい、行き詰まっている状態です。

以下コードです。

C#

1 2using UnityEngine; 3using UnityEngine.UI; 4~~~~~~~ 5 public GameObject Monster; //モンスターのPrefabを読み込み 6 public Transform pos; 7 public Sprite Monsterspr; //モンスターの画像を読み込み 8~~~~~~~ 9 private void test() { 10 for (int i = 0; i <= 8; i++) 11 { 12 GameObject NewMonster = 13 Instantiate(Monster, new Vector3(offsetx, offsety, 0.0f), Quaternion.identity) as GameObject; //モンスターを生成(button) 14 NewMonster.transform.SetParent(this.transform, false); //親子関係を設定 15 NewMonster.GetComponent<Image>().sprite = Monsterspr; //画像を変更したい 16 } 17 }

いろいろなサイトを駆け巡り試行錯誤したのですができなかったので力を貸してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーメッセージはどの行を指していますか?(コンソールでエラーメッセージをダブルクリックすると該当コードを開いて行を示してくれます)

offsetx, offsetyの値はどこかでセットされていますか?

こちらで同じようなコード(下記)で試してみたところ、特に問題なく画像(Sprite)をセットできました。

C#

1using UnityEngine; 2using UnityEngine.UI; 3 4public class ButtonGenerator : MonoBehaviour 5{ 6 [SerializeField] GameObject buttonPrefab; // ボタンのプレハブ 7 [SerializeField] Transform buttonPanel; // ボタンの親となるオブジェクトのTransform 8 [SerializeField] Sprite buttonSprite; // ボタンの画像(Sprite) 9 10 private void Update () 11 { 12 // 何かキーを押す 13 if ( Input.anyKeyDown ) 14 { 15 var length = 8; 16 for ( int i = 0 ; i < length ; i++ ) 17 { 18 GameObject button = Instantiate(buttonPrefab, Vector3.zero, Quaternion.identity); 19 button.transform.SetParent ( buttonPanel ); 20 button.GetComponent<Image> ().sprite = buttonSprite; 21 } 22 } 23 } 24}

参考動画
イメージ説明

投稿2018/06/06 13:44

編集2018/06/06 13:49
negitama

総合スコア943

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sushiyaro

2018/06/07 09:26

ご回答有り難うございます。 教えてくださったコードで実現することができました。 ただオリジナルのコードとあまり相違点がなく、原因は不明ですが、新規プロジェクトで実行すると正常に動作しました。 問題は解決しましたのでベストアンサーに選ばさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問