如何在使用 Transform.RotateAround 的同时使用指数缓动函数?

How to use an exponential easing function while using Transform.RotateAround?

我有一个立方体形状的物体在平面上“滚动”的场景。每次,它在 pivotAxis(垂直于运动方向)上围绕 pivotPoint(与表面接触的边缘)完成 90 度旋转。为此,Transform.RotateAround 函数似乎很合适,因为它允许我提供这些参数并应用这种偏心旋转带来的必要位置变化。该运动的时间限制为 totalDuration.

这是应用移动的协程内部:

timePassed = 0f;
while (timePassed < totalDuration)
        {
            timePassed += Time.deltaTime;
            rotationAmount = (Time.deltaTime / totalDuration) * 90f;
            cube.RotateAround(pivotPoint, pivotAxis, rotationAmount);

            // Track rotation progress in case the function is interrupted
            offBalanceDegrees += rotationAmount;

            yield return null;
        }
// snap position and rotation of cube to final value, then repeat

这很好用并且给我线性移动,因为每个迭代中的 rotationAmount 是相同的。但是,我希望它具有缓动功能以缓慢开始并快速结束。我仍然必须能够指定 pivotPointpivotAxistotalDuration,但我对如何实现这一点有点困惑。

我看到的其他示例围绕对象的中心应用了旋转,这比我的情况更简单。

如果你有一个介于 0 和 1 之间的线性 t,你可以使用 tnew = t * t * t; 得到立方 tnew。然后你只需要重新配置你的方程式以使用从 0 到 1 的 t

总的来说,这可能是这样的:

timePassed = 0f;
offBalanceDegrees = 0f;
while (timePassed < totalDuration)
{
    timePassed += Time.deltaTime;

    float t = timePassed / totalDuration
    t = t * t * t;

    // Track rotation progress in case the function is interrupted
    oldRotationAmount = offBalanceDegrees;
    offBalanceDegrees = t * 90f;

    cube.RotateAround(pivotPoint, pivotAxis, offBalanceDegrees - oldRotationAmount);

    yield return null;
}