我有一个简单的棋盘游戏,代币从一个正方形移到另一个正方形。我正在使用协程移动令牌。它的功能如下
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()放入循环中,它只会播放一次并停止。但是令牌会一直移动直到结束。
我必须采取什么方法使其保持同步?
答案 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
声音样本的长度,以秒为单位