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

9
Unity文档中Mathf.PingPong的说明如下:
PingPong函数会将数值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));
}

每次我看到PingPong在示例中使用时,都会使用Time.time作为t值(或者基于Time.time进行一些数学计算)。为什么?
我看到的唯一解释来自这个问题:c# Unity Mathf.PingPong not working,它暗示t的值必须始终在变化,但是仍然不清楚为什么或发生了什么。
那么,Mathf.PingPong实际上如何处理t / t值的值是什么,以及如何正确使用该函数?

1
请注意:您可以查看源代码:https://github.com/Unity-Technologies/UnityCsReference/blob/02d565cf3dd0f6b15069ba976064c75dc2705b08/Runtime/Export/Math/Mathf.cs#L360 - UnholySheep
1个回答

15

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

这些函数可能被设计为缓动/缓和辅助函数

因此,Mathf.Repeat(float t, float length)将创建如下图所示的图形
enter image description here
其中length是每条线段的长度,t是函数的X值(返回值是图表上对应的Y位置)

Mathf.PingPong(float t, float length)的作用更像是这样
enter image description here
同样,length描述每个三角形的高度,t给出X位置

这种情况的常见用例是,我们希望某个值随着这个图形一起改变,就像沿着它行走,X值稳步增加,并在每个步骤中获取Y的值。 最简单的方法是将Time.time作为t参数传入,这将在相应的X位置获取此函数的值。

float Y = Mathf.PingPong(Time.time,Max_Y_Value);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接