この質問は1ヶ月前に既に投稿していましたが、あらかじめコードを投稿するのを忘れていたので、C#:他の3つのボタンでボタンを使用すると、ボタンを一度呼び出す方法
私は一時的なバフシステムをこのゲームで動かそうとしています。私はそれがこれでいいと思っています。ユーザーが最初のボタンをクリックすると、バフパネルが開き、バフがどれくらいあるかを選択できます。その後、ユーザーは必要とするバフをクリックすることができ、クリックしたバフに合わせて最初のボタンのイメージが変更されます。次に、2番目と3番目のボタンスロットについても同様の考えができます。
現在のところ、すべてのことを行っていますが、2番目のボタンをクリックすると、1番目と2番目のボタンの両方に画像がキャストされます。 3番目のボタンをクリックすると、3つのボタンすべてに画像が投写されます。下のコードからは、その理由は、buffがクリックされるたびにonClickがリスナーを追加しているため、その理由が複数回実行されているためです。しかし、私はそれを変更する方法がわからないので、一度しか起こらないでしょう。私が得ることができるすべての助けに感謝します!
コードを以下に示す:
void Start(){
buffSlot_1.GetComponent<Button>();
buffSlot_1.onClick.AddListener(() => addBuff(buffSlot_1));
buffSlot_2.GetComponent<Button>();
buffSlot_2.onClick.AddListener(() => addBuff(buffSlot_2));
buffSlot_3.GetComponent<Button>();
buffSlot_3.onClick.AddListener(() => addBuff(buffSlot_3));
}
void addBuff(Button purchaseButton) {
buffPanel.SetActive(true);
damageBoostButton.GetComponent<Button>();
damageBoostButton.onClick.AddListener(() => {
if (coinCount >= 0) {
Debug.Log("Gain a damage boost!");
dmgBool = true;
buffPanel.SetActive(false);
purchaseButton.interactable = false;
damageBoostButton.interactable = false;
purchaseButton.image.sprite = damageBoostButton.image.sprite;
coinCount -= 0;
}
});
defenseBoostButton.GetComponent<Button>();
defenseBoostButton.onClick.AddListener(() => {
if (coinCount >= 0) {
Debug.Log("Gain a defense boost!");
defBool = true;
buffPanel.SetActive(false);
purchaseButton.interactable = false;
defenseBoostButton.interactable = false;
purchaseButton.image.sprite = defenseBoostButton.image.sprite;
coinCount -= 0;
}
});
critBoostButton.GetComponent<Button>();
critBoostButton.onClick.AddListener(() => {
if (coinCount >= 0) {
Debug.Log("Crit Boost");
critBool = true;
buffPanel.SetActive(false);
purchaseButton.interactable = false;
critBoostButton.interactable = false;
purchaseButton.image.sprite = critBoostButton.image.sprite;
coinCount -= 0;
}
});
hasteBoostButton.GetComponent<Button>();
hasteBoostButton.onClick.AddListener(() => {
if (coinCount >= 0) {
Debug.Log("Haste Boost");
hasteBool = true;
buffPanel.SetActive(false);
purchaseButton.interactable = false;
hasteBoostButton.interactable = false;
purchaseButton.image.sprite = hasteBoostButton.image.sprite;
coinCount -= 0;
}
});
iceSpikeButton.GetComponent<Button>();
iceSpikeButton.onClick.AddListener(() => {
if (coinCount >= 0) {
Debug.Log("Increase Ice Spike");
iceSpikeBool = true;
buffPanel.SetActive(false);
purchaseButton.interactable = false;
iceSpikeButton.interactable = false;
purchaseButton.image.sprite = iceSpikeButton.image.sprite;
coinCount -= 0;
}
});
iceWallButton.GetComponent<Button>();
iceWallButton.onClick.AddListener(() => {
if (coinCount >= 0) {
Debug.Log("Increase Ice Wall");
iceWallBool = true;
buffPanel.SetActive(false);
purchaseButton.interactable = false;
iceWallButton.interactable = false;
purchaseButton.image.sprite = iceWallButton.image.sprite;
coinCount -= 0;
}
});
healthRegenButton.GetComponent<Button>();
healthRegenButton.onClick.AddListener(() => {
if (coinCount >= 0) {
Debug.Log("HPRegen Boost");
hpRegenBool = true;
buffPanel.SetActive(false);
purchaseButton.interactable = false;
healthRegenButton.interactable = false;
purchaseButton.image.sprite = healthRegenButton.image.sprite;
coinCount -= 0;
}
});
}
coinCountsは単にテストのために0に設定されています。
Unityを使用していますか?そのようにタグ付けしたいかもしれません。 –
ああああ!それは統一です、私に思い出させてくれてありがとう!私は今それをタグ付けします。 – mSavari
私はUnityに精通していませんが、複数のイベントハンドラをバフボックスにつけているようです。 'addBuff'を呼び出すたびに、別のイベントハンドラを各ボタンに追加します。以前のハンドラは、以前の購入ボタンへの参照を保持しています。 –