Хорошо, я создал класс, унаследованный от UObject. Я могу создать его на уровне BP (используя узел объекта Construct) и сохранить ссылку в моей переменной BP. Когда я создаю объект, я устанавливаю Внешний как self. Итак, уровень БП, владеющий вновь созданным объектом. Теперь у меня вопрос, как удалить этот объект из памяти? Я попытался установить для переменной BP значение null, но мне кажется, что мне нужно уничтожить уровень, чтобы освободить этот объект. Есть идеи, как это сделать без разрушения уровня?
Как удалить объект с помощью чертежей (не актера)
Ответы (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 из моих неработающих ссылок, это сработает.
Мне удалось решить эту проблему, я также получил некоторые подсказки, данные о нереальном центре ответов: https://answers.unrealengine.com/questions/337525/how-to-delete-object-using-blueprints.html
Итак, в основном ответ таков: установите для ссылочной переменной значение null, и в какой-то момент GC выпустит ее. Но не ждите, что это произойдет мгновенно.