我有一个合作例程,一旦 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()
方法执行相同的操作。考虑其中一项更改,看看是否能解决您的问题。
我有一个合作例程,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()
方法执行相同的操作。考虑其中一项更改,看看是否能解决您的问题。