我有一个GameObject,并且在特定的时间内它需要缩小。
基本上我的GameObject的大小是100x100,我希望它在1秒内缩小到10x10。
现在我可以使用InvokeRepeating
,但这只会使它从100x100跳到10x10
我希望它顺利地从100x100变为10x10
还没有代码,我试图弄清楚如何做到这一点,因为使用Update
不会给我正确的结果。
答案 0 :(得分:0)
可以在while循环中使用Coroutine
和Vector.Lerp
来完成。这比使用Invoke
或InvokeRepeating
函数更好。
bool isScaling = false;
IEnumerator scaleOverTime(GameObject objToScale, Vector3 newScale, float duration)
{
if (isScaling)
{
yield break;
}
isScaling = true;
Vector3 currentScale = objToScale.transform.localScale;
float counter = 0;
while (counter < duration)
{
counter += Time.deltaTime;
Vector3 tempVector = Vector3.Lerp(currentScale, newScale, counter / duration);
objToScale.transform.localScale = tempVector;
yield return null;
}
isScaling = false;
}
<强>用法强>:
public GameObject gameObjectToScale;
void Start()
{
StartCoroutine(scaleOverTime(gameObjectToScale, new Vector3(2, 2, 2), 1f));
}