Size: a a a

2020 November 11

HM

Hackerman Me in Unreal Engine
Igor Vasilyev
здарова, кто нить со слейтом работал?

один раз за запуск (т.е. второй раз из эдитора такой траблы нет), вылетает ошибка при end play , если воспользоваться SWebBrowser::LoadURL(FString NewURL)

LogOutputDevice: Error: Ensure condition failed: !IsGarbageCollecting() [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/UMG/Private/Slate/SObjectWidget.cpp] [Line: 43] 
SObjectWidget for 'WBP_Promo_C /Engine/Transient.UnrealEdEngine_0:BP_MQGameInstance_C_1.WBP_Promo_C_7' destroyed while collecting garbage.  This can lead to multiple GCs being required to cleanup the object.  Possible causes might be,
1) ReleaseSlateResources not being implemented for the owner of this pointer.
2) You may just be holding onto some slate pointers on an actor that don't get reset until the actor is Garbage Collected.  You should avoid doing this, and instead reset those references when the actor is Destroyed.


я это так понял, что веббравсер пытается уничтожить уже гарбажнутого овнера из за того что держит на него рефы.
пробывал перед Super::ReleaseSlateResources(bReleaseChildren); в овнера ConditionalBeginDestroy(); веббравсера, но не прокатывает, хотел как то его принудительно удалить со всеми рефами до удаления овнера.
Ну а ты EndPlay вызываешь родительский вообще?
источник

HM

Hackerman Me in Unreal Engine
Super::EndPlay?
источник

HM

Hackerman Me in Unreal Engine
Он у тебя не освобождает память нормально.
источник

HM

Hackerman Me in Unreal Engine
99% что ты забыл добавить вызов родительского EndPlay или что-то подобное, что должно было вызвать удаление виджетов.
источник

HM

Hackerman Me in Unreal Engine
Из-за этого оно у тебя подвисает в памяти и удаляется уже при сборке мусора.
источник

IV

Igor Vasilyev in Unreal Engine
Hackerman Me
99% что ты забыл добавить вызов родительского EndPlay или что-то подобное, что должно было вызвать удаление виджетов.
это же не актор, там Super::ReleaseSlateResources
источник

HM

Hackerman Me in Unreal Engine
Igor Vasilyev
это же не актор, там Super::ReleaseSlateResources
Я про того, в ком оно лежит вообще.
источник

HM

Hackerman Me in Unreal Engine
В UserWidget.
источник

HM

Hackerman Me in Unreal Engine
Или кто там у тебя.
источник

HM

Hackerman Me in Unreal Engine
AHUD
источник

HM

Hackerman Me in Unreal Engine
AActor / AActorComponent
источник

IV

Igor Vasilyev in Unreal Engine
Hackerman Me
В UserWidget.
ага он, я пытался делать так

void UW_BasePromo::ReleaseSlateResources(bool bReleaseChildren)
{    
 // test ensure condition failed "destroyed while collecting garbage"
 if (WebBrowser)
 {
   WebBrowser->ReleaseSlateResources(bReleaseChildren);    
 }
 
 Super::ReleaseSlateResources(bReleaseChildren);
}
источник

IV

Igor Vasilyev in Unreal Engine
Hackerman Me
В UserWidget.
т.е. перед высвобождением юсервиджета - освобождал вебравсер, но та же байда
источник

HM

Hackerman Me in Unreal Engine
Наоборот попробуй.
источник

HM

Hackerman Me in Unreal Engine
И проверь что этот метод вызывается.
источник

HM

Hackerman Me in Unreal Engine
И ещё раз - проверь что вызывается EndPlay.
источник

IV

Igor Vasilyev in Unreal Engine
Hackerman Me
И ещё раз - проверь что вызывается EndPlay.
я не совсем понял про EndPlay , сам виджет в виджет компоненте у тестого актора, там все по дефолту (ниче не отрубал).

наоборот не катит тоже
источник

HM

Hackerman Me in Unreal Engine
Igor Vasilyev
я не совсем понял про EndPlay , сам виджет в виджет компоненте у тестого актора, там все по дефолту (ниче не отрубал).

наоборот не катит тоже
А, это не твой компонент?
источник

HM

Hackerman Me in Unreal Engine
А в акторе вызов родительского завершения игры есть?
источник

IV

Igor Vasilyev in Unreal Engine
Hackerman Me
А, это не твой компонент?
не, это WidgetComponent
источник