在某个时间跨度内更改GameObject的大小

时间:2016-10-22 13:49:22

标签: c# unity3d

我有一个GameObject,并且在特定的时间内它需要缩小。

基本上我的GameObject的大小是100x100,我希望它在1秒内缩小到10x10。
现在我可以使用InvokeRepeating,但这只会使它从100x100跳到10x10 我希望它顺利地从100x100变为10x10 还没有代码,我试图弄清楚如何做到这一点,因为使用Update不会给我正确的结果。

1 个答案:

答案 0 :(得分:0)

可以在while循环中使用CoroutineVector.Lerp来完成。这比使用InvokeInvokeRepeating函数更好。

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