Система здоровья из ячеек/ Health system в Unity

  Рет қаралды 18,241

Graphical Design

Graphical Design

Күн бұрын

В этом видео я покажу еще одну систему отображения здоровья в Unity, в которой будет возможность отображать оставшееся здоровье в виде объектов, а так-же будут отображаться "пустые" ячейки здоровья.
• Health bar / Шкала здо... - видео с шкалой здоровья
/ graphicaldesignua - мой патреон для поддержки)
unity.com/ru - ссылка на Unity

Пікірлер: 80
@bur-mq1mq
@bur-mq1mq 5 жыл бұрын
Не, ну это лайк!
@ПавелКрасавчик-т7м
@ПавелКрасавчик-т7м 5 жыл бұрын
Каждый новый день - новый ролик! Круто!
@icestam4067
@icestam4067 5 жыл бұрын
Все оказалось намного легче, чем я думал. Спасибо!
@МарБроннер
@МарБроннер 5 жыл бұрын
Спасибо, ты крут!!!
@timofei9676
@timofei9676 5 жыл бұрын
Спасибо.Лайк)
@mrminecrafter3829
@mrminecrafter3829 3 жыл бұрын
Спасибо большое автору !!!
@vektorianone4910
@vektorianone4910 4 жыл бұрын
Спасибо!
@ТёмныйРыцарь-ь8г
@ТёмныйРыцарь-ь8г Жыл бұрын
Еще можно сделать систему, где будет еще половинка контейнера, изменив скрипт на: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class PlayerHealth : MonoBehaviour { public int health; public int numberOfLives; public Image[] lives; public Sprite fullLive; public Sprite emptyLive; public Sprite halfLive; //половинка жизни нужно добавить спрайт половинки жизни сюда void Update() { for (int i = 0; i < lives.Length; i++) { if(health > numberOfLives * 2) { health = numberOfLives * 2; } if (i * 2 < health - 1) { lives[i].sprite = fullLive; } else if (i * 2 == health - 1) { lives[i].sprite = halfLive; } else { lives[i].sprite = emptyLive; } if (i < numberOfLives) { lives[i].enabled = true; } else { lives[i].enabled = false; } } } }
@zuba_tv
@zuba_tv 9 ай бұрын
А как сделать допустим, чтоб когда подобрал яд, сердечки становились зеленные на время пока действует яд
@maximgevel5981
@maximgevel5981 4 жыл бұрын
очень хорошо объясняешь, спасибо 💙❤️
@RazvlekaykaBY
@RazvlekaykaBY 7 ай бұрын
Вот только когда запускается цикл, то все жизни мгновенно улетают в 0.
@mrminecrafter3829
@mrminecrafter3829 3 жыл бұрын
Крутое видео
@mrminecrafter3829
@mrminecrafter3829 3 жыл бұрын
Топ видео
@freizef2237
@freizef2237 5 жыл бұрын
Ты самый лучший не покидай нас пж
@samuraiji6522
@samuraiji6522 2 жыл бұрын
Можешь пожалуйста помочь? Вроде все работает если менять параметр к окне скрипта, но в самой игре, когда зомби бьёт меня ничего не меняется, хотя по сути health меняется. Не понимаю почему
@hemmikotlin2589
@hemmikotlin2589 2 жыл бұрын
Круто, спасибо большое, только хотел спросить, можно как можно решить проблему, я сделал подбор жизней, но получается так что к данной системе здоровья не могу привязать с чем сравнивать, сейчас объясню, у меня есть объект который пополняет жизни, когда игрок его подбирает соответственно. но получается такая ситуация что игрок поднимает пополнение жизней даже тогда когда жизни полные, я пробовал к данной системе здоровья привязать сравнение если жизней меньше максимума на данный уровень то только тогда поднимать пополнение жизней , но ничего не выходит
@user-bi4vm1ru1f
@user-bi4vm1ru1f 4 жыл бұрын
Замечательный учебный материал, мне удобней всего по нему учиться. Только в подаче материала есть пробел. Уже несколько дней ломаю голову, как эту систему здоровья сочетать с нанесением урона от касания шипов. Не могу никак сослаться на ХП в HealthSystem и поменять его значение. Unity пишет, An object reference is required for non-static field, method, хоть она и public. Сейчас я сделал урон от шипов в виде надписи в консоли при коллизии. Как снимать ХП? Памагити!
@эээээ-л5ж
@эээээ-л5ж 4 жыл бұрын
Можешь пожалуйста сделать видео про систему здоровья шкалы. )
@Heartofglass920
@Heartofglass920 4 жыл бұрын
Привет, от чего может быть ошибка? (Assets\Scripts\Health.cs(27,35): error CS1061: 'Image[]' does not contain a definition for 'Lenght' and no accessible extension method 'Lenght' accepting a first argument of type 'Image[]' could be found (are you missing a using directive or an assembly reference?)
@nonurukkhai2095
@nonurukkhai2095 4 жыл бұрын
Ты в самом начале писал using UnityEngine.UI
@meruertmautenbaeva4230
@meruertmautenbaeva4230 4 жыл бұрын
Решил??????
@armenhovhannisyan7204
@armenhovhannisyan7204 4 жыл бұрын
@@meruertmautenbaeva4230 просто надо быть внимательнее, там вы написали ''Lenght'', а надо ''Length' '
@jackbelk
@jackbelk 2 жыл бұрын
абоба
@ЄвгенМузика-к5д
@ЄвгенМузика-к5д 4 жыл бұрын
у вас есть видео о том, как реализовать препятствие/врага, при контакте с которым отнимались жизни?
@omgtagg
@omgtagg 4 жыл бұрын
Ну я могу помочь
@sembarinbom620
@sembarinbom620 4 жыл бұрын
@@omgtagg был бы очень признателен тебе если бы помог
@ПавелКурзо
@ПавелКурзо 4 жыл бұрын
@@omgtagg привет, можешь помочь?
@omgtagg
@omgtagg 4 жыл бұрын
@@ПавелКурзо Да могу
@jackbelk
@jackbelk 2 жыл бұрын
Привет, @AMAZON. У тебя есть Дискорд, или где ещё можно связаться? Хотелось бы, чтобы и вы помогли мне
@zuba_tv
@zuba_tv 9 ай бұрын
Я не понимаю как работает этот цикл, обьясните пж
@igorvolodin7134
@igorvolodin7134 4 жыл бұрын
Не могу перетащить картинки в массив Live. Инспектор с Character переключается на картинки. Помогите, плз.
@shamonalaga1
@shamonalaga1 4 жыл бұрын
На character в левом верхнем углу замок есть, нажми и перетаскивай
@ビターリ
@ビターリ 3 жыл бұрын
У меня есть форма сердца в формате obj(из magicavoxel) и как этого объекта сделать систему здоровья?
@T1m0the0S
@T1m0the0S 2 жыл бұрын
Всё ничего, но если у нас 1 деление не равняется 1 жизни, что если есть промежуточные деления? Жёлтый, синий?
@rusipotam
@rusipotam 5 жыл бұрын
Я ещё не проверял, но вот вопрос Можно ли спавнить эти точки/сердечки неограниченное количество раз из префабов с изменением координат? Из кода нужно будет вызвать префаб и изменить его компонент трансформ, да?
@graphicaldesign2776
@graphicaldesign2776 5 жыл бұрын
Теоретически, да)
@ЛитвинМихайло-к7и
@ЛитвинМихайло-к7и Жыл бұрын
подскажите почему не отображается вкладка ліве в юнити? public Image[] lives;
@МаксимТрифонов-т8ь
@МаксимТрифонов-т8ь 4 жыл бұрын
Дружище, немного подробнее бы про цикл. А то не совсем понятно(( К примеру что такое вообще этот i и приходится самому думать, гадать. Это цикл чтобы жизни не выходили за предел? Или чтобы просто активировать и дезактивировать ячейки в массиве? Помоги плиз вникнуть(( Игру делаю
@sembarinbom620
@sembarinbom620 4 жыл бұрын
я конечно всё понял, но не понял как сделать чтоб срабатывало при получении урона. а точнее что нужно изменить или где нужно дописать.
@МихаилЩёголев-щ9я
@МихаилЩёголев-щ9я 4 жыл бұрын
ну я вписал в тот скрипт где игрок получает урон
@michaelmichael8602
@michaelmichael8602 4 жыл бұрын
@@МихаилЩёголев-щ9я можешь скинуть скрипт?
@МихаилЩёголев-щ9я
@МихаилЩёголев-щ9я 4 жыл бұрын
а как на это повесить анимацию
@tn2373
@tn2373 4 жыл бұрын
Как делать урон от врага чтоб одно сердце исчезл???
@sembarinbom620
@sembarinbom620 4 жыл бұрын
Вот мне тоже это интересно
@ymts_vladyslav3707
@ymts_vladyslav3707 4 жыл бұрын
Нужно сердца запихнуть в grid layout group и тогда между ними будет четкая дистанция ( создал пустой обьект , добавил ему компонент grid layout group). Для хп это делают ВСЕ разработчики , но автор сделал это просто руками, за что надо бить . Далее ты создаешь скрипт для grid layout group например HealthManager в котором есть singleton (указатель проще сказать на этот же обьект, посмотри уроки об архитектуре у кого то) и называешь его допустим current ; масив обьектов сердец , которые ты инициализируешь через цикл с вызовом GetChild(int index) при старте(важно чтобы сердца были дочерними к обьекту grid layout group иначе оно просто не найдет эти дочерние обьекты). добавляешь там методы допустим Heal() или RemoveHealth() в которых ты либо добавляешь обьект через instantiate() или уничтожаешь через Deastroy(). Теперь ты можешь из любого другого скрипта написать допустим HealthManager.current.Heal(1) или HealthManager.current.RemoveHealth(1). using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class HealthContainer : MonoBehaviour { public static HealthContainer current; [SerializeField] private Image[] hearts; void Awake() { current = this; hearts = new Image[transform.childCount]; } void Start() { for(int i=0 ; i < transform.childCount;i++) hearts[i] = transform.GetChild(i).GetComponent(); } void RemoveHealth(int number) { for(int i = 0; i < number;i++) GameObject.Destroy(hearts[0].gameObject); } void AddHealth(int number) { for(int i = 0; i < number;i++) GameObject.Instantiate(hearts[0].gameObject); } }
@ymts_vladyslav3707
@ymts_vladyslav3707 4 жыл бұрын
Можно даже не масив , а лист сделать из сердец и т.д вообще как бы не важно , я структуру кода приблизительно написал дальше можно дополнить ее
@syliix0
@syliix0 3 жыл бұрын
@@ymts_vladyslav3707 чувак почему скрипт не вставляется из за того что static healthcontainer к названию скрипта привязался
@ymts_vladyslav3707
@ymts_vladyslav3707 3 жыл бұрын
​@@syliix0 он обязан вставляться , потому что этот класс наследуется от MonoBehaviour. Просто 1)создай пустой скрипт с названием "HealthContainer", 2)сотри всё что там написано, 3) вставь мой код (он не идеальный , но для начинающих сойдет) , 4)возьми этот файл "HealthContainer" и перетяни на любой пустой объект (empty object) , он должен легко вставится, если ты об этом
@crnkshaft
@crnkshaft 5 жыл бұрын
Норм контент, а просмотров мало
@michaelmichael8602
@michaelmichael8602 4 жыл бұрын
просто наверно не так много людей интересуется unity
@crnkshaft
@crnkshaft 4 жыл бұрын
@@michaelmichael8602 ну да, даже я перестал, в механику ушел (2х колесная техника)
@crnkshaft
@crnkshaft 3 жыл бұрын
@@manyakasia4271 Нет, бл*ть в виртуале
@Geva265
@Geva265 3 жыл бұрын
Как использовать переменную health из другого скрипта этого же объекта? Например есть enemy, у него в одном скрипте есть health, и в этом скрипте есть эта же переменная, вот как их типа синхронизировать? Тот же момент и с игроком.
@userszxvbn
@userszxvbn Жыл бұрын
разобрался?
@Ananasgavauskuy
@Ananasgavauskuy 5 жыл бұрын
3:39
@vektorianone4910
@vektorianone4910 4 жыл бұрын
А кто-нибудь знает как проще всего сделать задержку,чтобы сердечки появлялись и исчезали плавно?
@vektorianone4910
@vektorianone4910 3 жыл бұрын
Уже разобрался, это делается с помошью корутин!
@lordgamesgamedev
@lordgamesgamedev 3 жыл бұрын
@@vektorianone4910 Нифига ты 3 месяца искал информацию
@КРЯКВА-с5в
@КРЯКВА-с5в 5 жыл бұрын
Всё вроде как работает, если изменять переменную через инспектор, но если сделать систему повреждений в void OnTriggerEnter2D, и в самом методе изменять переменную, то она по каким-то неясным причинам не изменяется.
@graphicaldesign2776
@graphicaldesign2776 5 жыл бұрын
немного непонятно)
@КРЯКВА-с5в
@КРЯКВА-с5в 5 жыл бұрын
@@graphicaldesign2776, часть кода: Void OnTriggerEnter2D (Collider other) { health -=1; } Примерно так, но health почему то не меняется при вхождении в триггер, хотя в тоже время другой скрипт, имеющий только этот метод работает.
@pingvin4ik571
@pingvin4ik571 4 жыл бұрын
@@КРЯКВА-с5в ты нашёл ответ ?
@КРЯКВА-с5в
@КРЯКВА-с5в 4 жыл бұрын
@@pingvin4ik571 да там нужно обращаться через скрипт на переменные другого скрипта, тогда будет работать
@ПавелКурзо
@ПавелКурзо 4 жыл бұрын
@@КРЯКВА-с5в привет, можешь помочь?
@vladimirmalin8044
@vladimirmalin8044 4 жыл бұрын
Привет, классные видеоуроки! Сделал по твоему видео жизни игроку, но возникла проблема. Как теперь сделать , чтобы все это срабатывало при получении урона? Делал вес по твоему уроку и далее дописал в скрипте у героя вот такой скрипт: void OnTriggerEnter2D(Collider2D other) { HealthPoint health = other.GetComponent(); if (other.tag == "enemy") { health.health -= 1; } } Но ничего не работает( помоги, пожалуйста
@s1ko4a86
@s1ko4a86 4 жыл бұрын
health = health - 1; Вместо health.health - 1; попробуй
@burevestn1k816
@burevestn1k816 4 жыл бұрын
private void OnTriggerEnter2D(Collider2D other) { if (other.tag.Equals("Enemy")) { health--; } }
@sembarinbom620
@sembarinbom620 4 жыл бұрын
Ребята нужна помощь!!! я решил сделать чтоб хп забирались по тэгу. но вот проблема хп не забираются. галки стоят, тэги стоят, коллайдеры у всех есть. вот сам скрипт. private void OnColliderEnter2D(Collision2D сollision) { if (сollision.collider.tag == "Yron") { health -= 1; } } мне кажется что идёт обращение не к объекту , к игроку. если моя мысль верна то помогите сделать обращение к другому объекту. Заранее огромное спасибо за помощь.
@tomasgammister5776
@tomasgammister5776 3 жыл бұрын
Цикл в апдейте ? Зачем учишь такому новичков ? ))
Имитация 2Д освещения в Unity
5:47
Graphical Design
Рет қаралды 9 М.
Game Over Screen Unity Tutorial
14:35
MoreBBlakeyyy
Рет қаралды 49 М.
Как Ходили родители в ШКОЛУ!
0:49
Family Box
Рет қаралды 2,3 МЛН
УЛИЧНЫЕ МУЗЫКАНТЫ В СОЧИ 🤘🏻
0:33
РОК ЗАВОД
Рет қаралды 7 МЛН
ССЫЛКА НА ИГРУ В КОММЕНТАХ #shorts
0:36
Паша Осадчий
Рет қаралды 8 МЛН
ИИ врага "Страж" / AI Enemy - Unity легко
17:54
Graphical Design
Рет қаралды 49 М.
Начальная кат сцена / Cut scene - Unity легко
14:22
Сбор и накапливание кристаллов в Unity
8:18
Graphical Design
Рет қаралды 11 М.
Easy Enemy Health Bars in Unity
9:25
BMo
Рет қаралды 59 М.
Improve your Platformer’s Jump (and Wall Jump) | Unity
8:12
Dawnosaur
Рет қаралды 130 М.
Экран загрузки / Loading screen  -  Unity легко
15:17
Graphical Design
Рет қаралды 28 М.
Всё про корутины в Unity 3D
13:18
Emerald Powder
Рет қаралды 104 М.
Как Ходили родители в ШКОЛУ!
0:49
Family Box
Рет қаралды 2,3 МЛН