c# - 创建 2 个对象而不是 1 个
问题描述
游戏中有一个按钮,如果你点击他,这个按钮需要创建一个对象,但是当你第一次点击它时,它正在创建一个克隆,但是当你第二次点击它之后它正在创建一个更多的克隆到另一个而不是一个克隆。
public float positionX;
public float positionY;
public Button buttonUp;
Button btn1;
首先,我创建了变量。
void Start ()
{
positionX = transform.position.x;
positionY = transform.position.y;
btn1 = buttonUp.GetComponent<Button>();
}
然后在 Start Method 和 Button 组件上分配位置的值
void Update()
{
if (Input.GetMouseButtonDown(0))
{
btn1.onClick.AddListener(UpClicked);
}
}
并控制用户是否单击按钮集 addListener
float[] CreatePlayerPartsUp(float pX, float pY)
{
float positionXFun = pX;
float positionYFun = pY;
GameObject part = Instantiate(playerParts, new Vector2(positionXFun, positionYFun + 16), Quaternion.identity);
float[] turnPosition = new float[2]{part.transform.position.x, part.transform.position.y};
return turnPosition;
}
之后,我创建了一个方法来保持对象的位置并使用数组返回它们。
void UpClicked()
{
float[] createdPosition= CreatePlayerPartsUp(positionX, positionY);
positionX = createdPosition[0];
positionY = createdPosition[1];
}
最后,我调用了该方法并分配了新位置。
但是问题已经发生了,我不知道为什么会这样。(首先,创建 1,但其他时候它开始创建向另一个添加一个克隆而不是 1)
解决方案
我相信问题正在发生,因为您每次单击鼠标时都会添加一个按钮单击侦听器(在您的Update
函数中)。第一次单击鼠标时,它会在 期间添加第一个侦听Update
器,第二次单击鼠标时,它会在 期间添加另一个侦听器Update
。所以现在当点击鼠标时,这两个监听器都会被触发,添加 2 个对象而不是 1 个。这种模式会重复,即第三次点击会导致它现在添加 3 个对象。
将AddListener
函数调用移动到您的Start
函数中,以便只添加一个侦听器,如下所示:
void Start ()
{
positionX = transform.position.x;
positionY = transform.position.y;
btn1 = buttonUp.GetComponent<Button>();
btn1.onClick.AddListener(UpClicked);
}
void Update()
{
}
推荐阅读
- gradle - Gradle 多模块项目容易出错
- python - 后台进程挂起(tty 输出)
- python - ValueError:randrange() 的空范围 (0, 0, 0)
- php - 如何使用 $wpdb->get_results() 在 WordPress 中按 menu_order 获取帖子顺序?
- c# - 实现盒子模糊 - c# 中的高斯模糊
- html - Tailwind:无法设置页面底部粘底的宽度
- spring-boot - 使用 Spring 实现异步 API 的线程模型
- vb.net - 讨论为我的应用程序创建“后端”的最佳方式
- css - 不散列 SCSS (SASS) 的某些选择器
- javascript - 如果使用 useState,如何将 es-lint 配置为警告/错误