Unreal Engine 4
http://uengine.ru/forum/

Инвентарь на UObject'ах
http://uengine.ru/forum/viewtopic.php?f=19&t=12922
Страница 2 из 3

Автор:  Snake [ 06 янв 2018, 12:33 ]
Заголовок сообщения: 

настраиваемый обьект:


Код:
UCLASS( Blueprintable, BlueprintType, EditInlineNew) // EditInlineNew позволяет обьяввить переменную как Instanced
class TEST_API UTestObject: public UObject
{
   GENERATED_BODY()

   public:
         bool MyBool=false;
};


обьект в котором вложен настраиваемый обьект:
Код:
#include "TestObject.h"

UCLASS( ClassGroup=(Custom), Blueprintable, BlueprintType)
class TEST_API UMyActorComponent: public UActorComponent
{
   GENERATED_BODY()

   public:
   UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced) //спецификатор инстансед
         UTestObject* ObjectVar;
   
   bool GetObjBool()
   {
      return ObjectVar->MyBool; // обращаемся как к обычному обьекту в коде
   }

};


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

Автор:  Snake [ 06 янв 2018, 12:57 ]
Заголовок сообщения: 

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

Автор:  kiteg [ 06 янв 2018, 13:19 ]
Заголовок сообщения:  Re:

Snake писал(а):
хотелось бы еще поинтересоваться а что должно настраиваться у компонента инвентаря уобжектами?
тоесть продуманна ли архитектура инвентаря, может достаточно настраивать актор компонент, создавать в нем уобжект(ы), и записывать их в массив.
в массиве искать нужный, брать его , и читать/писать в него что нужно.


Компонент инвентаря хранит в себе массив UObject'ов. UObject'ы хранят в себе информацию о предметах (название, урон и т.п.) и ссылку на блюпринт от актора для добавления предмета на сцену. Вот эту ссылку на блюпринт мне и хочется указывать в самом UObject'e через эдитор.

Автор:  Snake [ 06 янв 2018, 13:36 ]
Заголовок сообщения: 

ммм.. мне кажется что не оптимальное тогда решение... если нужно настраивать одну переменную...
сомнительного назначения настройка получается.
а актор-компонент у кого хранится?

сейчас в инвентаре учавствую минимум 4 обьекта:
- актор с компонентом
- компонент с уобжектом
- уобжект
- и обьект на который ссылается уобжект вероятно тоже актор но уже другой
каково назначение каждого?

Автор:  kiteg [ 06 янв 2018, 13:45 ]
Заголовок сообщения:  Re:

Snake писал(а):
ммм.. мне кажется что не оптимальное тогда решение... если нужно настраивать одну переменную...
сомнительного назначения настройка получается.
а актор-компонент у кого хранится?

сейчас в инвентаре учавствую минимум 4 обьекта:
- актор с компонентом
- компонент с уобжектом
- уобжект
- и обьект на который ссылается уобжект вероятно тоже актор но уже другой
каково назначение каждого?

Чёт я запутался. Инвентарь представляет из себя ActorComponent (который висит например на персонаже). ActorComponent хранит в себе массив UObject'ов, которые хранят в себе информацию о предмете. Т.е. каждый UObject - это отдельный предмет.
Для того чтобы выкинуть из инвентаря предмет и добавить его в мир нам нужен blueprint класс наследуемый от actor'a, т.к. UObject'ы не могут находиться на сцене. Соответственно в каждом UObject'e должна лежать ссылка на блюпринт данного предмета.

Автор:  Snake [ 06 янв 2018, 13:59 ]
Заголовок сообщения: 

ммм... как-то тогда не логично...
в частности:
зачем персонажу хранить уобжект предмета который он выбросил?
К персонажу этот обьект больше не имеет отношения, теперь он сам по себе.
в компоненте персонажа должно храниться только то что связанно с этим персонажем в моем понимании.

Автор:  kiteg [ 06 янв 2018, 14:04 ]
Заголовок сообщения:  Re:

Snake писал(а):
ммм... как-то тогда не логично...
в частности:
зачем персонажу хранить уобжект предмета который он выбросил?
К персонажу этот обьект больше не имеет отношения, теперь он сам по себе.
в компоненте персонажа должно храниться только то что связанно с этим персонажем в моем понимании.

При выбрасывании на сцене создаётся предмет по ссылке на блюпринт от актора, а сам уобжект удаляется.

Автор:  Snake [ 06 янв 2018, 14:10 ]
Заголовок сообщения: 

все равно мне кажется концепция не верна...
потому что тогда не нужно хранить ссылку на выброшенный предмет...
и возвращает к вопросу:
Цитата:
хотелось бы еще поинтересоваться а что должно настраиваться у компонента инвентаря уобжектами?

все же нужно сначала архитектуру продумать прежде чем начинать писать код.

Автор:  kiteg [ 06 янв 2018, 14:18 ]
Заголовок сообщения:  Re:

Snake писал(а):
все равно мне кажется концепция не верна...
потому что тогда не нужно хранить ссылку на выброшенный предмет...
и возвращает к вопросу:
Цитата:
хотелось бы еще поинтересоваться а что должно настраиваться у компонента инвентаря уобжектами?

все же нужно сначала архитектуру продумать прежде чем начинать писать код.

Или я вас не понимаю, или вы меня. Инвентарь это ActorComponent класс, который висит на персонаже. В ActorComponent находится массив из уобжектов, больше в нём ничего нет (кроме логики выбрасывания предметов, но не суть). Когда предмет выбрасывется из инвентаря создаётся актор на сцене, а обжект из массива в ActorComponent удаляется и больше предмет с персонажем и инвентарём никак не связан.
То что примерно должно получиться описано здесь http://shootertutorial.com/2015/12/15/c ... -tutorial/

Автор:  Snake [ 06 янв 2018, 14:36 ]
Заголовок сообщения: 

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

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

вот есть класс-предмет пистолет... у него все уже настроенно, он либо в инвентаре, либо на уровне, либо екипирован. в инвеннтаре он числится как 1шт предмет класса пистолет, на уровне спавним актора - с мешем пистолета(актор для всех предметов один и тот же). При екипировке-использовании варианты уже разные могут быть.

так что да я не понимаю функциоального назначения редактированиев едиторе ссылки на какого-то актора ... мне не понятно зачем ее менять и что она дает.

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/