TGViewer
Moth Moth @namlessmoth · 44 subscribers
Post #266 64
Moth Продолжаем проходить курс по Юнити от Яюниор Сегодня 18-ая задача под названием "Индикатор здоровья" Условие: В задаче “Битва за платформер - Начало” мы реализовали работу со здоровьем персонажа и врагов, теперь пора научиться отображать его на экране. Создадим…
Получил очень длинный ответ от ментора на задание выше👆 Так что пост будет в двух частях.
Ответ ментора:
1) public UnityEvent<int> OnHealthChange; - Во первых, с On именуются обработчики события события.
Во-вторых, Само событие просто сообщает, что случилось в настоящем (-ing) или прошедшем (-ed) времени, в зависимости от того, когда вызывается, до или после действия HealthChanged;.
В-третьих, не дублируйте имя класса в его членах.
2) public UnityEvent<int> OnHealthChange; - юнити ивент не самый удобный инструмент вообще и в 99% случаев достаточно стандартных событий C#.
Кроме того, назначение обработчиков из инспектора усложняет понимание кода, тк неочевидны становятся зависимости. Всегда лучше назначать обработчики явно в коде (даже у кнопок).
3) Здоровье сейчас не универсально. Максимальное здоровье должно настраиваться из инспектора. А размер урона и лечения приходить в параметрах метода. И перед тем как применять это значений, надо проверить, что оно больше 0. Чтоб здоровье не уходило за пределы диапазона, можно использовать метод Mathf.Clamp.
4) Чтоб сделать систему независимой от от границ слайдера, обычно эти границы выставляют от 0 до 1, а текущее значение определяют, как текущее ХП деленное на максимальное. Тогда даже если максимум ХП будет меняться при прокачке, по этой формуле он все ровно будет искать соотношение текущего к максимальному, которое всегда от 0 до 1 будет.
5) Smooth HealthBar.cs - файл должен называться как класс.
6) При использовании GetComponent нужно убедиться, что есть атрибут RequireComponent. https://agava.notion.site/RequireComponent-22b7c385c77546f682a0d8c3cf9998ac
7) У вас в каждом классе UI дублируется получение здоровья и подписка на него. Вынесите в базовый класс.
8) Mathf.MoveTowards(_slider.value, health, _speedChange * Time.deltaTime); - не ошибка, но рекомендую поправить. Я бы заменил на Lerp. Он позволяет более точно контролировать время. Иначе на больших дельтах долго будет плавный бар догонять (что у вас на видео и видно). Только хорошо осознайте, за что отвечает каждый параметр. Каждый раз брать в качестве стартового значения текущее положение слайдера - не корректно. Нужно запомнить его положение на момент старта корутины и изменяя 3й параметр (обычно опираясь на время) от 0 до 1 мы смещаем выходное число от начального к конечному положению, где 0 - стартовое, а 1 - целевое значение.
  • ❤ 1
  • 🤔 1
More from @namlessmoth
  1. Mar 7, 2026Как сломать босса одним прокачанным навыком Причём первую заратану я победил точно так же,…
  2. Mar 3, 2026Наиграл уже 150+ часов и даже не прошел половину игры Мне капец как не везёт почти в каждо…
  3. Feb 17, 2026Один месяц подписки на впн Вдруг кому надо https://t.me/gruVPNbot?start=g_UZhunlWNfFC_2127…
  4. Feb 16, 2026оставлю тут, чтобы не потерять вам смотреть нельзя, это только для меня
  5. Feb 13, 2026Вчера сделал всего три задания и все три оказались не правильными 1) Задание: Проведите ре…
  6. Feb 12, 2026Оказалось что всё-таки можно сдавать несколько заданий за один раз. Я вчера сдал 7 заданий…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →