Полезное

Мы Вконтакте

Discord канал

#
След.
Аватара пользователя
Пользователь
Сообщения: 21
Snake писал(а):
какие конкретно переменные будут в уобжекте для настройки? ссылку на класс актора который должен заспавниться при выбрасывании?

Да, только не на актор, а на блюпринт от этого актора, а также изображение для отображения в инвентаре. Мне это нужно т.к. в блюпринте могут часто меняться различные параметры предмета - меш например, его позиционирование и т.п. - это будет делать человек не знакомый с c++, потому мне нужно чтобы это человек мог поменять ссылку на блюпринт вслучае чего не залазя в код.
Аватара пользователя
Пользователь
Сообщения: 2319
получается уобжекты вместо ссылки на класс становятся нужны когда у предмета есть динамически меняющиеся свойства, изношенность например и т.п.
которые не хранятся в калсс-дефаултс.
но опять незачем прям что-то настраивать. Хотя уже можно, как раз эти самые свойства параметры.
добавил в инвентарь, убрал из инвентаря. что хранили как класс теперь уобжект.
Но опять таки не сильно выгодно перед просто ссылками на классы, если такой параметр всего один у предмета.
...
Без этих параметров у предметов фиксированные свойства и они не нуждаются в настройке.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
так Блуепринтейбл все классы которые нужны дизайнерам должны быть. Для настройки всего в БП.
Или вобще из таблиц импортиться.
Хранить мешь который нужен при спавне можно и в класс-дефаултс предмета. Сам класс настраивается в отдельном БП.
Также поступать со всеми статичными данными.
А на С++ можно только абстрактные классы сделать.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 21
Понял, усвоил. Спасибо за помощь)
Аватара пользователя
Пользователь
Сообщения: 2319
Цитата:
меш например, его позиционирование и т.п

согласно пивоту меша, все пивоты можно редактировать внутри редактора
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
Ну помощь сомнительная в данном случае только некоторые соображения, не факт что верные.
Я повторюсь - нужно тщательно продумать архитектуру относительно необходимого функционала. Чтоб прийти уже к конкретной реализации.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 21
Было-бы здорово посмотреть на кем-нибудь реализованный инвентарь на обжектах в c++. Может встречалось где?
Аватара пользователя
Пользователь
Сообщения: 2319
может где-то и есть не интересовался, нужно искать.
но по сути уОбжект - екземпляр класса в памяти, со своими методами, и переменными. тоесть необходимость использования их тоже должна быть обусловленна требованиями к функционалу инвентаря или системы в целом.
Например со статичными данными предметы не нуждаются в постоянном существовании в памяти. И можно хранить как ссылки на класс. Память свободна под другие задачи, и нагрузка меньше.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 27
Я как раз сейчас делаю инвентарь на UObject,
https://youtu.be/14IzAlRDeZI - вот пример
Что могу сказать, самое главное что нужно знать что в анриле все указатели на объекты должны быть с макросом UPROPERTY()
иначе клинер их вычестит сразу после того как ты уничитожишь их actor, в анриле когда создаешь объект указываешь outer и как только этот outer уничтожается, все объекты для которых этот объект являлся outer, стираются тоже, за исключением тех на которые указывают указатели с макросом UPROPERTY(), я очень долго долбался потому что не знал такой маленькой тонкости.
По поводу того как спаунить ItemActorы

Код:
AItemActor* ItemActor = GetWorld()->SpawnActorDeferred<AItemActor>(AItemActor::StaticClass(), FTransform(FRotator(0.f, 0.f, 0.f), FVector(Hit.Location.X, Hit.Location.Y, Hit.Location.Z + 100.f)));
ItemActor->UpdateItemReference(DraggingItem);
ItemActor->FinishSpawning(FTransform(FRotator(0.f, 0.f, 0.f), FVector(Hit.Location.X, Hit.Location.Y, Hit.Location.Z + 100.f)));


так ты можешь задать параметры в экторе еще до конструкта.

по поводу самого инвентаря, по сути это эктор компонент с TArray<UItem*>, если у тебя пространство в инвентаре двухмерное, можешь использовать ассоциативный массив с координатами в виде ключа, TMap<FVector2D, UItem*> где nullptr это пустая ячейка и в TArray и в TMap достаточно обширный функционал которого с головой хватает для менеджмента инвентаря. Все остальное простая логика и математика за 5-тый класс.
Аватара пользователя
Пользователь
Сообщения: 27
Это что бы в эдиторе когда добавляешь класс uitem'а в actor, он создавал объект и менял меш сразу.

Код:
void AItemActor::OnConstruction(const FTransform& Transform)
{
   if (ItemClass != nullptr)
   {
      ItemReference = NewObject<UItem>(this, ItemClass);
      MeshComponent->SetStaticMesh(ItemReference->GetMesh());
   }
}


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

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