Урок 7 из 8 · 25 мин · обновлено
Звук, анимация и сцены: победа и поражение
Как проиграть звук через AudioSource, как устроены Animation и Animator, как переключать сцены через SceneManager и собрать полный игровой цикл: начало, победа, поражение, перезапуск.
Звук
Звук в Unity играет компонент AudioSource, а слышит его Audio Listener — он уже стоит на главной камере. Звуковые файлы (.wav, .mp3, .ogg) просто перетаскивают в окно Project. Бесплатные звуки можно найти, например, на freesound.org, проверяя лицензию каждого файла.
Добавим звук монеты. Повесьте на GameManager компонент AudioSource и дополните скрипт:
[SerializeField] private AudioSource audioSource;
[SerializeField] private AudioClip coinSound;
public void AddCoin()
{
coins++;
audioSource.PlayOneShot(coinSound);
UpdateUI();
}
AudioClip— сам звуковой файл, его перетаскивают в поле из Project;PlayOneShotпроигрывает звук один раз и не обрывает предыдущий. Если собрать две монеты подряд, прозвучат оба звука.
Для фоновой музыки удобнее отдельный AudioSource с включёнными Play On Awake и Loop: музыка начнётся сама и будет играть по кругу.
Анимация
Анимация в Unity — это запись того, как меняются свойства объекта во времени: позиция, поворот, масштаб, цвет.
- Окно Animation (Window → Animation → Animation): выбираете объект, создаёте клип, нажимаете запись и в разные моменты времени меняете свойства. Unity плавно достроит промежутки. Так можно сделать, например, монету, которая плавно качается вверх-вниз.
- Animator — схема состояний: «стоит», «бежит», «прыгает» и стрелки переходов между ними. Переходы срабатывают по параметрам, которые меняет скрипт:
animator.SetBool("IsRunning", true);
animator.SetTrigger("Jump");
Анимации персонажей обычно рисуют художники и аниматоры, а разработчик подключает их и пишет переходы. Готовые модели с анимациями есть в Unity Asset Store, в том числе бесплатные.
Сцены: победа и поражение
Каждый экран игры удобно делать отдельной сценой. Переименуйте SampleScene в Game и создайте ещё две сцены: Win и Lose (File → New Scene). В каждой — Canvas с текстом «Победа!» или «Поражение» и кнопкой «Ещё раз».
Сцены нужно добавить в список сборки: File → Build Profiles → Scene List, перетащите туда все три. Сцена, которая стоит первой, загрузится при запуске игры.
Переключает сцены SceneManager:
using UnityEngine.SceneManagement;
public void AddCoin()
{
coins++;
audioSource.PlayOneShot(coinSound);
UpdateUI();
if (coins >= coinsToWin)
{
SceneManager.LoadScene("Win");
}
}
public void LoseLife()
{
lives--;
UpdateUI();
if (lives <= 0)
{
SceneManager.LoadScene("Lose");
}
}
При загрузке новой сцены все объекты старой исчезают. Если сцену загрузить заново, все монеты и счётчики вернутся в начальное состояние.
Так получился полный игровой цикл: игра → победа или поражение → «Ещё раз». В любой игре он есть, даже в самой маленькой.
Попробуйте сами. Сделайте кнопку «Ещё раз» на сценах Win и Lose: по нажатию снова загружается сцена Game. Подумайте, как сделать кнопку «Начать заново» прямо во время игры.
Решение
Скрипт MenuButtons повесьте на любой объект в сценах Win и Lose, например на Canvas:
using UnityEngine;
using UnityEngine.SceneManagement;
public class MenuButtons : MonoBehaviour
{
public void PlayAgain()
{
SceneManager.LoadScene("Game");
}
}
У кнопки в событии On Click нажмите плюс, перетащите объект со скриптом и выберите MenuButtons → PlayAgain.
Для перезапуска во время игры загружают текущую сцену, какой бы она ни была:
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Какой компонент воспроизводит звук в сцене?
AudioSource — источник звука. Audio Listener — «уши», он обычно стоит на камере и слышит все источники.
-
SceneManager.LoadScene("Win") выдаёт ошибку, хотя сцена Win есть в проекте. В чём дело?
Загрузить можно только сцены из списка сборки. Добавьте её в File → Build Profiles → Scene List.
-
Как перезапустить текущий уровень?
Повторная загрузка сцены возвращает все объекты в исходное состояние: монеты, игрока, счёт.
-
Чем Animator отличается от окна Animation?
Анимация — запись изменений во времени: позиция, поворот, цвет. Animator — схема состояний: «стоит», «бежит», «прыгает» и переходы между ними.