Эффект тряски камеры
Создадим эффект тряски камеры, активирующийся при падении блоков. Создадим новый скрипт (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.