Нажми — и увидишь, что делает команда
- ⏱ Сколько займёт
- 30–50 минут, 5 шагов. Каждый шаг заканчивается результатом на экране.
- 💻 Что нужно
- Компьютер с Windows или macOS. Понадобится Unity — бесплатная для учёбы, поставим на первом шаге. С телефона этот квест не проходится.
- ⏸ Если прервёшься
- Ничего не потеряется: прогресс сохраняется на этом устройстве. Вернёшься — продолжишь с того же шага.
- 🎓 Чему научишься
- здоровье и урон · экран проигрыша · первая сборка игры
Здоровье и цена ошибки
Первый укус — испуг. Второй — кровь в воде. Третьего может не быть.
«Три укуса, — Марк показывает три пальца. — Больше не выдержит никто. И это честно: игрок должен видеть, сколько у него осталось».
А когда всё кончится — покажи экран проигрыша и дай кнопку «ещё раз». Без неё игру закрывают навсегда.
Ролик 3D — он про ощущение: три жизни, укус, конец. Твоя «Глубина» останется 2D, но здоровье, урон, экран проигрыша и кнопка «ещё раз» будут ровно те же.
Читать текстом
Экран «Игра окончена» — тоже часть игры, и делать его надо всерьёз.
using UnityEngine; using TMPro; public class PlayerHP : MonoBehaviour { [SerializeField] private TMP_Text hpText; [SerializeField] private int HP = 3; // три укуса — и всё private void Start() => hpText.text = $"{HP}"; public void Damage(int damage) // публичный — его позовёт враг { HP -= damage; if (HP < 0) HP = 0; // не уходим в минус hpText.text = $"{HP}"; if (HP == 0) GameManager.Instance.GameOver(); } }
public здесь важно: метод должен быть виден чужому скрипту. Всё остальное в классе оставляем закрытым.Это первый твой метод, который зовут снаружи. До сих пор все функции Unity вызывал сам.
Укус
using UnityEngine; public class EnemyMouth : MonoBehaviour { [SerializeField] private int biteDamage = 1; // один укус — одна полоска private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) { if (other.TryGetComponent(out PlayerHP playerHP)) { playerHP.Damage(biteDamage); // зовём чужой метод } } } }
Врагу нужен свой Mouth — дочерний объект с маленьким триггером спереди. Тот же приём, что был у акулы игрока.
private bool canBeHit = true;
public void Damage(int damage)
{
if (!canBeHit) return; // ещё неуязвим
StartCoroutine(Invuln());
// ...дальше прежний код: HP -= damage и остальное
}
private IEnumerator Invuln()
{
canBeHit = false;
yield return new WaitForSeconds(0.5f);
canBeHit = true;
}

- 1Hierarchy — дай врагу пастьПКМ по врагу → Create Empty, назови Mouth. Маленький коллайдер с галочкой Is Trigger спереди — это и есть зубы.
- 2Tag Player — на акулеСкрипт EnemyMouth проверяет CompareTag("Player"). Забыл тег — укусов не будет, и полчаса уйдёт на поиск ошибки в коде, которой там нет.
- 3Куда вешать скриптыPlayerHP — на акулу, EnemyMouth — на объект Mouth врага, Flash — туда же, где Sprite Renderer. Кнопка Add Component ждёт в самом низу Инспектора.
- 4Play — дай себя укуситьПроверяй всё разом: цифра здоровья падает, акула коротко краснеет, на нуле появляется панель «Игра окончена» и время замирает.
- 5Game — и отсюда же собирают билдИгра должна читаться и в маленьком окне. Сборка живёт в меню File → Build Profiles: строка меню идёт по самому верху экрана, выше окна Unity, — на кадр она не попала.
Это настоящий экран Unity 6 — такой же, как у тебя. Нажимай на кружки по порядку: метка покажет место, строка ниже объяснит, зачем оно. Отмечай пройденное — прогресс сохранится.
Экран проигрыша
using UnityEngine; using UnityEngine.SceneManagement; public class GameManager : MonoBehaviour { // ДОБАВЬ это в свой GameManager из квеста 4. // Instance, scoreText, best и AddScore остаются на месте! [SerializeField] private GameObject gameOverPanel; public void GameOver() { gameOverPanel.SetActive(true); // показали панель Time.timeScale = 0f; // остановили время } public void Restart() { Time.timeScale = 1f; // время обратно! SceneManager.LoadScene(SceneManager.GetActiveScene().name); } }
Time.timeScale = 0 замораживает игру целиком: движение, физику, анимации. Так делают паузу почти во всех проектах. Главное — не забыть вернуть единицу, иначе после перезапуска игра останется стоять и ты будешь долго искать причину.Собери панель: Panel на Canvas, внутри крупный текст «Игра окончена», итоговый счёт и кнопка. Изначально выключи её галочкой сверху Инспектора.
Файл не переписывай. Открой свой GameManager.cs из четвёртого квеста и допиши в него поле gameOverPanel и два метода, а строку using UnityEngine.SceneManagement; добавь к тем using, что уже есть. Заменишь файл целиком — потеряешь счёт и рекорд, а GameManager.Instance перестанет компилироваться.

Почему жизней всегда мало
Три сердца, три жизни, три попытки — это не случайность. Три достаточно, чтобы ошибиться и исправиться, но мало, чтобы расслабиться.
Ещё игры дают невидимую поблажку: после удара герой примерно полсекунды неуязвим. Без неё враг забирает всё здоровье за одно касание, и игру бросают.
И главное — кнопка «ещё раз». Игра, где после проигрыша нужно что-то искать в меню, теряет половину игроков на первой смерти.
Обратная связь: что со мной было
using System.Collections; using UnityEngine; public class Flash : MonoBehaviour { [SerializeField] private Color hitColor = Color.red; private SpriteRenderer sr; private Color normal; private void Start() { sr = GetComponent<SpriteRenderer>(); normal = sr.color; } public IEnumerator Blink() { sr.color = hitColor; yield return new WaitForSeconds(0.12f); sr.color = normal; } }
Без такой мелочи игрок теряет здоровье и не понимает, за что. Красная вспышка стоит десять строк, а меняет ощущение полностью.
Эти числа не выведены формулой — их подобрали руками тысячи разработчиков. Начни с них и подстрой под себя.
Первый билд
- 1File → Build ProfilesОткроется отдельное окно поверх редактора — кружки на этой схеме показывают порядок действий, а не место на экране. Слева в столбце Platforms выбери Windows или macOS, ту, на которой работаешь, и нажми Switch Platform, если она не активна.
- 2Add Open ScenesКнопка в окне сборки. Забудешь — в билд не попадёт ни одна сцена, и запустится чёрный экран.
- 3Выбери пустую папку и жми BuildUnity соберёт готовую программу. Это займёт несколько минут.
- 4Запусти файл — игра работает без UnityЕё можно скинуть другу, положить на флешку или выложить в интернет.
Это тот самый момент, ради которого шла экспедиция «Глубина». Программа, которую написал ты, теперь запускается сама — без Unity и без тебя.
Читать текстом
Задание студии: собери версию под WebGL и выложи её на itch.io. Игра откроется прямо в браузере по ссылке — той, которой можно поделиться с кем угодно.
Заложи на это вечер, а не полчаса: сначала в Unity Hub придётся доставить модуль WebGL Build Support (около гигабайта), сама сборка идёт 10–20 минут, а для itch.io нужен аккаунт — заводи его вместе с родителем.
Поднимай флаг.