У меня есть совместная рутина, которая когда-то была выбрана Однако, если я выберу его снова, ничего не произойдет. Это работает с первого раза, однако - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть одна подпрограмма, которая когда-то была выбрана. Совместная рутина масштабирует объект. Второй выбранный объект уменьшает объект.

Однако, если я выберу его снова, ничего не произойдет. Это работает с первого раза, однако.

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

}

У меня есть совместная процедура, которая когда-то была выбрана. Совместная рутина масштабирует объект. Второй выбранный объект уменьшает объект.

Однако, если я выберу его снова, ничего не произойдет. Это работает с первого раза, однако.

1 Ответ

3 голосов
/ 08 апреля 2019

Мне кажется, что вы не сбрасываете поле 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(). Рассмотрите одно из этих изменений и посмотрите, решит ли это вашу проблему.

...