首页 > 解决方案 > Unity 的 Mathf.PingPong 实际上做了什么?

问题描述

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

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

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

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

标签: c#unity3d

解决方案


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

这些可能旨在作为补间/缓动辅助功能

所以Mathf.Repeat(float t, float length)会创建一个这样的图每条线段的长度是 哪里,是函数的X值(返回值是图上对应的Y位置)
在此处输入图像描述
lengtht

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

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

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

推荐阅读