Приветствую! Подскажите пожалуйста, я хочу сделать возможность создания компонентов для

актора в редакторе. То есть человек указывает количество, у него сразу добавляется N этих компонентов и он может их в блупринте актора подвигать-настроить. Я пытался сделать используя CreateDefaultSubobject, вызывал функцию на ConstructionScript, в итоге у меня проект стабильно крашится. Я в принципе пытаюсь ерунду сделать или просто нужен другой подход?

16 ответов

15 просмотров

CreateDefaultSubobject вроде бы можно вызывать исключительно из конструктора С++, то есть до рантайма игры. Юзай вместо него NewObject

Святослав-Коновалов Автор вопроса

Спасибо, попробую!

Дело в том, что CreateDefaultSubobject помимо спавна делает ещё много всего, например создаёт дефолтный объект если он ещё не создан (CDO)

https://answers.unrealengine.com/questions/867848/right-method-to-spawn-component-at-runtime-in-2019.html Посмотри в ответах, там есть пример как правильно это сделать

Святослав-Коновалов Автор вопроса

У меня получилось создавать компоненты, и я могу работать с ними из плюсов, но я хочу чтобы их можно было изменять в эдиторе. Если бы я объявлял компоненты в конструкторе, то нужно было бы использовать UPROPERTY. А что делать если я их создаю? Нигде не могу найти ответ(

Если ты хочешь работаь с ними в эдиторе точно так же как с обычными компонентами, то так не получится, их не существует в эдиторе, ты же их создаешь в рантайме. Всё что можной в данной ситуации - это сделать масств указателей на компоненты, объявить его юпроперти и добавлять туда указатели на компоненты при добавлении новых.

Святослав-Коновалов Автор вопроса

Понял, спасибо

И я бы тут на твоем месте подумал, что бы реализовать это с помощью экторов и спаунить в рантайме именно экторов, а не компоненты. Создание компонентов в рантайме не очень хорошая затея, тем более ты всё равно видимо не получаешь того результата, который хочешь

Святослав-Коновалов Автор вопроса

Акторы в принципе можно будет использовать, но там есть пара минусов, спасибо за совет) У меня вообще задача создать объект из кучи(до сотни) мелких объектов. И потом там пазл из этого будет. Я хотел облегчить работу тем кто будет это собирать и создать объекты с помощью Construction Script, но раз анрил так не умеет, то придётся или страдать сборщикам, или поменять концепцию)

Ну вообще именно отспаунить компоненты в констракшен скрипте можно, но они не будут отображаться в блупринте как компоненты, но как я и говорил, можно создать массив в плюсах и в констракшен скрипте при спауне очередного компонента добавлять туда указатель на него, если это тебя устроит. Кроме этого.. сборщики, кто будет работать в блупринте.. могут например сами добавлять новый компонент через кнопку Add (ну как в блупринтах это делается в смысле), а в плюсах можно будет получить к ним доступ через функции GetComponents (посмотри в документации AActor), может быть такой вариант тебя устроит.

Святослав-Коновалов Автор вопроса

Да, я понимаю что человек может сам добавить компоненты, но когда нужно сделать 10-20 акторов, в каждом по 100 компонентов, и всё вручную, становится как-то грустно) Ещё раз спасибо большое за советы, думаю как раз GetComponents и буду использовать в итоге

Я просто немного не понял как именно ты им работы хочешь облегчить) я так понял, что их работа и состоит в том, что бы в ручную выбирать компоненты и самим их цеплять на эктора)

Святослав-Коновалов Автор вопроса

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

золотые слова. меня это часто приводило к груде утилит, которые чтобы объяснить, надо еще парочку утилит написать :)

Если объект состоит например из n-количества компонентов класа A, и из m-количества компонентов класса B и т д.. То можно сделать переменные в классе, которые предоставить для установки тому, кто будет работать в блупринте, а самому в OnConstruction прописать уже спавн, взяв значения из этих переменных

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта