Menu
CoddyTech

Движущиеся платформы

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 49 из 56.

challenge icon

Задание

Средне

Синяя платформа должна плавно двигаться взад и вперёд над пропастью. Сохраните всё из предыдущего урока.

Заполните MovingPlatform:

  • Два поля, задаваемых в Inspector: distance (3) и speed (1.5), а также public Vector3 delta.
  • Платформа плавно движется от начальной позиции на distance единиц вдоль +x со скоростью speed единиц в секунду, затем возвращается в начальную позицию и так далее бесконечно.
  • Каждый кадр delta показывает, насколько платформа переместилась за этот кадр: её позиция после перемещения минус позиция до него.

CharacterController не переносится вместе с поверхностью, на которой стоит: на движущейся платформе он остаётся на месте, а платформа выезжает из-под него. Не поможет и перемещение её transform.position: следующий вызов Move контроллера начинается с позиции, в которой его в последний раз видела физика, и отменяет это изменение. Сделайте так, чтобы Player перемещался вместе с платформой:

  • Добавьте OnControllerColliderHit. Когда нормаль столкновения направлена вверх (hit.normal.y больше 0.5: игрок стоит на поверхности) и у объекта есть MovingPlatform, сохраните эту платформу в поле.
  • В Update добавьте delta этой платформы к перемещению, передаваемому в controller.Move, а затем забудьте о платформе (установите в поле значение null). Вызов Move снова найдёт её, пока игрок стоит на ней.

Нажмите Play, запрыгните на платформу и прокатитесь на ней, затем нажмите Check.

Попробуйте сами

using UnityEngine;

public class MovingPlatform : MonoBehaviour
{
    // В одном из следующих уроков мы добавим сюда код платформы, которая плавно движется туда-сюда.
}

Все уроки раздела Создание настоящих игр