c# - Unity Shop系统如何解决AddListener脚本
问题描述
我正在尝试统一制作商店系统,但我对 AddListener 有疑问。我无法理解 addlistener 代码。这是我的代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class SkinChangeButton : MonoBehaviour{
private SkinSpawner skinSpawner;
[System.Obsolete]
void MarketiCagir()
{
for (int i = 0; i < skinSpawner.items.Count; i++)
{
GameObject cogalanslot = Instantiate(skinSpawner.Slot, transform);
cogalanslot.transform.FindChild("Character_Image").GetComponent<Image>().sprite = skinSpawner.items[i].Resim;
cogalanslot.transform.Find("Purchase_Button").transform.Find("Price_Text").GetComponent<TextMeshProUGUI>().text = skinSpawner.items[i].Fiyat.ToString();
cogalanslot.transform.Find("Character_FunInfo").GetComponent<TextMeshProUGUI>().text = skinSpawner.items[i].FunInfo.ToString();
bool gecicibool = skinSpawner.items[i].Alinmadurum;
int gecici = i;
cogalanslot.transform.Find("Purchase_Button").GetComponent<Button>().onClick.AddListener(() => Buy(gecici, cogalanslot, gecicibool));
cogalanslot.transform.Find("Purchase_Button").GetComponent<Button>().onClick.AddListener(() => SkinChangingReal(gecici, cogalanslot, gecicibool));
}
}
public void SkinChange()
{
for (int i = 0; i < skinSpawner.items.Count; i++)
{
GameObject cogalanslot = Instantiate(skinSpawner.Slot, transform);
bool gecicibool = skinSpawner.items[i].Alinmadurum;
int gecici = i;
SkinChangingReal(gecici);
}
}
public void Buy(int id, GameObject obje, bool AlinmaDurum)
{
skinSpawner.Para = PlayerPrefs.GetInt("StarCoin", 0);
if (skinSpawner.Para >= skinSpawner.items[id].Fiyat)
{
obje.transform.Find("Purchase_Button").gameObject.SetActive(false);
skinSpawner.Para -= skinSpawner.items[id].Fiyat;
skinSpawner.items[id].Alinmadurum = true;
}
}
public void SkinChangingReal(int id)
{
if (skinSpawner.items[id].Alinmadurum)
{
skinSpawner.Player.sprite = skinSpawner.items[id].Resim;
}
}
}
我正在尝试使用滚动矩形创建商店,我不应该使用 addlistener 脚本吗?还有其他方法可以解决这个问题吗?我怎么解决这个问题?谢谢 :)
解决方案
您的SkinChangingReal(int id)
方法接受一个参数,但您在这里使用 3 个参数调用它:
cogalanslot.transform.Find("Purchase_Button").GetComponent<Button>().onClick.AddListener(() => SkinChangingReal(gecici, cogalanslot, gecicibool));
推荐阅读
- amazon-web-services - 生成 lwa 刷新令牌在卖家中央仪表板中不起作用
- gradle - 在 gitlab 中使用 gradle 的 Spotbugs (findsecbug)
- python-3.x - 在 POST 函数中实现线程
- c# - 使用单个绑定文本框更改多个数据表条目
- sql - 从 CockroachDB 中删除交错表时有哪些潜在问题?
- python - 我希望它检测到我何时关闭另一个菜单并重新打开此 tkinter 菜单。(python)
- ansible - 从存储在 Ansible 寄存器中的 JSON 类内容中提取键值对
- reactjs - Typescript,Next js 的 getStaticProps 错误
- python-3.x - Guizero-当 GPIO 输入被读取为高/低时如何获取文本以更改颜色
- python - fastapi 上是否有任何查询约束异常?