Unity: Эффект тряски камеры — Урок 7

Эффект тряски камеры

Создадим эффект тряски камеры, активирующийся при падении блоков. Создадим новый скрипт (CameraShake.cs). Удалим стандартный код и добавим следующий:

using UnityEngine;

public class CameraShake : MonoBehaviour
{
    public Transform camTransform;
    public float shakeDuration = 1f;
    public float shakeAmount = 0.04f;
    public float decreaseFactor = 1.5f;
    public Vector3 originPosition;

    void Start()
    {
        camTransform = GetComponent<Transform>();
        originPosition = camTransform.localPosition;
    }

    void Update()
    {
        if (shakeDuration > 0)
        {
            camTransform.localPosition = originPosition + Random.insideUnitSphere * shakeAmount;
            shakeDuration -= Time.deltaTime * decreaseFactor;
        }
        else
        {
            shakeDuration = 0f;
            camTransform.localPosition = originPosition;
        }
    }
}

Переменные shakeDuration, shakeAmount и decreaseFactor управляют интенсивностью и продолжительностью эффекта. Скрипт вызывается другим скриптом при падении блоков.

Добавление эффекта к камере

Добавим скрипт к камере в нужный момент. В скрипте ExplodeCubes.cs добавим вызов CameraShake после анимации отдаления камеры:

// ... существующий код ...

Camera mainCamera = Camera.main;
mainCamera.gameObject.AddComponent<CameraShake>();

// ... существующий код ...

Добавление скрипта после анимации обеспечивает корректную начальную позицию камеры.

Эффекты частиц (Particle System) и звуковые эффекты

Для эффектов (при установке и падении кубиков) и звуков используем систему частиц (Particle System) и файлы звуковых эффектов. Рекомендуется использовать бесплатные ассеты из Asset Store (например, Simple & Fix Cartoon Particles). Импортируем их в проект. Выберем эффекты: один для установки кубиков (уменьшим Start Lifetime), другой – для падения башни. Создадим папку music для звуковых файлов. Добавим к каждой кнопке компонент AudioSource и назначим звуковой файл.

В скрипте CanvasButtons.cs добавим логику проигрывания звуков, используя PlayerPrefs:

// ... существующий код ...

public Sprite musicOn, musicOff;

void MusicWork()
{
    string musicState = PlayerPrefs.GetString("music", "on");

    if (musicState == "off")
    {
        PlayerPrefs.SetString("music", "on");
        GetComponent<AudioSource>().Play();
    }
    else
    {
        PlayerPrefs.SetString("music", "off");
    }
}

// ... существующий код ...

void Start()
{
    string musicState = PlayerPrefs.GetString("music", "on");
    if (gameObject.name == "MusicButton" && musicState == "off")
    {
        GetComponent<SpriteRenderer>().sprite = musicOff;
    }

}

Аналогично добавим проигрывание звуков при падении башни и установке кубиков в скрипты ExplodeCubes.cs и GameController.cs.

Добавление и удаление объектов эффектов

В скрипте ExplodeCubes.cs добавим функцию для создания эффекта взрыва:

// ... существующий код ...

public GameObject explosion;

void OnCollisionEnter(Collision collision)
{
    // ... существующий код ...

    GameObject explosionObject = Instantiate(explosion, collision.contacts[0].point, Quaternion.identity);
    Destroy(explosionObject, 2.5f);

    // ... существующий код ...
}

В Unity назначим нужный префаб эффекта частиц переменной explosion. Аналогично добавим эффект для установки кубиков в скрипт GameController.cs. Для предотвращения утечек памяти, добавим удаление объектов эффектов через Destroy с задержкой (пример показан выше).

В этом уроке реализованы эффекты тряски камеры, частиц и звука, улучшающие игровой опыт. Эффекты управляются через скрипты и настройки Unity.

Что будем искать? Например,программа