【Unity】Buttonの挙動がおかしい・反応しない時
Case 1
プレゼントボックスなどでページ内に10個アイテムリストを作り、ScrollViewで表示するとき。
リストアイテム10個を生成し、その中にあるスクリプトの初期化を読んだ時にボタンにつけるイベント設定も付け加えていた。
リストを作るスクリプト
for(int i = 0; i < 10; ++i)
{
GameObject obj = Instantiate(リストに表示するPrefab) as GameObject;
obj.GetComponent<PrefabにアタッチしているScript>().Init(data)
}
PrefabにアタッチしているScript.cs
public void Init(ItemData data)
{
GetComponent<Button>().onClick.AddListener(() =>
{
// 受け取る処理
});
}
このとき、アイテムリストのページを切り替えても作ったオブジェクトは消さず、
異なるdataを引数に渡して初期化を改めて行ったけどボタンが反応しない....。
原因はAddListener()が初期化されていなかっただけでした!
なので、正しく書くと
public void Init(ItemData data)
{
// Listenerも初期化
GetComponent<Button>().onClick.RemoveAllListeners();
GetComponent<Button>().onClick.AddListener(() =>
{
// 処理は割愛
});
}
ですね!
AddListener()って上書きじゃないんですね。Addって付くものには少し気を付けよう()
Case 2
次はカードっぽいオブジェクトにめくる時のアニメーションを与え、
タップでめくれるようにしたかったときに起こりました。
めくる動作を表現するためにオブジェクトの Rotate.y をあらかじめ-180しておき、アニメーションで0まで戻したい。
でもなぜかボタンが反応しない!なんでや!!
上に透明のオブジェクトがないか、Raycastがチェック外れていないか、EventSystemがちゃんとあるか、なども全部確認して途方に暮れたのでアニメーションを外してみました。でも反応しない....そしてRotateも戻しても反応しな・・・した!w
どうやらボタンのOnClick判定にも裏表があったみたいで、いや普通は常識なのかな?
また一つ知識が増えたので良しとします!前向きに。
( ..)φ...以上経験談でした!