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

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

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

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

Unity

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

Q&A

解決済

1回答

980閲覧

Instantiateで生成したButton自身を引数にする方法について

kurotora

総合スコア1

C#

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

Unity

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

0グッド

0クリップ

投稿2020/11/24 07:31

実現したいこと

Instantiateで生成したButtonオブジェクトに、Button自身を引数にしたイベントを付けたい。

作りたい動作としては、KBAddButton()をアタッチした「追加ボタン」をクリックすると新しくボタンが生成され、その生成されたボタンをクリックするとボタン自身の画像が切り替わる、という動きを実装したいです。

該当のソースコード

C#

1public RectTransform kbPrefab; 2public Sprite Asprite; 3public Sprite Bsprite; 4 5public void KBAddButton() 6 { 7     var item = Instantiate(kbPrefab); 8      9     Button button1 = item.GetComponent<Button>(); 10 Button button = button1; 11 button.onClick.AddListener(() => 12 { 13 SelectOnKB(button); 14 }); 15 16 } 17 18 19public void SelectOnKB(Button button) 20 { 21 btnImage = button.GetComponent<Image>(); 22 23     //AspriteだったらBspriteに切り替える 24 if (btnImage.sprite == Asprite) 25 { 26 btnImage.sprite = Bsprite; 27 } 28 29 else //BspriteだったらAspriteに切り替える 30 { 31 btnImage.sprite = Asprite; 32 } 33 }

###エラー

ArgumentException: method arguments are incompatible
System.Delegate.CreateDelegate

ArgumentException:メソッド引数に互換性がありません

試したこと

シーン上に元々配置していたButtonではSelectOnKB(Button button)が動くことを確認しました。
インスタンス生成したButtonの方は、引数を変数に一時保存すると個別に引数が付けられるという情報を見て、Button button = button1;を追加してみましたが変わりませんでした。

「メソッド引数に互換性がない」というエラーの意味が分からず、ここでずっと詰まっています。
どなたかご教授いただけないでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

引数を指定しない方法で期待の動作になりました。
参考までにコードを載せておきます。

C#

1//追加ボタンクリックで新規ボタン生成 2 public void ButtonAdd() 3 { 4 var item = Instantiate(buttonPrefab); 5 6 var btn = item.GetComponent<Button>(); 7 var itemi = item.GetComponent<Image>(); 8 9 10 btn.onClick.AddListener(() => 11 { 12 if (itemi.sprite == Asprite) 13 { 14 itemi.sprite = Bsprite; 15 16 } 17 else 18 { 19 itemi.sprite = Asprite; 20 } 21 22 23 }); 24 25 26 }

投稿2020/12/26 14:06

kurotora

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問