void UBTTask_RunBehavior::CleanupMemory(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, EBTMemoryClear::Type CleanupType) const { Super::CleanupMemory(OwnerComp, NodeMemory, CleanupType); if (GetParentNode() && BehaviorAsset) { FBTInstancedNodeMemory* NodeMemoryHeader = (FBTInstancedNodeMemory*)NodeMemory; uint8* InjectedMemoryBase = NodeMemory + sizeof(FBTInstancedNodeMemory); const int32 NumInjectedDecorators = BehaviorAsset->RootDecorators.Num(); for (int32 Idx = 0; Idx < NumInjectedDecorators; Idx++) { const int32 InstancedNodeIdx = NodeMemoryHeader->NodeIdx + Idx; UBTDecorator* InstancedOb = OwnerComp.NodeInstances.IsValidIndex(InstancedNodeIdx) ? Cast<UBTDecorator>(OwnerComp.NodeInstances[InstancedNodeIdx]) : NULL; if (InstancedOb) { uint8* InjectedNodeMemory = InjectedMemoryBase + (InstancedOb->GetMemoryOffset() - GetMemoryOffset()); InstancedOb->CleanupMemory(OwnerComp, InjectedNodeMemory, CleanupType); } } } }