Как удалить объект с помощью чертежей (не актера)

Хорошо, я создал класс, унаследованный от UObject. Я могу создать его на уровне BP (используя узел объекта Construct) и сохранить ссылку в моей переменной BP. Когда я создаю объект, я устанавливаю Внешний как self. Итак, уровень БП, владеющий вновь созданным объектом. Теперь у меня вопрос, как удалить этот объект из памяти? Я попытался установить для переменной BP значение null, но мне кажется, что мне нужно уничтожить уровень, чтобы освободить этот объект. Есть идеи, как это сделать без разрушения уровня?


person The Tosters    schedule 22.11.2015    source источник


Ответы (2)


В данный момент у меня нет доступа к UE4, но я надеюсь, что это поможет / подскажет вам правильное направление:

UObjects управляется сборщиком мусора. Чтобы соответствующим образом создать UObject, используйте NewObject (), NewNamedObject () и ConstructObject (). Можно настроить способ обработки UObjects сборщиком мусора во время создания с помощью перечисления Object Flags. (Если вы хотите узнать больше о создании экземпляра UObject, вы можете перейти сюда: https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Objects/Creation/index.html)

Таким образом, вы не должны вызывать новые или удалять объекты UObjects. Если UObject больше не нужен, это обычно означает, что на него нет ссылок (однако это может отличаться в зависимости от контекста и флагов сборки мусора, используемых в момент создания UObject). В этой ситуации вы можете запустить функцию ForceGarbageCollection ():

GetWorld () -> ForceGarbageCollection (true);

Обратите внимание, что вызов этого метода может вызвать сбои в некоторых ситуациях, особенно когда объект уже уничтожается сборщиком мусора или имеет значение null.

Кроме того, если вы хотите узнать больше о Unreal Object Handling, вы можете перейти сюда: https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Objects/Optimizations/index.html

Предоставлено: https://answers.unrealengine.com/questions/219430/explicito-delete-a-uobject.html

Пс. StackOverflow не позволяет мне размещать более двух ссылок, потому что у меня недостаточно репутации ... так что удалите первую букву h из моих неработающих ссылок, это сработает.

person dekhadmai    schedule 24.11.2015
comment
Это ответ C ++, но я надеюсь, что вы сможете найти ту же вызываемую функцию из blueprint. - person dekhadmai; 24.11.2015

Мне удалось решить эту проблему, я также получил некоторые подсказки, данные о нереальном центре ответов: https://answers.unrealengine.com/questions/337525/how-to-delete-object-using-blueprints.html

Итак, в основном ответ таков: установите для ссылочной переменной значение null, и в какой-то момент GC выпустит ее. Но не ждите, что это произойдет мгновенно.

person The Tosters    schedule 25.11.2015