Unity Sprite показывается до изменения позиции - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть шесть или более спрайтов, которые скрыты, альфа установлена ​​на 0. Я перемещаю спрайтов в начальную позицию в верхней части экрана, прежде чем их показывать.Оказавшись в новой позиции, я показываю их и возвращаю их в исходное положение.

Моя проблема в том, что спрайты отображаются всего за пару миллисекунд, прежде чем они перемещаются в начальную точку.Несмотря на то, что порядок кода сначала «переместить», а затем «показать».

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

void Start() {
        int i = 0;

        foreach (Transform point in drawingPoints.transform)
        {
            //Record points original postion
            Vector3 currentPosition = point.transform.position;
            //Move to new starting position
            point.transform.position = stepOne.transform.position;
            //Now show point
            var color = point.gameObject.GetComponent<SpriteRenderer>().color;
            color.a = 1;
            point.gameObject.GetComponent<SpriteRenderer>().color = color;
            //Move point back to original postion
            point.transform.DOMove(currentPosition, 1f).SetDelay(UnityEngine.Random.Range(0f, 0.3f));

            i += 1;
        }
}

1 Ответ

1 голос
/ 19 сентября 2019

Подумайте об отключении средства визуализации спрайтов до тех пор, пока преобразование не будет в начальной точке.

void Start() 
{
    int i = 0;

    foreach (Transform point in drawingPoints.transform)
    {
        SpriteRenderer spriteRenderer = point.gameObject.GetComponent<SpriteRenderer>();
        if(spriteRenderer == null)
            continue;
        // Disable the renderer.
        spriteRenderer.enabled = false;
        //Record points original postion
        Vector3 currentPosition = point.transform.position;

        //Move to new starting position
        point.transform.position = stepOne.transform.position;
        // Now you're at start point, enable it back.
        spriteRenderer.enabled = true;
        //Move point back to original postion
        point.transform.DOMove(currentPosition, 1f).SetDelay(UnityEngine.Random.Range(0f, 0.3f));

        i += 1;
     }
}

Если по какой-либо причине или странному поведению единства вы хотите получить обратный вызов, когда что-то находится в позиции, вот хакерпуть

transformToMove.DoMove(destination, 0).OnComplete(()=>
{
   // Now you're at the point.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...