首先,C#里function我们在调用的时候,是会在一帧中全部执行完。所以如果一个方法类似于这样
private void ScaleChangeFx() {
float timeStart = Time.time;
while (Mathf.Abs(Time.time-timeStart) <= scaleRecoverIntervalTime)
{
transform.localScale = Vector3.Lerp(transform.localScale, baseScale, (Time.time - timeStart) / scaleRecoverIntervalTime);
}
}
那么这个方法在你调用的时候就会在这一帧中反复循环,然后Unity就卡住了。(嗯,这时候就只能用任务管理器把Unity关闭了,别问我为啥知道)
那么问题来了,我们知道这样一个插值的功能需要使用协程这样的东西来实现,那么到底怎么实现呢。
IEnumerator ScaleChangeFx()
{
while (Mathf.Abs(Time.time - timeStart) <= scaleRecoverIntervalTime)
{
transform.localScale = Vector3.Lerp(transform.localScale, baseScale, (Time.time - timeStart) / scaleRecoverIntervalTime);
yield return null;
}
}
这段代码中可以看到,ScaleChangeFx里面是一个wh