Efeito visual do Unity: Play () não tem efeito

Sep 11 2020

Estou fazendo meus primeiros efeitos visuais, e faço efeito, quando meu navio está voando. Portanto, quero tocá-lo apenas quando o navio estiver realmente em movimento. Suponho que seja fácil, você chama Play (), ele vai jogar. Você joga Stop () e ele vai parar. Mas quando eu chamo o play, nada acontece.

public void Update()
{
    _ship.Rotate(Input.GetAxis("Horizontal"));

    var move = Input.GetAxis("Vertical");
    _ship.Move(move);
    if (move > 0)
    {
        FlyEffect.Play();
        FlyEffect.SetVector3("Velocity", new Vector3(0, -_ship.Speed * move, 0));
    }
    else
    {
        FlyEffect.Stop();
    }
}

Quando eu permito o nome do evento inicial OnPlay, ele está jogando como deveria. Mas nada do roteiro ... O que estou perdendo aqui?

Respostas

2 Zechy Sep 11 2020 at 00:30

Ok ... No começo eu esperava que houvesse algum atributo interno ativado VisualEffect, que me diria se estava tocando ou não ... Mas não achei nada dessa forma. Então eu estava pensando que não é um grande problema, quando você apenas chama o jogo ...

Mas aparentemente é ... Como @DMGregory sugere, eu apenas chamo Play () uma vez, variável personalizada adicionada para manter o estado, se estiver jogando.

public void Update()
{
    _ship.Rotate(Input.GetAxis("Horizontal"));

    var move = Input.GetAxis("Vertical");
    _ship.Move(move);
    if (move > 0)
    {
        if (!_isPlaying)
        {
            FlyEffect.Play();
            _isPlaying = true;
        }
        FlyEffect.SetVector3("Velocity", new Vector3(0, -_ship.Speed * move, 0));
    }
    else
    {
        if (_isPlaying)
        {
            FlyEffect.Stop();
            _isPlaying = false;
        }
    }
}