Unity Visual Effect: Play () hat keinen Effekt
Ich mache meine ersten visuellen Effekte und ich mache sie, wenn mein Schiff fliegt. Ich möchte es also nur spielen, wenn sich das Schiff tatsächlich bewegt. Ich würde annehmen, es ist einfach, Sie rufen Play () auf, es wird abgespielt. Sie spielen Stop (), es wird aufhören. Aber wenn ich Play nenne, passiert nichts.
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();
}
}
Wenn ich den Namen des anfänglichen Ereignisses OnPlay einlasse, wird es so abgespielt, wie es sein sollte. Aber nichts aus dem Drehbuch ... Was fehlt mir hier?
Antworten
Ok ... Zuerst hatte ich erwartet, dass es ein inneres Attribut gibt VisualEffect, das mir sagt, ob es spielt oder nicht ... Aber ich habe nichts auf diese Weise gefunden. Also dachte ich, es ist kein so großes Problem, wenn man einfach Play nennt ...
Aber anscheinend ist es ... Wie @DMGregory vorschlägt, rufe ich Play () nur einmal auf und füge eine benutzerdefinierte Variable hinzu, um den Status zu halten, wenn es abgespielt wird.
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;
}
}
}