首页 > 解决方案 > 创建 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)

标签: c#unity3d

解决方案


我相信问题正在发生,因为您每次单击鼠标时都会添加一个按钮单击侦听器(在您的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() 
{
}

推荐阅读