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