c# - 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
,以及如何正确使用该功能?
解决方案
所以Mathf.PingPong()
使用一个函数调用Mathf.Repeat()
这些可能旨在作为补间/缓动辅助功能
所以Mathf.Repeat(float t, float length)
会创建一个这样的图每条线段的长度是
哪里,是函数的X值(返回值是图上对应的Y位置)
length
t
什么Mathf.PingPong(float t, float length)
看起来更像这样
再次描述每个三角形的高度并给出X位置
length
t
一个常见的用例是我们希望一些值随着这个图而改变,就像沿着它走,X 值稳步增加,并在每一步取 Y 的值。最简单的方法是Time.time
作为t
参数传入,它将在相应的 X 位置获取此函数的值。
float Y = Mathf.PingPong(Time.time,Max_Y_Value);
推荐阅读
- actionscript-3 - 如何修复 - 1084:语法错误:程序结束前需要右括号
- r - 当多个数据集中存在相同的列名时,应该使用哪个合并命令进行合并?
- javascript - 杏仁糖 + ReactJS?
- angular - 未找到模块:错误:无法解析“fs”角度
- python - 管理员无法创建新条目
- javascript - 根据属性将数组转换为地图的快捷方式
- javascript - setInterval() 在 Firefox 上不起作用
- azure - Azure Service Fabric 中 Reliable Dictionary 中的数据如何保存到磁盘
- javascript - 在 Javascript 中以 CSV 格式下载数据
- bash - 将自定义环境变量传递给 nohup