Я уже задавал этот вопрос однажды, но до сих пор не понял, как решить эту проблему.
Я пытаюсь изменить положение 4 игровых объектов единства и игрока SteamVR, изменив положение transform.position. Это работает очень хорошо, но выглядит не очень хорошо, потому что кажется, что вы мгновенно телепортируетесь в новое положение.
Итак, я хочу переместить объекты с помощью Vector3.MoveTowards. Но я пробовал несколько вещей, и это просто не работает. У меня были следующие ситуации с другим кодом:
-> Объект даже не двигается
-> Объект движется мгновенно
В настоящее время я использую следующее.
Метод обновления:
private void Update()
{
if (Condition)
{
ZoomIn();
}
}
Метод Zoomin:
private void ZoomIn()
{
switch (ZoomLevel)
{
case 1:
SetZoomLevel(20, 40);
ZoomLevel++;
break;
case 2:
SetZoomLevel(40, 60);
ZoomLevel++;
break;
case 3:
break;
}
}
SetZoomLevel (где фактически начинается движение, и где проблема):
private void SetZoomLevel(float height, float distance)
{
Fade(ObjectToMove1, height, distance);
Fade(ObjectToMove2, height, distance);
Fade(ObjectToMove3, height, distance);
Fade(ObjectToMove4, height, distance);
}
Это должно вызвать анимацию
IEnumerator Fade(GameObject teleportObject, float height, float distance)
{
while (Vector3.Distance(teleportObject.transform.position, new Vector3(0, height, distance)) > 0.001f)
{
// Speed = Distance / Time => Distance = speed * Time. => Adapt the speed if move is instant.
teleportObject.transform.position = Vector3.MoveTowards(teleportObject.transform.position, new Vector3(0, height, distance), 10 * Time.deltaTime);
yield return null;
}
}
Почему-то это не работает.
Я надеюсь, что кто-нибудь может мне помочь.
Заранее спасибо.