Unity3D синхронизирует звук с положением объекта - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть простая настольная игра, в которой токены перемещаются с квадрата на квадрат. Я использую сопрограмму для перемещения токенов. Это делает что-то вроде ниже

IEnumerator MoveTokenCoRoutine(int steps)
{

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

}

Клип представляет собой скользящий звук в течение 2 секунд.

Шаги, на сколько квадратов токен должен двигаться, используя Lerp. Единственный раз, когда я смог синхронизировать это с параметрами ниже.

1) Установите скорость lerp на 10, которая является скоростью по умолчанию, которую я использую для перемещения 2) Шаг = 1 (переместить на одну клетку) 3) Вызовите Play () как раз перед тем, как

С этим сценарием движение и звуковой эффект в значительной степени синхронизированы.

Однако, если количество шагов больше 1, и я помещаю Play () в цикл, он просто проигрывается один раз и останавливается. Но жетон продолжает двигаться, пока не закончится.

Какие у меня есть подходы для синхронизации?

1 Ответ

0 голосов
/ 11 ноября 2018

К сожалению, из вашего кода мало что можно спасти.

Лучший рабочий вариант будет выглядеть так:

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 Длина звукового сэмпла в секундах
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...