Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 52
Есть TMap myMap ActorsBase <int32, AACtor>
Нужно в ручную добавить элемент ActorsBase.Add(int32, MyAActor_BP), однако я не понимаю как это сделать (что писать место MyAActor_BP).
Вопрос в том, как записать путь до нужного мне Блюпринт-класса, лежащего в /Content/TestBP/MyActors
Аватара пользователя
Пользователь
Сообщения: 195
добавление происходит функцией TMap::Add(). Зачем тебе путь ? Это путь до скрипта, а у тебя Map актёров. Вообще странная реализация, может нужно TMap< int32, AAсtor* > myMap вот так
Аватара пользователя
Пользователь
Сообщения: 23
Я не гуру, но думаю нужно делать так...

1. Создаешь С++ класс AMyActorCppClass для своего актера.
Далее от него делаешь еще кучу классов (если нужно) и свой Blueprint.

2. Создашешь С++ класс для своей базы. Можно в принципе любой, но для базы предпочтительнее DataAsset.
Из русских источников этот, вероятно, самый лучший https://uengine.ru/forum/viewtopic.php?f=17&t=1502

В этом классе пишешь
UPROPERTY(EditDefaultsOnly, Category = "MyAcrot bla bla bla")
TSubclassOf<class AMyActorCppClass> MyActorClass;

Эта штука появится в Blueprint твоей базы (который ты наследуешь от данного С++ класса), и ты сможешь назначить для этой переменой своего актера.
TSubclassOf означает что можно запихать сюда любые наследованные от AMyActorCppClass классы.

3. Для чтобы добавить базу нужно сделать что-то типа

TMap myMapActorsBase <int32, TSubclassOf<class AMyActorCppClass>>

Хотя не уверен в правильности этой записи. Я вместо TSubclassOf<class AMyActorCppClass> записывал структуру, где эта самая TSubclassOf<class AMyActorCppClass> выступает в качестве элемента.

Вот так, собственно, любой Blueprint должен попадать в С++.
ConstructorHelpers рекомендуется избегать.


У меня тоже есть вопрос...
Зачем делать TMap типа TMap<int32, something>?
int32, как я пониманию, просто идентификатор?
Если они будут идти подряд 0,1,2,3... то лучше сделать TArray<something>.
Прямой доступ к элементу TArray работает в 2 раза быстрее, чем операция Find для TMap.

И, опять таки, если применять TMap, где первый элемент идентификатор, то лучше всего поставить на его место не безликое число, а имя этого объекта.
Причем лучше использовать не FName, a FGameplayTag, что позволит избежать ошибок в подстановке как минимум.


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

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