Skip to content

Latest commit

 

History

History
160 lines (120 loc) · 7.15 KB

File metadata and controls

160 lines (120 loc) · 7.15 KB

Компонент CameraShake

Что это: Компонент использует DOTween для создания плавного эффекта тряски. Поддерживает тряску позиции, поворота или обоих одновременно. После завершения автоматически возвращает объект в исходное состояние.

Как использовать: см. разделы ниже.


1. Введение

CameraShake — это мощный компонент для создания эффекта "тряски" объекта, к которому он прикреплен. Использует DOTween для плавной и производительной анимации. Чаще всего используется для камеры, чтобы добавить динамики в моменты взрывов, ударов или других интенсивных событий в игре.

Улучшения в v5.2.21:

  • Полностью переделан на DOTween для лучшей производительности
  • Добавлена поддержка тряски позиции и/или поворота
  • Множество настроек для кастомизации эффекта
  • События для интеграции с другими системами

2. Описание класса

CameraShake

  • Пространство имен: Neo.Tools
  • Путь к файлу: Assets/Neoxider/Scripts/Tools/Other/CameraShake.cs

Описание Компонент использует DOTween для создания плавного эффекта тряски. Поддерживает тряску позиции, поворота или обоих одновременно. После завершения автоматически возвращает объект в исходное состояние.


3. Настройки в инспекторе

3.1. Тип тряски

  • shakeType (ShakeType): Тип тряски
    • Position — тряска только позиции
    • Rotation — тряска только поворота
    • Both — тряска позиции и поворота одновременно

3.2. Основные настройки

  • duration (float): Длительность тряски в секундах (минимум 0.01)
  • strength (float): Сила (амплитуда) тряски (минимум 0)
  • vibrato (int): Количество вибраций (1-50). Больше значение = больше вибраций
  • randomness (float): Случайность тряски (0-180). 0 = без случайности, 180 = полная случайность
  • fadeOut (bool): Если true, тряска будет плавно затухать к концу

3.3. Настройки позиции

  • shakeX (bool): Тряска по оси X
  • shakeY (bool): Тряска по оси Y
  • shakeZ (bool): Тряска по оси Z

3.4. Настройки поворота

  • rotateX (bool): Тряска поворота по оси X (pitch)
  • rotateY (bool): Тряска поворота по оси Y (yaw)
  • rotateZ (bool): Тряска поворота по оси Z (roll)

3.5. Дополнительные настройки

  • easeType (Ease): Тип easing для анимации (из DOTween)
  • useUnscaledTime (bool): Если true, игнорирует Time.timeScale
  • relativeShake (bool): Если true, тряска относительно текущей позиции

3.6. События

  • OnShakeStart (UnityEvent): Вызывается при начале тряски
  • OnShakeComplete (UnityEvent): Вызывается при завершении тряски
  • OnShakeStop (UnityEvent): Вызывается при остановке тряски вручную

4. Публичные методы

StartShake()

Запускает тряску с настройками по умолчанию из инспектора.

cameraShake.StartShake();

StartShake(float customDuration, float customStrength)

Запускает тряску с кастомными параметрами.

cameraShake.StartShake(1.0f, 2.0f); // 1 секунда, сила 2

StopShake()

Останавливает текущую тряску немедленно и возвращает объект в исходное состояние.

cameraShake.StopShake();

ResetTransform()

Восстанавливает исходную позицию и поворот объекта.

cameraShake.ResetTransform();

Свойства

  • IsShaking (bool): Возвращает true, если тряска активна

5. Примеры использования

Пример 1: Простая тряска камеры

// В инспекторе:
// - shakeType = Position
// - duration = 0.5
// - strength = 1.0
// - shakeX = true, shakeY = true, shakeZ = false

// В коде:
cameraShake.StartShake();

Пример 2: Тряска с поворотом

// В инспекторе:
// - shakeType = Both
// - rotateZ = true (roll эффект)
// - vibrato = 20 (больше вибраций)

cameraShake.StartShake(0.8f, 1.5f);

Пример 3: Реакция на событие

// В инспекторе привяжите OnShakeComplete к нужному событию
// Или в коде:
cameraShake.OnShakeComplete.AddListener(() => {
    Debug.Log("Тряска завершена!");
});

Пример 4: Остановка при необходимости

// Если нужно остановить тряску досрочно:
if (cameraShake.IsShaking)
{
    cameraShake.StopShake();
}

6. Советы по использованию

  1. Для камеры: Используйте shakeType = Position с shakeX = true, shakeY = true для классического эффекта
  2. Для интенсивных эффектов: Увеличьте vibrato (15-30) и strength (1.5-3.0)
  3. Для плавного эффекта: Включите fadeOut = true и используйте Ease.OutQuad или Ease.OutCubic
  4. Для эффекта "roll": Используйте shakeType = Rotation с rotateZ = true
  5. Для комбинированного эффекта: Используйте shakeType = Both с настройкой позиции и поворота

7. Технические детали

  • Компонент использует DOShakePosition и DOShakeRotation из DOTween
  • Автоматически сохраняет исходную позицию и поворот в Awake()
  • Корректно очищает твины при уничтожении объекта
  • Поддерживает множественные одновременные тряски (каждая создает свой твин)