c# - 复制函数
问题描述
每当我调用 Instantiate 函数时,它都会用它复制每个函数并将每个数字加倍
private Button[] Checks;
public GameObject tni;//TextAndInput
public int Coins;
public TMPro.TextMeshProUGUI Score;
private void Start()
{
Checks = GetComponentsInChildren<Button>();
foreach(Button button in Checks)
{
button.onClick.AddListener(Add);
}
}
private void Update()
{
Score.SetText(Coins.ToString());
if (Input.GetKeyDown(KeyCode.Space))
{
Duplicate();
}
}
public void Add()
{
Coins++;
}
public void Duplicate()
{
GameObject duplicate = GameObject.Instantiate(tni);
duplicate.transform.position=new Vector3(tni.transform.position.x, tni.transform.position.y-100, tni.transform.position.z);
duplicate.transform.SetParent(GameObject.FindGameObjectWithTag("Canvas").transform, false);
Button ButtonDuplicate = GetComponentInChildren<Button>();
ButtonDuplicate.onClick.AddListener( () => Add() );
}
** 例如,add 函数在第一个按钮上添加 2,在复制按钮上添加 1。当我复制按钮时,它将首先复制 1 个按钮,然后当我再次复制时,它将复制另一个 2,所以现在它们是 4 个按钮,如果我再次复制它们,它们将是 8 个,依此类推如果你知道如何修复它请告诉我 **
解决方案
问题线似乎是
Button ButtonDuplicate = GetComponentInChildren<Button>();
你总是在同一个对象(这个脚本所附的那个)上这样做,所以
ButtonDuplicate.onClick.AddListener( () => Add() );
Add
总是为在该对象的子项中找到的第一个按钮添加一个额外的回调。
在我看来你宁愿做
Button ButtonDuplicate = duplicate.GetComponentInChildren<Button>();
为了获取您刚刚生成的按钮的组件。
更新
对您对该职位的评论
在
duplicate.transform.position=new Vector3(tni.transform.position.x, tni.transform.position.y-100, tni.transform.position.z);
你总是采取不变的tni
立场,然后从那里-100
进入Y
。
而是存储最后生成的位置,例如
private Vector3 currentSpawnPos;
private void Start ()
{
...
currentSpawnPos = tni.transform.position - Vector3.up * 100;
}
public void Duplicate()
{
...
duplicate.transform.position=new Vector3(currentSpawnPos);
currentSpawnPos -= Vector3.up * 100;
...
}
或者实际上,您可以使用 aVerticalLayoutGroup
并添加您的按钮,而不是自己计算,它们将自动放置在彼此下方
推荐阅读
- reactjs - 重新渲染子组件并在父状态更改时更改子状态状态
- python - 数量增加百分比第 2 部分
- reactjs - 在同一端口 80 上运行用于后端服务器代码的 Docker 容器和用于 React 前端代码的 Nginx
- powershell - 我需要在 Powershell 中获取我的 smb 共享的网络路径并将其输出到文本文档
- c# - 打开的 Oracle 连接过多
- python - Python 脚本使用的内存超出了应有的范围
- javascript - 在 javascript 中更改 Textarea 的值
- python - XlsxWriter 未向空单元格添加底部边框
- python-3.x - 如何抓取伪装成 unicode 的 href(例如 \u003ca href=\)
- sql - 这个 SQL 查询和连接是如何在 dplyr 中完成的?