Unity 的 Mathf.PingPong 实际上是做什么的?

Pip*_*pup 4 c# unity-game-engine

Mathf.PingPong的 Unity 文档说:

PingPongs 值t,因此它永远不会大于length也永远不会小于0

我知道它在 0 和 之间旋转一个值length,我不明白的是这个值t在做什么以及它与 PingPong 的工作方式有什么关系?

如果我设置t为任何常量,我总是会得到那个值

void Update()
{
// always prints: 1
    print(Mathf.PingPong(1f, 1f));

// always prints 0
    print(Mathf.PingPong(0f, 1f));
}
Run Code Online (Sandbox Code Playgroud)

每次我看到在示例中Time.time使用PingPong 时,它都用于t值(或一些基于 的数学Time.time)。为什么?

我看到的唯一解释来自这个问题:c# Unity Mathf.PingPong not working这意味着 的值t必须始终在变化,但同样不清楚为什么或发生了什么。

那么,Mathf.PingPong实际上在做什么t/t实际值是什么,以及如何正确使用该功能?

Jay*_*Jay 8

所以Mathf.PingPong()使用一个函数调用Mathf.Repeat()

这些可能用作补间/缓动辅助函数

所以Mathf.Repeat(float t, float length)会创建一个这样的图表
在此处输入图片说明
其中length是每条线段的长度,t是函数的 X 值(返回值是图形上对应的 Y 位置)

什么Mathf.PingPong(float t, float length)看起来更像这样
在此处输入图片说明
再次 wherelength描述每个三角形的高度并t给出 X 位置

一个常见的用例是我们希望一些值随着这个图而改变,就像沿着它稳步增加的 X 值走一样,并在每一步取 Y 的值。最简单的方法是Time.time作为t参数传入,这样会得到这个函数在对应X位置的值。

float Y = Mathf.PingPong(Time.time,Max_Y_Value);
Run Code Online (Sandbox Code Playgroud)