コード例 #1
0
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);
			}
		}
	}
}