我有一个合作例程,一旦 selected 就可以播放。但是,如果我再次转到 select,则什么也不会发生。但是它确实是第一次工作

I have a co routine that once selected plays through. However If i go to select it again nothing happens. It does work the first time however

我有一个合作例程,selected 播放过一次。 co 例程放大对象。第二个 selected 它缩小了对象。

但是,如果我转到 select,它又没有任何反应。但是它确实是第一次工作。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class square : MonoBehaviour
{

    public Transform Button;
    float ElapsedTime = 0.0f;
    float TotalTime = 0.4f;

    private bool _isenlargingcanvas;

    public void enlargecanvas()
    {
        if (_isenlargingcanvas)
            return;
        _isenlargingcanvas = true;
        StartCoroutine(transitionscale());
        _isenlargingcanvas = false;
    }

    IEnumerator transitionscale()

    {

        while (ElapsedTime < TotalTime)
        {
            ElapsedTime += Time.deltaTime;
            Button.localScale = Vector3.Lerp(new Vector3(0, 0, 0), new
            Vector3(9, 7, 7), (ElapsedTime / TotalTime));
            yield return null;
        }
    }

    private bool _isshrinkingcanvas;

    public void shrinkcanvas()
    {
        if (_isshrinkingcanvas)
            return;
        _isshrinkingcanvas = true;
        StartCoroutine(transitionscaledown());
        _isshrinkingcanvas = false;
    }

    IEnumerator transitionscaledown()

    {

        while (ElapsedTime < TotalTime)
        {
            ElapsedTime += Time.deltaTime;
            Button.localScale = Vector3.Lerp(new Vector3(9, 7, 7), new
            Vector3(0, 0, 0), (ElapsedTime / TotalTime));
            yield return null;
        }
    }

}

我有一个合作例程,selected 播放过一次。 co 例程放大对象。第二个 selected 它缩小了对象。

但是,如果我转到 select,它又没有任何反应。但是它确实是第一次工作。

在我看来你没有重置 ElapsedTime 字段,所以如果你重新输入 transitionscale() 方法,while 语句中的条件已经为假所以该方法不做任何事情就退出了。

可能的解决方案是,在每次调用方法之前重置变量...如下

// Inside the elarge canvas method
ElapsedTime = 0.0f;
StartCoroutine(transitionscale());

或者,您可以在转换比例方法中重置它,并且工作量更少。

IEnumerator transitionscale()

{
    ElapsedTime = 0.0f;

    while (ElapsedTime < TotalTime)
    {
        ElapsedTime += Time.deltaTime;
        Button.localScale = Vector3.Lerp(new Vector3(0, 0, 0), new
        Vector3(9, 7, 7), (ElapsedTime / TotalTime));
        yield return null;
    }
}

您需要对 trasitionscaledown() 方法执行相同的操作。考虑其中一项更改,看看是否能解决您的问题。