Unity Visual Effect: Play () ไม่มีผลใด ๆ

Sep 11 2020

ฉันกำลังสร้างวิชวลเอฟเฟกต์ครั้งแรกและสร้างเอฟเฟกต์เมื่อเรือของฉันบิน ฉันอยากจะเล่นมันก็ต่อเมื่อเรือกำลังเคลื่อนที่เท่านั้น ฉันคิดว่ามันง่ายที่คุณเรียกว่า Play () มันจะเล่น คุณเล่น Stop () มันจะหยุด แต่เมื่อฉันโทรเล่นไม่มีอะไรเกิดขึ้น

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

เมื่อฉันปล่อยให้ใน Initial Event Name OnPlay มันกำลังเล่นตามที่ควรจะเป็น แต่ไม่มีอะไรจากสคริปต์ ... สิ่งที่ฉันขาดหายไปที่นี่?

คำตอบ

2 Zechy Sep 11 2020 at 00:30

โอเค ... ตอนแรกฉันคาดหวังว่าจะมีแอตทริบิวต์ภายในVisualEffectซึ่งจะบอกฉันว่ากำลังเล่นอยู่หรือไม่ ... แต่ไม่พบอะไรในลักษณะนั้น ดังนั้นฉันคิดว่ามันไม่ใช่ปัญหาใหญ่มากนักเมื่อคุณโทรเล่น ...

แต่เห็นได้ชัดว่า ... ตามที่ @DMGregory แนะนำฉันแค่เรียก Play () หนึ่งครั้งเพิ่มตัวแปรที่กำหนดเองเพื่อระงับสถานะหากกำลังเล่นอยู่

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