Хороший способ указать на внезапное движение, сильное или слабое дрожание камеры — приятный небольшой эффект, который можно добавить в игру.

Сегодняшняя цель: создать простой эффект дрожания камеры для моего космического шутера, чтобы указать на внезапное движение или повреждение.

Давайте начнем!

Во-первых, я создам совершенно новый скрипт monobehaviour под названием CameraShake. Я размещу его на камере, которую мы хотим потрясти, в Иерархии Единства.

Так как это команда, к которой мы хотим получить доступ из нескольких мест, я сделаю ее одиночной, добавив «public static CameraShake». переменная с именем «i» (сокращение от «экземпляр»).

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

Составляющие хорошего «шейка»:

Что включает в себя хороший эффект встряхивания?

1. Непрерывное (и часто кажущееся хаотичным) изменение положения относительно исходного положения камеры.

2. Количество случайных изменений позиции.

3. «Сила» эффекта, влияющая на максимальное расстояние изменения положения от исходного положения.

4. Длительность эффекта, привязка эффекта к указанному периоду времени.

Как я мог это закодировать?

В первом случае я буду использовать сопрограмму IEnumerator для создания эффекта ограниченной продолжительности.

Я также хочу, чтобы сила и продолжительность изменялись, поэтому я сделаю их параметрами сопрограммы, а не переменными скрипта.

Теперь, обо всем по порядку, я установлю для параметра _isShaking значение true, как только начнется дрожание, и значение false в самом конце. Я также кэширую текущую позицию камеры, прежде чем делать какие-либо изменения. Наконец, создайте локальную переменную таймера продолжительности и установите ее на ноль.

Теперь я сделаю цикл while для эффекта тряски.

Теперь мне нужна публичная функция, чтобы запустить эту сопрограмму Shake.

Добавьте код, чтобы проверить эффект:

Помимо настройки некоторых параметров и вызова «CameraShake.StartShaking([d], Vector2([x],[y]);» всякий раз, когда мы хотим запустить эффект , это почти сделано!