0

我有一个合作例程,一旦选择就会播放。co 例程将对象放大。它选择的第二个它缩小了对象。

但是,如果我再次选择它,则不会发生任何事情。但是,它确实第一次起作用。

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

}

我有一个合作例程,一旦选择就会播放。co 例程将对象放大。它选择的第二个它缩小了对象。

但是,如果我再次选择它,则不会发生任何事情。但是,它确实第一次起作用。

4

1 回答 1

3

在我看来,您没有重置该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()方法执行相同的操作。考虑其中一项更改,看看是否能解决您的问题。

于 2019-04-08T09:52:35.240 回答