《UE4游戏开发》之 《TSoftObjectPtr引用资源并使用的陷阱》

  1. 错误使用例子:
//该if条件永远为false
if (anim_info->PreviewBorn && anim_info->PreviewBorn.IsValid())
{
    
    
	AnimSeq.PreviewBorn = Cast<UAnimSequenceBase>(anim_info->PreviewBorn.LoadSynchronous());
}
else
{
    
    
	AnimSeq.PreviewBorn = AnimSeq.Born;
}
//该if条件永远为false
if (anim_info->PreviewBorn)
{
    
    
	AnimSeq.PreviewBorn = Cast<UAnimSequenceBase>(anim_info->PreviewBorn.LoadSynchronous());
}
else
{
    
    
	AnimSeq.PreviewBorn = AnimSeq.Born;
}
  1. 经过测试发现,通过LoadSynchronous函数后,即先把资源加载到内存后,if条件才会为true
auto PreviewBorn = Cast<UAnimSequenceBase>(anim_info->PreviewBorn.LoadSynchronous());
//当anim_info->PreviewBorn有软引用资源时,if条件为true,否则为false
if (anim_info->PreviewBorn)
{
    
    
	AnimSeq.PreviewBorn = PreviewBorn;
}
else
{
    
    
	AnimSeq.PreviewBorn = AnimSeq.Born;
}
  1. 综上所述,通过TSoftObjectPtr声明的变量,无需判断是否为nullptr,无需判断是否是一个有效对象,该变量是否是一个有效值,是由:是否指定了软引用资源和是否将其资源加载到内存,只有指定了资源且将资源加载到内存,变量才会有效

猜你喜欢

转载自blog.csdn.net/qq_21919621/article/details/108153425