2D Инвентарь в Unity #6 - легко

  Рет қаралды 14,251

Graphical Design

Graphical Design

Күн бұрын

В этом уроке мы начнем создавать 2Д инвентарь в Unity. В котором можно будет перемещать предметы, стакать их и сделаем визуальную часть.
• 2D Инвентарь в Unity -... - 1 часть
• 2D Инвентарь в Unity ... - 2 часть
• 2D Инвентарь в Unity ... - 3 часть
• 2D Инвентарь в Unity ... - 4 часть
• 2D Инвентарь в Unity ... - 5 часть
• 2D Инвентарь в Unity ... - 6 часть
/ graphicaldesignua - мой патреон для поддержки)
unity.com/ru - ссылка на Unity

Пікірлер: 106
@shaoshur6122
@shaoshur6122 3 жыл бұрын
просто 3 часа на одном дыхании. Ты лучший)
@YOURREST
@YOURREST 5 жыл бұрын
Посмотрел все 6-ть уроков по созданию Инвентаря. Я в шоке, как просто ты это объясняешь. Ты - превзошёл сам себя. Проделал титанический труд, и не сломался, а дошёл до конца. Я тебя люблю! [^_^] Ждём уроков по использованию этого Инвентаря в мини-игре с персонажем-викингом, подбор/выброс и применение предметов! Лайк от меня 100%
@АртемЛось-м2ш
@АртемЛось-м2ш 4 жыл бұрын
Просто прекрасные уроки!! Но пожалуйста, сделайте урок о том, как добавлять и выкидывать предметы из инвентаря. Так же можно сделать урок о том как использовать эти предметы. Например использовать из инвентаря зелье восстанавливающее здоровье. Это было бы великолепно.
@m1haliks
@m1haliks 4 жыл бұрын
2 Вопроса по инвентарю: 1. Как добавлять туда что либо? 2.Как удалять это что-то?
@shinyo69
@shinyo69 4 жыл бұрын
он вроде это в 3 или 4 уроке обьяснял но у меня не получилось)
@МаксимМальцев-ч7б
@МаксимМальцев-ч7б 3 жыл бұрын
как же хорошо, когда нормально шаришь в unity и c#. Просто бездумно всё списываешь, потом понимаешь логику механики, исправляешь ошибки и адаптируешь под свою игру. Новичкам сочувствую
@a.n.f.i.k
@a.n.f.i.k Жыл бұрын
0:33
@shinyo69
@shinyo69 4 жыл бұрын
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class Inventory : MonoBehaviour { public DataBase data; public List items = new List(); public GameObject gameObjShow; public GameObject InventoryMainObject; public int maxCount; public Camera cam; public EventSystem es; public int currentID; public ItemInventory currentItem; public RectTransform movingObject; public Vector3 offset; public GameObject backGround; public void Start() { if (items.Count == 0) { AddGraphics(); } } public void Update() { if (currentID != -1) { MoveObject(); } if (Input.GetKeyDown(KeyCode.E)) { backGround.SetActive(!backGround.activeSelf); if (backGround.activeSelf) { UpdateInventory(); } } } public void SearchForSameItem(ItemInventory item, int count) //stack items { for (int i = 0; i < maxCount; i++) { if (items[i].id == item.id) { if (items[0].count < 64) { items[i].count += count; if (items[i].count > 64) { count = items[i].count - 0; items[i].count = 64; } else { count = 0; i = maxCount; } } if (count > 0) { for (int i = 0; i < maxCount; i++) { if (items[i].id == 0) { AddItem(i, ItemInventory, count); i = maxCount; } } } } } } public void AddItem(int id, Item item, int count) { items[id].id = item.id; items[id].count = count; items[id].itemGameObj.GetComponent().sprite = item.img; if (count > 1 && invItem.id != 0) { items[id].itemGameObj.GetCompoentInChildren().text = count.ToString(); } else { items[id].itemGameObj.GetCompoentInChildren().text = " "; } } public void AddInventoryItem(int id, ItemInventory invItem) { items[id].id = invItem.id; items[id].count = invItem.count; items[id].itemGameObj.GetComponent().sprite = data.items[invItem.id].img; if (invItem.count > 1 && invItem.id != 0) { items[id].itemGameObj.GetComponentInChildren().text = invItem.count.ToString(); } else { items[id].itemGameObj.GetComponentInChildren().text = ""; } } public void AddGraphics() { for (int i = 0; i < maxCount; i++) { GameObject newItem = Instantiate(gameObjShow, InventoryMainObject.transform) as GameObject; newItem.name = i.ToString(); ItemInventory ii = new ItemInventory(); ii.itemGameObj = newItem; RectTransform rt = newItem.GetComponent(); rt.localPosition = new Vector3(0, 0, 0); rt.localScale = new Vector3(1, 1, 1); newItem.GetComponentInChildren().localScale = new Vector3(1, 1, 1); Button tempButton = newItem.GetComponent(); tempButton.onClick.AddListener(delegate { SelectObject(); }); items.Add(ii); } } public void UpdateInventory() { for (int i = 0; i < maxCount; i++) { if (items[i].id != 0 && items[i].count > 1) { items[i].itemGameObj.GetComponentInChildren().text = items[i].count.ToString(); } else { items[i].itemGameObj.GetComponentInChildren().text = ""; } items[i].itemGameObj.GetComponent().sprite = data.items[items[i].id].img; } } public void SelectObject() { if (currentID == -1) { currentID = int.Parse(es.currentSelectedGameObject.name); currentItem = CopyInventoryItem(items[currentID]); movingObject.gameObject.SetActive(true); movingObject.GetComponent().sprite = data.items[currentItem.id].img; AddItem(currentID, data.items[0], 0); } else { ItemInventory II = items[int.Parse(es.currentSelectedGameObject.name)]; if (currentItem.id != II.id) { AddInventoryItem(currentID, II); AddInventoryItem(int.Parse(es.currentSelectGameObject.name), currentItem); } else { if (II.count + currentItem.count
@OLDbespreDEL
@OLDbespreDEL Жыл бұрын
public void SearchForSameItem(ItemInventory item, int count) со скобеами накосячил
@GerushGuitarChannel
@GerushGuitarChannel 4 жыл бұрын
Спасибо за уроки! Из недочетов - стакаются пустые ячейки при запуске сцены с активным канвасом, в них появляется ноль (и без рандома тоже стакаются). Если кнопкой закрыть и еще раз открыть инвентарь, вообще ничего не стакается и не перетаскивается, в общем больше ничего нельзя изменить. Может я что-то упустил? Подскажите какие-нибудь варианты решения новичку)
@Khadgar-x5s
@Khadgar-x5s 4 жыл бұрын
А будет ли продолжение по удалению и добавлению предметов?
@НикитаМарсаков-ю7з
@НикитаМарсаков-ю7з 4 жыл бұрын
Подскажите пожалуйста, как добавлять и убирать предметы из инвентаря, вы так и не сделали уроки по этому
@lordtwilight1224
@lordtwilight1224 4 жыл бұрын
Добрый вечер, как сделать, чтобы при клике предмет возвращался в ту же ячейку? подправил ваш код if (currentID != -1) { MoveObject(); } else{ UpdateInventory(); } для обновления ячеек.
@nomilon3770
@nomilon3770 2 жыл бұрын
Спасибо за туториал
@KrkzYBr
@KrkzYBr 4 жыл бұрын
Я могу двигать и стакать пустые ячейки, в чём проблемма может быть?
@darkstormheute
@darkstormheute 4 жыл бұрын
Вообщем, спасибо за курс, но у меня вопрос - Как сделать сундук? типо подходишь, выскакивает меню инвентаря сундука, и как его сделать (меню сундука?)
@GeniusGS1
@GeniusGS1 6 ай бұрын
привет что если не появляются предметы при запуске игры помоги пожалуйста
@morkovkazet666
@morkovkazet666 3 жыл бұрын
Привет снова, у меня вопрос, если сможешь ответить буду очень рад. Как мне сделать, что б добавить в инвентарь предмети иного класса? Т.е хочу добавлять не только ресурурси, а и например кирку, которая будет иметь свои характеристики. Будет очень приятно, если ответишь, а то голову ломаю, пока реализовать не получается. А так, добавил к тому коду твоему, все что необходимо, получение ресурсов и увеличение инвентаря.
@Pirozho
@Pirozho 5 жыл бұрын
Ты и правда молодец проделал колосальную работу.
@graphicaldesign2776
@graphicaldesign2776 5 жыл бұрын
Спасибо
@alikursak7181
@alikursak7181 5 жыл бұрын
В этом инвентаре пустые элементы тоже стакаются
@graphicaldesign2776
@graphicaldesign2776 5 жыл бұрын
неа
@alikursak7181
@alikursak7181 5 жыл бұрын
@@graphicaldesign2776 Я все проверил. Они стакаются! Если делать с тестовым заполнением в старте, то сначала у пустых ячеек нет текста, но если их стакнуть, то текст появится. Исчезает только после закрытия и открытия инвентаря. Если без теста взять пустой элемент и стакнуть его с собой же, то отобразится 0. :(
@graphicaldesign2776
@graphicaldesign2776 5 жыл бұрын
Так, это со своим инвентарем и подбором предметов, или с рандомом?
@alikursak7181
@alikursak7181 5 жыл бұрын
@@graphicaldesign2776 Код из Ваших видео. Все сделано под копирку. Пробовал заполнение рандомом (for (int i = 0; i < maxCount; i++) //тест { AddItem(i, data.items[Random.Range(0, data.items.Count)], Random.Range(1, 99)); } в этом случае пустому элементу тоже присваивается рандомное число, но оно не отображается до тех пор, пока их не стакнуть. После стака всплывает текст и исчезает только после открытия инвентаря заново. Если тестом не пользоваться, то инвентарь заполняется пустыми элементами и их количество в одной ячейке = 0. После их стака всплывает текст ( 0 ). Я решил эту проблему добавив этот код в метод Update for (int i = 0; i < maxCount; i++) { if (items[i].count > 1 && items[i].id != 0) { items[i].itemGameObj.GetComponentInChildren().text = items[i].count.ToString(); } else { items[i].itemGameObj.GetComponentInChildren().text = ""; } } И еще вопрос. У Вас где нибудь вызывается метод SearchForSameItems?
@graphicaldesign2776
@graphicaldesign2776 5 жыл бұрын
@@alikursak7181 Это может вредничать рандом, так как я его сделал чисто для теста. Без него, никаких стаков не должно быть, так как инвентарь по дэфолту пустой.
@АндрійМельник-я5и
@АндрійМельник-я5и 5 жыл бұрын
Спасибо!
@morkovkazet666
@morkovkazet666 3 жыл бұрын
Хорошая работа, вот появляется вопрос, почему не скинул в конце весь код? Мог сэкономить много времени для тех, кто просто хочет затестить.
@graphicaldesign2776
@graphicaldesign2776 3 жыл бұрын
Не захотел
@morkovkazet666
@morkovkazet666 3 жыл бұрын
@@graphicaldesign2776 Все получилось, Большое спасибо. вот есть одна проблемка. Вдруг сможете подсказать. Я хочу, что б количество клеток менялось. Но они генерируются всего лишь 1 раз при старте. Если я хочу увеличить их количество то мне придется переходить на динамические maxCount, или можно запустить еще раз прогу, только с меншим количеством(например еще 5 ячеек). или они сгенерируются сверху прежних?
@DanyaTangens
@DanyaTangens 2 жыл бұрын
@@morkovkazet666 Вдруг кому понадобится еще в будущем. В AddGraphics просто надо сделать проверку на текущее количество Items и на maxCount, если второго больше, то досоздавать их. Примерно так же будет работать и удаление
@Cyber_soap
@Cyber_soap 2 жыл бұрын
А где описывается SearchForSameFrame?
@НикитаСолоненко-р5ы
@НикитаСолоненко-р5ы 4 ай бұрын
Здравствуйте!! Вопрос, не работает кнопка I при нажатии, если в Canvas есть еще объект, который вызывает свой метод Update, может ли это быть связано? Потому что в плане кодинга все логично, как у вас, background у camera содержит Canvas
@НикитаМарсаков-ю7з
@НикитаМарсаков-ю7з 4 жыл бұрын
Предположим это нормально, что предмет сам к себе плюсуется
@МарБроннер
@МарБроннер 5 жыл бұрын
Я тебе очень благодарен за такие уроки! Продолжай также. Удачи!!
@InFineTy8
@InFineTy8 Жыл бұрын
вопрос, я сделал инвентарь по вашему гайду, только есть одна ошибка, я могу брать пустые объекты и их стакать, помогите исправить)
@custybeam
@custybeam 3 жыл бұрын
Здравствуйте! Хотел бы спросить, как можно реализовать в этой системе инвентаря такие вещи как: сундук, крафт, печки и т.п. Я уже сделал систему инвентаря, она потрясающая! Но еще мне не помешало бы добавить вещи сказаные мною ранеё, Спасибо! Буду очень благодарен!
@brainet.
@brainet. 3 жыл бұрын
А как сохранить параметры инвентаря при выходе из игры?
@TheKrivetko
@TheKrivetko 3 жыл бұрын
Не эксперт, но предполагаю при сохранении, записывать список items из скрипта инвентаря в файл в папке игры, а при загрузке заполнять из этого же файла
@n1k1zoomi
@n1k1zoomi 3 жыл бұрын
PlayerPrefs
@_SGS_
@_SGS_ 2 жыл бұрын
Помогите пожалуйста как можно обратиться к конкретному предмету и его переменой count, чтобы потом ее изменять
@Peki2910
@Peki2910 5 жыл бұрын
извините а что делать если пишет ошибку=Operator `+' cannot be applied to operands of type `int' and `ItemInventory'
@vodnik_95
@vodnik_95 3 жыл бұрын
А это нормально что я могу взять пустую ячейку?
@sedmoy_
@sedmoy_ 8 ай бұрын
почему можно переместить пустую ячейку!!??? почему это не кого не смущает!!!???
@swixs1
@swixs1 3 жыл бұрын
а что делать если например в инвентаре у тебя предмет и тебе надо прописать к нему характеристики, ибо я делал до инвентаря скрипт с характеристиками но вставлялося в датабаз имено фотки а не присеты
@AnatolyGolovanov
@AnatolyGolovanov Ай бұрын
лайкос от души, много интересного узнал
@4esterNightLive
@4esterNightLive Жыл бұрын
огромное спасибо, мужик! подскажи пожалуйста как изменить получившийся инвентарь чтобы он был как в диабло или таркове
@ICECREAM-sy4dq
@ICECREAM-sy4dq 4 жыл бұрын
Может будешь дальше работать над улучшением инвентаря?
@Eaglet12IQ
@Eaglet12IQ 4 жыл бұрын
Согласен!
@SPORTCHEER
@SPORTCHEER 4 жыл бұрын
Поддерживаю!
@shinyo69
@shinyo69 4 жыл бұрын
Если кто-то написал скрипт Inventory и у него работает , скиньте ссылку пожалуйста или в ответе напишите. я всё написал, окно для инвентаря создал, всё как в видео. вставлял скрипт этот и в новый проект (мало ли, с другими скриптами из проекта конфликтует) всё равно не работает
@tracersteam1267
@tracersteam1267 Жыл бұрын
а в проекте когда скрипт перетянул в него вставлял обьекти?
@dumzed7871
@dumzed7871 5 жыл бұрын
А сохранение после вихода из игри?
@graphicaldesign2776
@graphicaldesign2776 5 жыл бұрын
PlayerPrefs это все решает) со временем и это сделаю
@coffecup7638
@coffecup7638 3 жыл бұрын
@@graphicaldesign2776 всё ещё жду
@Khadgar-x5s
@Khadgar-x5s 4 жыл бұрын
Отличные уроки, спасибо!
@Аккаунт-в7ы
@Аккаунт-в7ы 4 жыл бұрын
Помогите, пожалуйста. У меня во время перемещения объекта онуляется кол-во этого предмета.
@FastAbsolute
@FastAbsolute Жыл бұрын
Это нормально
@dimasource8414
@dimasource8414 4 жыл бұрын
Кто решил проблему с подбираниям предмета в инвентарь?
@НикитаМарсаков-ю7з
@НикитаМарсаков-ю7з 4 жыл бұрын
Такой проблемы нет, так как автор про это урок вообще не сделал
@sally4564
@sally4564 3 жыл бұрын
Автор сам скрипты не пишет,а только переводит,значит забыл один урок перевести =))) ищи первоисточник и там смотри
@objectdoom3248
@objectdoom3248 Жыл бұрын
Все круто, где надо передалал по себя. Хороший урок. Вот только не хватает 7 урока, где уже непосредственно будет реализация работы с инвентарем. Пытаюсь сам, но пока буксую, не знаю с какой стороны подойти.
@len1v4ik-44
@len1v4ik-44 3 жыл бұрын
Ребят кто знает как модефицировать скрипт так чтобы если какого то предмета вдруг становится 0 то что бы ячейка становилась пустой?
@DanyaTangens
@DanyaTangens 2 жыл бұрын
if (items[i].count == 0) { AddItem(i, DataBase.items[0], 0); }
@tracersteam1267
@tracersteam1267 Жыл бұрын
@@DanyaTangens а куда ето писать? в апдейт?
@slincake
@slincake 10 ай бұрын
С фразы "Исправляли все ошибки на месте" выпал просто🤣
@эээээ-л5ж
@эээээ-л5ж 4 жыл бұрын
А как сделать так чтобы при старте игры инвентарь очищался?
@ЕгорГавриленко-е5з
@ЕгорГавриленко-е5з 4 жыл бұрын
в void Start напиши чтоб все елементы не появлялись или сделай destroy для каждой ячейки
@nepochat
@nepochat 5 жыл бұрын
Объяснение 10/10. Мужик, а у тебя есть какие-то свои готовые игры?
@graphicaldesign2776
@graphicaldesign2776 5 жыл бұрын
полностью собственная игра появится в августе)
@lordtwilight1224
@lordtwilight1224 4 жыл бұрын
@@graphicaldesign2776 уже август прошел. как дела с проектом? можете подсказать где поискать толковую инфу, как выложить в стеам?
@EgorIgnakhin
@EgorIgnakhin 4 жыл бұрын
Привет , спасибо за наработки, скажи пожалуйста почему когда я нажимаю на спрайт на его месте появляется пустой слот, объект исчезает и не появляется пока я не тыкну в другой любой слот. Анимация перетаскивания не работает. и еще метод SearchForSameItem у меня нигде не задействован, я что-то упустил?
@EgorIgnakhin
@EgorIgnakhin 4 жыл бұрын
и да, как обратится к этим предметам? они же создаются, например мне нужно узнать есть ли у меня ресурсы на постройку дома(дерево камень гвозди)?
@TheKrivetko
@TheKrivetko 3 жыл бұрын
Может кому еще поможет. У вас скорее-всего камера имеет не нулевую z координату. Нужно ее прибавить к pos.z в MoveObject()
@Дельфинчик-ъ6в
@Дельфинчик-ъ6в 3 жыл бұрын
​@@TheKrivetko У меня это не работает, если даже саму камеру перенести координату z на 0.
@TheKrivetko
@TheKrivetko 3 жыл бұрын
@@Дельфинчик-ъ6в само обнуление z вряд-ли поможет, скорее-всего она имеет не z = 0 глобальную, из-за объектов к которым прикреплена. Просто попробуй пересчитать в moveobject. Ну и все ещё остаётся вариант, что у тебя не мой случай и нужно капать куда-то ещё
@Дельфинчик-ъ6в
@Дельфинчик-ъ6в 3 жыл бұрын
@@TheKrivetko Благодарю за информацию
@channelofmaks9505
@channelofmaks9505 4 жыл бұрын
у меня баг я нажимаю на пустую клетку 2-3 раза и под клеткой число например 42, можно ли это поправить? Если да, то подскажите пожалуйста.
@РоманенкоПавел-д9к
@РоманенкоПавел-д9к 3 жыл бұрын
я просто подописывал дополнительных updateInventory и все заработало
@ЮрийКриворучко-й3э
@ЮрийКриворучко-й3э 4 жыл бұрын
привет у меня появилса один баг, остаток предмета когда стакаю появляетса в минусовом значении, в чом может быть причина?
@graphicaldesign2776
@graphicaldesign2776 4 жыл бұрын
Видимо, не ограничил уход предметов в минус
@КВ-11ДанилоКухта
@КВ-11ДанилоКухта 4 жыл бұрын
4:38 Как это сделать?
@dimasource8414
@dimasource8414 4 жыл бұрын
+
@КВ-11ДанилоКухта
@КВ-11ДанилоКухта 4 жыл бұрын
@@dimasource8414 ну у меня более менее что-то получилось, но информация про количество предмета зразу не обновляется.
@НикитаМарсаков-ю7з
@НикитаМарсаков-ю7з 4 жыл бұрын
@@КВ-11ДанилоКухта а как ты сделал, скажи пожалуйста
@WrongLab
@WrongLab Жыл бұрын
Комментарии старше адольфа
@Polmorelo
@Polmorelo 5 жыл бұрын
ты очень хорошо объясняешь,лайкусек тебе
@ВолодимирКолягін
@ВолодимирКолягін 3 жыл бұрын
Поскольку видео аж 6 то я 6 раз камбекнулся назад и поставил 6 дизлайков. Как показывает опыт на ютюбе чем больше разделен урок те х .... е результат будет, а может и вообще работать не будет. Для такого говенного инвентаря слишком много кода и возни, тем более нет ни сохранения ни вытягивания, непонятно вообще что ним делать.
@n1k1zoomi
@n1k1zoomi 3 жыл бұрын
Было же сказано, что урок не для новичков, тебе показали как сделать инвентарь, теперь своими знаниями делай сохранения и встраивай в свою игру
@DanyaTangens
@DanyaTangens 2 жыл бұрын
Ой, бедняге, который привык брать готовый код и просто вставлять в свой проект, не сделали функционал какой он хотел( Текущая реализация очень масштабируема, даже человек с базовыми знаниями сможет разобраться что и куда добавить
@pervertin
@pervertin 4 жыл бұрын
А можно добавлять предметы из другой сцены?
2D Инвентарь в Unity - легко
13:10
Graphical Design
Рет қаралды 54 М.
Стрельба по направлению клика в Unity
12:23
Graphical Design
Рет қаралды 25 М.
规则,在门里生存,出来~死亡
00:33
落魄的王子
Рет қаралды 26 МЛН
ДЕНЬ УЧИТЕЛЯ В ШКОЛЕ
01:00
SIDELNIKOVVV
Рет қаралды 3 МЛН
Переход анимации персонажа - Unity легко
14:12
Лестницы в 2D платформере - Unity легко
7:44
Graphical Design
Рет қаралды 10 М.
ИИ врага / AI enemy в Unity
12:11
Graphical Design
Рет қаралды 14 М.
Начальная кат сцена / Cut scene - Unity легко
14:22
Сохранение выбора персонажа в Unity
8:31
Graphical Design
Рет қаралды 5 М.
Как подобрать/бросить предмет в Unity 2d
17:57
Диалоги в Unity - легко
25:46
Graphical Design
Рет қаралды 33 М.
规则,在门里生存,出来~死亡
00:33
落魄的王子
Рет қаралды 26 МЛН