Создание 2 объекта вместо 1 - PullRequest
0 голосов
/ 30 августа 2018

В игре есть одна кнопка, и если вы щелкаете по нему, кнопка должна создать объект, но при первом нажатии на нее создается один клон, а после второго щелчка создается добавление еще одного клона к другой вместо одного клона.

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>();
}

Затем присваиваются значения позиции в методе запуска и компоненте кнопки

void Update() 
{
    if (Input.GetMouseButtonDown(0))
    {
        btn1.onClick.AddListener(UpClicked);
    }
}

И контролируется, если пользователь нажимает кнопку 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 ]

0 голосов
/ 30 августа 2018

Виновник в вашем обновлении () Метод:

void Update() 
{
    if (Input.GetMouseButtonDown(0))
    {
        btn1.onClick.AddListener(UpClicked);
    }
}

Это добавляет еще один вызов к UpClickd() к событию onClick каждый раз при щелчке мыши, что, вероятно, не то, что вы хотели.

Переместите AddListener в функцию Start (), чтобы при возникновении события вызывался только один вызов функции.

0 голосов
/ 30 августа 2018

Я полагаю, что проблема возникает, потому что вы добавляете прослушиватель нажатия кнопки каждый раз, когда щелкаете мышью (в вашей функции 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() 
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...