Unreal Engine 4 http://uengine.ru/forum/ |
|
Добавить AActor в TMap http://uengine.ru/forum/viewtopic.php?f=19&t=12107 |
Страница 1 из 1 |
Автор: | Greedy [ 06 ноя 2017, 01:12 ] |
Заголовок сообщения: | Добавить AActor в TMap |
Есть TMap myMap ActorsBase <int32, AACtor> Нужно в ручную добавить элемент ActorsBase.Add(int32, MyAActor_BP), однако я не понимаю как это сделать (что писать место MyAActor_BP). Вопрос в том, как записать путь до нужного мне Блюпринт-класса, лежащего в /Content/TestBP/MyActors |
Автор: | gary_cho [ 06 ноя 2017, 13:49 ] |
Заголовок сообщения: | |
добавление происходит функцией TMap::Add(). Зачем тебе путь ? Это путь до скрипта, а у тебя Map актёров. Вообще странная реализация, может нужно TMap< int32, AAсtor* > myMap вот так |
Автор: | Svarog [ 07 ноя 2017, 10:42 ] |
Заголовок сообщения: | |
Я не гуру, но думаю нужно делать так... 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, что позволит избежать ошибок в подстановке как минимум. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |