Unity3D将音频与对象位置同步

时间:2018-11-11 09:35:16

标签: unity3d

我有一个简单的棋盘游戏,代币从一个正方形移到另一个正方形。我正在使用协程移动令牌。它的功能如下

IEnumerator MoveTokenCoRoutine(int steps)
{

    while (steps > 0)
    {
       transform.position = Vector3.Lerp(transform.position, newPos, Time.deltaTime * speed);
        yield return null;
        --steps;
    }

}

剪辑是2秒钟的滑动声音。

Steps是使用Lerp令牌应移动的正方形数。我唯一能使其同步的是以下参数。

1)将束缚速度设置为10,这是我用来移动的默认速度 2)步数= 1(移动一格) 3)不久之前致电Play()

在这种情况下,动作和声音效果几乎保持同步。

但是,如果步数超过1,并且我将Play()放入循环中,它只会播放一次并停止。但是令牌会一直移动直到结束。

我必须采取什么方法使其保持同步?

1 个答案:

答案 0 :(得分:0)

不幸的是,您的代码中没有太多内容。

一个更好的变体形式如下:

IEnumerator MoveTokenCoRoutine()
{
    float currentTime=0.0f;  // note: NOT in seconds, 1.0f = end of sound sample
    Vector3 oldPosition = transform.position;
    float startTime = Time.time;
    while (currentTime < 1.0f) {
       currentTime = (Time.time - startTime)/ DurationInSeconds ;
       transform.position = Vector3.Lerp(oldPosition, newPos,  currentTime );
       yield return null;
    }
}

必需变量:

  • Vector3 newPos动画结束时的目标位置
  • float DurationInSeconds声音样本的长度,以秒为单位