2 回答
TA贡献1829条经验 获得超7个赞
您将需要知道模拟的帧速率。如果 60 秒内采样 1500 个样本,则频率大概为 25Hz。然后,您可以对每帧的两个 MainFlow 值进行采样,并在它们之间进行插值以产生平滑的输出。
像这样的东西:
float frequency = 25.0f;
float simulationTime = Time.time * frequency;
int firstFrameIndex = Mathf.Clamp(Mathf.FloorToInt(simulationTime), 0, MainFlow.length);
int secondFrameIndex = Mathf.Clamp(firstFrameIndex + 1, 0, MainFlow.length);
float fraction = simulationTime - firstFrameIndex;
float sample1 = (float)MainFlow[firstFrameIndex];
float sample2 = (float)MainFlow[secondFrameIndex];
float k = Mathf.Lerp(sample1, sample2, fraction) + 2.5f;
transform.localScale = new Vector3(k, k, k);
TA贡献1803条经验 获得超6个赞
您当前的实现取决于帧速率,获得的 fps 越高,模拟速度就越快。
相反,我会启动一个协程来获得更多控制权。假设 MainFlow 包含 1200 个样本,总共 60 秒,这意味着采样率为 20 Hz(样本/秒)。因此,您应该每秒处理 20 个样本,换句话说,每 1/20 秒处理 1 个样本。
所以:
private float secondsPerSample;
private void Start()
{
float sampleRate = MainFlow.Length / 60f;
secondsPerSample = 1 / sampleRate;
StartCoroutine(Process());
}
private IEnumerator Process()
{
for (int i = 0; i < MainFlow.Length; i++)
{
float f = (float) MainFlow[i]; // value of current volume
float k = f + 2.5f; // adding initial volume
transform.localScale = new Vector3(k, k, k); i++;
yield return new WaitForSeconds(secondsPerSample);
}
yield return Process();
}
- 2 回答
- 0 关注
- 127 浏览
添加回答
举报