Продвинутый инвентарь персонажа

По многочисленным просьбам, представляем новую, улучшенную версию инвентаря персонажа. Ранее, мы публиковали бету в которой были реализованы только базовые функции, и присутствовали некоторые недочеты. На этот раз, основные функции получили свое развитие и оптимизацию, все найденные баги были устранены. Кроме того, добавлены новые возможности. Расширен список поддерживаемых размеров иконок. Теперь можно выбирать, сколько предметов выбросить из инвентаря, если предметов данного типа больше одного. Добавлена возможность установить лимит на предметы, например, чтобы аптечек больше десяти штук нельзя было положить в инвентарь. Добавлена функция, позволяющая упорядочить предметы.


За основу взят проект Инвентарь 2.0 [beta version]

Разберем основные изменения.

  1. Вместо отдельных изображений иконок, теперь, поддерживаются атласы.
  2. После перемещения иконки из инвентаря в мир, предмет не удаляется, а выбрасывается в указанную точку.
  3. Изменена логика поиска перекрытия иконок, сделано через UI рейкаст.
  4. Поддерживаются размеры иконок: 1х1, 2х1, 3х1, 1х2, 1х3, 2х2, 2х3, 3х2 (например, 100х100, 200х100 и т.п.). Для большинства игр, этого будет вполне достаточно.
  5. Лимит предмета. Устанавливается в настройках префаба этого предмета. Когда в инвентарь добавляется какой-либо предмет, делается проверка префаба и текущего количества в инвентаре.
  6. Использование предмета в указанном количестве, через скрипт (например, игрок применил аптечку).
  7. Добавление предмета в указанном количестве, через скрипт (например, игрок получил патроны за выполнение задания).
  8. Добавлена возможность упорядочить предметы.
  9. Добавлено меню выбора количества предметов для сброса.
  10. Общие улучшения и исправления ошибок.

Изменена иерархия объектов:

Продвинутый инвентарь персонажа

Достаточно перенести родительский объект в любой другой Canvas с которым вы работаете.

Все предметы, которые могут взаимодействовать с инвентарем, теперь должны храниться в отдельной папке в Resources. И на префабах этих объектов мы используем скрипт InventoryComponent:


Где определяем лимит для предмета, его спрайт, имя и размеры иконки.

Добавлен новый класс InventoryDrop, который предназначен для сброса предметов в мир. Он работает когда игрок вручную выбрасывает предмет или когда получает его, например, за задание, но в инвентаре не оказалось свободного места, либо достигнут лимит для этого типа предмета. Класс обязательный к использованию и цепляется на точку, которая будет рядом с персонажем игрока.

Проверка, открыт инвентарь или нет:

if(Inventory.isActive)
{
	//...
}

Использование предмета:

Inventory.UseItem("имя", количество);

Добавление предмета:

Inventory.AddItem("имя", количество);

Проверить наличие предмета:

if(Inventory.CheckItem("имя"))
{
	//...
}


Перед тем как использовать наш проект в своих играх, рекомендуем внимательно ознакомиться с демо и кодом скриптов.

Скачать проект:

Внимание! Посетители, находящиеся в группе Гости, не могут скачивать файлы.
Тестировалось на: Unity 5.6.1

Комментариев 33

Офлайн
Просто, и всё понятно спс!))) joy
Офлайн
Andrejus 1 июня 2017
Спасибо за отличную и понятную работу
Офлайн
Отсылка к сталкеру
Офлайн
Цитата: Кирилл Смирнов
Отсылка к сталкеру

ахахх
Офлайн
SleepyAsh 5 июня 2017
Немного не по теме, но хотелось бы по возможности больше уроков по созданию различных 2d врагов. Прыгающих там, стреляющих и тд.
Офлайн
SleepyAsh,
полностью согласен
Админ сделай уроки по созданию прыгающих,стреляющих,бегающих и летающих врагов было бы здорово
Офлайн
Очень хороший и приятный инвентарь,но у меня есть вопрос,как сделать сбор в ячейку одних предметов(Например денег,болтов),а других нет(Там 2 меча нельзя в одну ячейку сложить)
Онлайн
Light 14 июня 2017
Дмитрий Ксенофонтов, по логике инвентаря, объединяются предметы с одинаковыми именами, значит, чтобы два одинаковых по сути предмета, те-же мечи, не объединялись, то они должны иметь разные имена.
Офлайн
Light,
Благодарю.Но иметь 1000 и одно имя для одинаковых "Мечей" не очень.
Онлайн
Light 16 июня 2017
Дмитрий Ксенофонтов, что-то должно идентифицировать предметы, либо это id, либо имя - не имеет значения по сути. Если у тебя меч, допустим, "Пожиратель", то все мечи с таким идентификатором будут объединяться в один слот инвентаря. Если "Пожиратель" имеет какие-то прокаченые характиристики, например, силы удара. Соответственно, это уже другой предмет, к которому можно делать приписку типа "Пожиратель[p20]", такой предмет будет лежать отдельно в инвентаре.

Кроме того, не нужно создавать под каждый слегка измененный предмет, свой префаб, нужно просто изменить систему загрузки инвентаря, что при чтении идентификатора "Пожиратель[p20]" инвентарь загружал, иконку оригинала "Пожиратель" и добавлял в его характеристики, в данном случаи: +20 силы.
Офлайн
Light,
Как говорится - "дякую''
Офлайн
Light,
но тогда получается что если будет 2 меча с одинаковыми атрибутами то они соединятся )
Онлайн
Light 22 июня 2017
Андрей Пивень, если у них одинаковые идентификаторы, то да, так и должно быть.
Офлайн
Ark
Ark 25 июня 2017
А не подскажите какие части кода вырезать и что необходимо добавить если, у меня 2д проект и в нем нет предметов "на полу"?

То есть предметы либо на прямую кладутся в инвентарь, либо происходит взаимодействие двух окон инвентаря?
Онлайн
Light 25 июня 2017
Ark, как добавлять и использовать предметы напрямую, указано в статье.

А для взаимодействия двух окон, нужно писать отдельный скрипт, который будет отвечать за сундуки и врагов, где можно брать предметы.

Тут два варианта.
Написать такой скрипт самому, по образцу этого инвентаря.
Или можно обратиться ко мне в ЛС, договоримся.
Офлайн
Mari4og 25 августа 2017
Добрый день, Light. А нет ли "наработок" по смене одежды на персонаже? Причём через покупку во внутриигровом магазине, например?
Онлайн
Light 25 августа 2017
Mari4og, смена одежды в каком плане? Просто иконки перетащить в инвентаре или вместе с заменой модельки перса или ее частей?
Офлайн
Mari4og 26 августа 2017
С заменой частей преса, думаю... Ну вот есть у тебя персонаж с прической и одеждой по умолчанию, и есть внутриигровой магазин, который позволяет купить и сменить прическу и части одежды. Есть такой free asset "Character Customization" - я с этим не разбирался ещё, но предстоит - так вот некоторые говорят, что данный ассет гавно... Т.е. я хочу сказать, что вопрос не простой, и мне интересно - ваше мнение - насколько это сложно или просто?
Онлайн
Light 26 августа 2017
Mari4og, пока что я не занимался этим вопросом, может быть в будущем опубликую что нибудь на эту тему.
Офлайн
DEV742 18 сентября 2017
Все работает без проблем. Все, кроме кнопок. В стандартном 3д проекте, при использовании обычного first person character. Нужно несколько раз нажимать на кнопки сортировки и закрытия. При этом камера не блокируется никак. Тоесть я могу свободно смотреть по сторонам(это исправить не беда, но, может, дело в этом?)
Версия Юньки 2017.1.1f1
В демо сцене все ок, но мне кажется дело в неправильной работе с Character Controller.
Офлайн
DEV742 18 сентября 2017
DEV742,
Все решилось сменой обычного Character Controller на Rigidbody Character Controller.
Офлайн
HEJlbCOH 10 января 2018
Не могу понять какой скрипт отвечает за добавление айтемов в инвентарь
Онлайн
Light 10 января 2018
HEJlbCOH, сам скрипт инвентаря Inventory.
Офлайн
HEJlbCOH 11 января 2018
Light,
спасибо, а то просто как то не удобно когда только открытым инвентарем можно добавлять и выкидывать объекты
Онлайн
Light 11 января 2018
HEJlbCOH, если инвентарь открыт, то работают функции мышки. В закрытом состоянии предметы можно добавлять методом: Inventory.AddItem("имя", количество);
Офлайн
HEJlbCOH 11 января 2018
Цитата: Light
HEJlbCOH, если инвентарь открыт, то работают функции мышки. В закрытом состоянии предметы можно добавлять методом: Inventory.AddItem("имя", количество);

А имя как я понимаю объекта которого хотим подобрать?
Онлайн
Light 11 января 2018
HEJlbCOH, да, это префаб в Resources с классом InventoryComponent.
Офлайн
Graff 1 февраля 2018
А как добавить доп. поле, на подобии дропа. Тоесть если предмет перетащить на определенное место, он юзается? Никак не разберусь.
Онлайн
Light 1 февраля 2018
Graff, способ реализации, зависит от поставленных задач. Можем это обсудить в ЛС.
Офлайн
orkons 2 июня 2018
Как сделать использование из инвентаря? Хотя бы в общих чертах расскажите
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Дешевый хостинг
  • Яндекс.Метрика