Полезное

Мы Вконтакте

Discord канал

#
1 ... 89101112
След.
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 23
Всем привет!

Искал ответы на все свои вопросы в этой теме, прочитав все посты... Все не нашел :)

Тоже сейчас нахожусь на стадии модернизации своего инвентаря.
Сразу скажу, делал все на С++. Blueprint только для визуализации в основном.

Не знаю на сколько все правильно... надеюсь Мэтры поправят если что не так.

Начал с того что скачал и разобрал по винтикам вот этот вполне рабочий примерчик мультиплеерного инвентаря.
http://www.tomlooman.com/survival-sample-game-for-ue4/

Не помню какая там версия движка в оригинале... я обновил его до 4.15 только... подправил кое-что в коде и немного в Blueprint, чтобы не ругался...

Т.к. меня несколько не устраивал концепт, взялся за основательную его переделку.
По сути, от оригинала уже немного осталось.

Итак, что выходит на данный момент.

1. Для отображения объектов на карте используются BP Actors, наследованные от C++ класса.
2. Для отображения на персонаже (если требуется) и в руке используется другой BP Actor также наследованный уже от другого C++ класса.
3. В оригинале для идентификации соответствия этих двух Actors использовались перекрестные связи. Т.е. World Actor хранил класс Outfit Actor и наоборот. Т.к. это не вполне удобно, и не все объекты я бы хотел видеть на персонаже, качестве посредника между этими Actors я использовал DataAsset. Он тоже наследован от C++ класса в котором я прописал get функции. Это база хранит название объекта, 2DTexture для отображения в инвентаре, Actor для спауна в мире, Actor для спауна на персонаже и набор специфических свойств объекта, которые не меняются в ходе игры. Подключение к С++ сделал через наследованный BP от GameMode.
4. Инвентарь реализован как Component, который можно подключать к любому Actor. Т.е. он может использоваться как для персонажа, так и для, например, сундука. Инвентарь так же, как и DataAsset, в каждой ячейке (struct) хранит название объекта, количество и уникальные свойства, который могут меняться по ходу игры, такие как, например, износ. При спауне в мир свойства записываются в Actor. При подбирании переписываются в инвентарь перед удалением объекта.

Главный минус такой системы, который я вижу, это поиск объекта в DataAsset циклом For. Пока база маленькая - не проблема.
Но когда там будут тысячи объектов, то будет долго. Хотелось бы видешь что-то типа SQL запросов, но целесообразно ли прикручивать SQL я не знаю. Да и не умею пока что...

В данный момент перевожу все названия с FName на FGameplayTag. А свойства с Enum на FGameplayTagContainer.

Если кто-то из специалистов укажет на проблемы данной структуры, и что нужно изменить, буду признателен.
Аватара пользователя
Пользователь
Сообщения: 149
Цитата:
Инвентарь реализован как Component, который можно подключать к любому Actor. Т.е. он может использоваться как для персонажа, так и для, например, сундука

интересует этот пункт, кто вообще занимался инвентарем
Просто просматривал туторы люди где-то по отдельности делали, у Flakky видел что на врага вешался тот же компонент что и на игрока. А сундук отдельным актором со своей логикой.
можно конечно как угодно логику писать, но все же: правильно ли будет то что я сделаю отдельным компонентом "инвентарь" для игрока, и компонент "хранилище" для сундуков, врагов и т.п.?
Т.е. у меня уже готова с нуля логика с компонентом "инвентарь" для игрока и теперь в раздумье как быть на этом этапе с "хранилищем".
Аватара пользователя
Пользователь
Сообщения: 23
А чем отличие хранения в инвентаре игрока от хранения в сундуке?
Только в количестве слотов.
Ну это при условии, что ничего лишнего там не хранится.

Но это мое мнение :)
Аватара пользователя
Пользователь
Сообщения: 149
Svarog писал(а):
А чем отличие хранения в инвентаре игрока от хранения в сундуке?
Только в количестве слотов.
Ну это при условии, что ничего лишнего там не хранится.

Но это мое мнение :)

да я тупанул поначалу, удобнее все одним компонентом делать и для сундука и для инвентаря, просто несколько функций добавил и сделал универсальными для 2-х случаев предыдущие функции.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница