diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp index 4e8351326..18ae0d50e 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpinePlugin.cpp @@ -30,6 +30,8 @@ #include "SpinePluginPrivatePCH.h" +DEFINE_LOG_CATEGORY(SpineLog); + class FSpinePlugin : public SpinePlugin { virtual void StartupModule() override; virtual void ShutdownModule() override; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp index a575af97d..c01629bb3 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp @@ -107,12 +107,14 @@ void USpineSkeletonAnimationComponent::CheckState () { if (Atlas && SkeletonData) { spSkeletonData* data = SkeletonData->GetSkeletonData(Atlas->GetAtlas(false), false); - skeleton = spSkeleton_create(data); - spAnimationStateData* stateData = SkeletonData->GetAnimationStateData(Atlas->GetAtlas(false)); - state = spAnimationState_create(stateData); - state->rendererObject = (void*)this; - state->listener = callback; - trackEntries.Empty(); + if (data) { + skeleton = spSkeleton_create(data); + spAnimationStateData* stateData = SkeletonData->GetAnimationStateData(Atlas->GetAtlas(false)); + state = spAnimationState_create(stateData); + state->rendererObject = (void*)this; + state->listener = callback; + trackEntries.Empty(); + } } lastAtlas = Atlas; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp index 2c6d9ccfc..8ff4bf4dd 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp @@ -33,6 +33,7 @@ #include #include #include +#include "Runtime/Core/Public/Misc/MessageDialog.h" #define LOCTEXT_NAMESPACE "Spine" @@ -103,10 +104,22 @@ spSkeletonData* USpineSkeletonDataAsset::GetSkeletonData (spAtlas* Atlas, bool F if (skeletonDataFileName.GetPlainNameString().Contains(TEXT(".json"))) { spSkeletonJson* json = spSkeletonJson_create(Atlas); this->skeletonData = spSkeletonJson_readSkeletonData(json, (const char*)rawData.GetData()); + if (!skeletonData) { +#if WITH_EDITORONLY_DATA + FMessageDialog::Debugf(FText::FromString(UTF8_TO_TCHAR(json->error))); +#endif + UE_LOG(SpineLog, Error, TEXT("Couldn't load skeleton data and atlas: %s"), UTF8_TO_TCHAR(json->error)); + } spSkeletonJson_dispose(json); } else { spSkeletonBinary* binary = spSkeletonBinary_create(Atlas); this->skeletonData = spSkeletonBinary_readSkeletonData(binary, (const unsigned char*)rawData.GetData(), (int)rawData.Num()); + if (!skeletonData) { +#if WITH_EDITORONLY_DATA + FMessageDialog::Debugf(FText::FromString(UTF8_TO_TCHAR(binary->error))); +#endif + UE_LOG(SpineLog, Error, TEXT("Couldn't load skeleton data and atlas: %s"), UTF8_TO_TCHAR(binary->error)); + } spSkeletonBinary_dispose(binary); } if (animationStateData) { diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h index 6011f932d..0d16143f7 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpinePlugin.h @@ -32,6 +32,8 @@ #include "ModuleManager.h" +DECLARE_LOG_CATEGORY_EXTERN(SpineLog, Log, All); + class SPINEPLUGIN_API SpinePlugin : public IModuleInterface { public: