C# 创建2个对象而不是1个对象
游戏中有一个按钮,如果你点击他,这个按钮需要创建一个对象,但是当你第一次点击它时,它会创建一个克隆,但是在你第二次点击后,它会创建一个克隆,而不是一个克隆C# 创建2个对象而不是1个对象,c#,unity3d,C#,Unity3d,游戏中有一个按钮,如果你点击他,这个按钮需要创建一个对象,但是当你第一次点击它时,它会创建一个克隆,但是在你第二次点击后,它会创建一个克隆,而不是一个克隆 public float positionX; public float positionY; public Button buttonUp; Button btn1; 首先,我创建了变量 void Start () { positionX = transform.position.x; positionY = trans
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>();
}
并在用户单击按钮set 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)我认为问题发生了,因为每次单击鼠标时(在
更新
函数中)都会添加一个按钮单击侦听器。第一次单击鼠标时,它会在更新期间添加第一个侦听器,第二次单击鼠标时,它会在更新期间添加另一个侦听器。因此,现在单击鼠标时,会触发这两个侦听器,添加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()
{
}
void Start()
{
位置x=变换位置x;
位置y=变换位置y;
btn1=buttonUp.GetComponent();
btn1.onClick.AddListener(向上单击);
}
无效更新()
{
}
我相信问题发生了,因为每次单击鼠标时(在您的更新
功能中)都会添加一个按钮单击侦听器。第一次单击鼠标时,它会在更新期间添加第一个侦听器,第二次单击鼠标时,它会在更新期间添加另一个侦听器。因此,现在单击鼠标时,会触发这两个侦听器,添加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()
{
}
void Start()
{
位置x=变换位置x;
位置y=变换位置y;
btn1=buttonUp.GetComponent();
btn1.onClick.AddListener(向上单击);
}
无效更新()
{
}
罪魁祸首在你的Update()方法中:
这会在每次单击鼠标时向onClick
事件添加另一个对UpClickd()
的调用,这可能不是您想要的
将AddListener
移动到Start()函数,这样在事件发生时只有一个函数调用。罪魁祸首在于Update()方法:
这会在每次单击鼠标时向onClick
事件添加另一个对UpClickd()
的调用,这可能不是您想要的
将AddListener
移动到Start()函数,这样事件发生时只有一个函数调用。我不太清楚“但是在您第二次单击后,它正在创建一个克隆,而不是一个克隆”,这是什么意思。你能把范围扩大一点吗?另外,如果您第三次单击,是否会得到三个克隆?它会继续为已创建的克隆再创建一个克隆。e、 g如果你点击3次,它会创建3个对象而不是一个对象。我有点不清楚你所说的“但是在你第二次点击后,它会创建一个克隆而不是一个克隆”。你能把范围扩大一点吗?另外,如果您第三次单击,是否会得到三个克隆?它会继续为已创建的克隆再创建一个克隆。e、 g如果单击3次,它将创建3个对象,而不是一个对象。
void Update()
{
if (Input.GetMouseButtonDown(0))
{
btn1.onClick.AddListener(UpClicked);
}
}