У меня есть анимация автомобиля, едущего по дороге, и я пытаюсь отрегулировать высоту звука двигателя через компонент Audio Source. Проблема заключается в том, что каждый раз, когда я запускаю свое приложение в редакторе единиц, значения высоты тона резко возрастают и не согласовываются между играми.
Это для C # и Unity3d. Я пытаюсь усреднить высоту тона, основываясь на трех самых последних кадрах, и фиксирую значения тона между 1 и 3. Когда я усредняю высоту тона, я проверяю, что он находится в пределах порога maxDifference для борьбы с возникающими всплесками. Анимация не основана на корневом движении, поэтому я не могу использовать поля скорости анимации. Чтобы исправить это, я вычисляю расстояние, пройденное по кадру, используя координаты X и Z текущего кадра и последний кадр, введенный в формулу расстояния. Затем я умножаю это значение на масштабирующее число, чтобы определить, к чему мои значения высоты тона должны быть близки. Это значение можно изменить с помощью редактора, и значение, которое я использовал чаще всего, равно 12.
public float scaler;
[Range(0, 0.7f)]
public float maxDifference;
public Animator anim;
public AudioSource audiosource;
Vector3 lastPos;
float lastPitch;
float lastPitch2;
float lastPitch3;
var position = transform.position;
float deltaPosition = Mathf.Abs(Mathf.Sqrt(Mathf.Pow((lastPos.z - position.z), 2) + Mathf.Pow((lastPos.x - position.x), 2)));
audiosource.pitch = deltaPosition * scaler + 1;
if (audiosource.pitch < 1)
{
audiosource.pitch = 1;
}
if (Mathf.Abs(audiosource.pitch - (lastPitch + lastPitch2 + lastPitch3) / 3f) > maxDifference
&& !carStart)
{
audiosource.pitch = (lastPitch + lastPitch2 + lastPitch3) / 3f;
}
if (audiosource.pitch > 3f)
audiosource.pitch = 3f;
lastPos = position;
lastPitch3 = lastPitch2;
lastPitch2 = lastPitch;
lastPitch = audiosource.pitch;
Я ожидал постоянных значений высоты тона, но каждый раз, когда я запускаю его, значения меняются каждый раз. Значения также постоянно возрастают.