扩展对象并在Unity中同时将其移动到位

时间:2018-02-23 15:45:31

标签: c# unity3d lerp

我正在创建一个功能,当用户点击对象的子对象时,父对象会按比例缩放,父对象移动,以便子组件处于中心点。我把所有这些工作都很好。

目前,我正在协程中执行该功能,以在缩放和定位之间进行缩放。我注意到的是,如果说我有一个远离焦点的大型子对象,它会在曲线中移动,因为它不必按比例缩放,但它必须移动一个由于它的位置,距离更远。当要移动的位置很小并且scaleTo Vector较大时,会发生相反的效果。有没有办法抵消两个载体的差异?

所以我的问题是,有没有办法缩放和移动物体,使其运动不那么不自然?我将在下面发布我的Coroutine:

IEnumerator LerpScaling(Vector3 scale, Vector3 scaleTo, GameObject obj, bool isReverse)
{

    Vector3 offset = new Vector3(0, 0, 2.5f);

    Transform baseObj = obj.transform.root.GetComponentInChildren<BaseObject>().transform;

    elapsedTime = 0;

    while (elapsedTime < timeToLerp)
    {

        baseObj.localScale = Vector3.Lerp(scale, scaleTo, elapsedTime / timeToLerp);

        if (isReverse)
        {
            //lerp the position back
            baseObj.position = Vector3.Lerp(baseObj.position, offset, elapsedTime / Instance.timeToLerp);
        }
        else
        {
            //lerp the position
            baseObj.position = Vector3.Lerp(baseObj.position, baseObj.position - obj.transform.position + offset, elapsedTime / timeToLerp);
        }

        elapsedTime += Time.deltaTime;
        yield return null;
    }

1 个答案:

答案 0 :(得分:1)

Draco指出的问题是我在Lerp中使用了baseObj.position

相反,我将位置存储在while循环之前的Vector3 position变量中,因此我的位置lerp看起来如下所示。我还在时间变量中添加了SmoothStep,使Lerp感觉更自然。

baseObj.position = Vector3.Lerp(position, offset, Mathf.SmoothStep(0,1, elapsedTime / timeToLerp));