diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp index d0b24cb203..518db289e2 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/ActorAsset.cpp @@ -68,6 +68,8 @@ namespace EMotionFX &actorSettings, ""); + assetData->ReleaseEMotionFXData(); + if (!assetData->m_emfxActor) { AZ_Error("EMotionFX", false, "Failed to initialize actor asset %s", asset.ToString().c_str()); @@ -77,7 +79,6 @@ namespace EMotionFX assetData->m_emfxActor->SetIsOwnedByRuntime(true); // Note: Render actor depends on the mesh asset, so we need to manually create it after mesh asset has been loaded. - return static_cast(assetData->m_emfxActor); } diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp index 82bb487d2e..a8b9746789 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/AnimGraphAsset.cpp @@ -90,6 +90,7 @@ namespace EMotionFX } } + assetData->ReleaseEMotionFXData(); AZ_Error("EMotionFX", assetData->m_emfxAnimGraph, "Failed to initialize anim graph asset %s", asset.GetHint().c_str()); return static_cast(assetData->m_emfxAnimGraph); } diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/AssetCommon.h b/Gems/EMotionFX/Code/Source/Integration/Assets/AssetCommon.h index 2936076258..ca0f6d996d 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/AssetCommon.h +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/AssetCommon.h @@ -36,6 +36,12 @@ namespace EMotionFX : AZ::Data::AssetData(id) {} + void ReleaseEMotionFXData() + { + m_emfxNativeData.clear(); + m_emfxNativeData.shrink_to_fit(); + } + AZStd::vector m_emfxNativeData; }; diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionAsset.cpp index 6bcc572ec6..2d95066b13 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionAsset.cpp @@ -47,6 +47,7 @@ namespace EMotionFX assetData->m_emfxMotion->SetIsOwnedByRuntime(true); } + assetData->ReleaseEMotionFXData(); AZ_Error("EMotionFX", assetData->m_emfxMotion, "Failed to initialize motion asset %s", asset.GetHint().c_str()); return (assetData->m_emfxMotion); } diff --git a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp index f437cea256..a49dd95986 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Assets/MotionSetAsset.cpp @@ -232,6 +232,7 @@ namespace EMotionFX // Set motion set's motion load callback, so if EMotion FX queries back for a motion, // we can pull the one managed through an AZ::Asset. assetData->m_emfxMotionSet->SetCallback(aznew CustomMotionSetCallback(asset)); + assetData->ReleaseEMotionFXData(); return true; }