本文整理汇总了C++中FAssetData::IsRedirector方法的典型用法代码示例。如果您正苦于以下问题:C++ FAssetData::IsRedirector方法的具体用法?C++ FAssetData::IsRedirector怎么用?C++ FAssetData::IsRedirector使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FAssetData
的用法示例。
在下文中一共展示了FAssetData::IsRedirector方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnAssetRemoved
void FCollectionAssetRegistryBridge::OnAssetRemoved(const FAssetData& AssetData)
{
FCollectionManagerModule& CollectionManagerModule = FCollectionManagerModule::GetModule();
if (AssetData.IsRedirector())
{
// Notify the collections manager that a redirector has been removed
// This will attempt to re-save any collections that still have a reference to this redirector in their on-disk collection data
CollectionManagerModule.Get().HandleRedirectorDeleted(AssetData.ObjectPath);
}
else
{
// Notify the collections manager that an asset has been removed
CollectionManagerModule.Get().HandleObjectDeleted(AssetData.ObjectPath);
}
}
示例2: FixupObject
virtual bool FixupObject(const FName& InObjectPath, FName& OutNewObjectPath) override
{
OutNewObjectPath = NAME_None;
if (InObjectPath.ToString().StartsWith(TEXT("/Script/")))
{
// We can't use FindObject while we're saving
if (!GIsSavingPackage)
{
const FString ClassPathStr = InObjectPath.ToString();
UClass* FoundClass = FindObject<UClass>(ANY_PACKAGE, *ClassPathStr);
if (!FoundClass)
{
// Use the linker to search for class name redirects (from the loaded ActiveClassRedirects)
const FString ClassName = FPackageName::ObjectPathToObjectName(ClassPathStr);
const FName NewClassName = FLinkerLoad::FindNewNameForClass(*ClassName, false);
if (!NewClassName.IsNone())
{
// Our new class name might be lacking the path, so try and find it so we can use the full path in the collection
FoundClass = FindObject<UClass>(ANY_PACKAGE, *NewClassName.ToString());
if (FoundClass)
{
OutNewObjectPath = *FoundClass->GetPathName();
}
}
}
}
}
else
{
// Keep track of visted redirectors in case we loop.
TSet<FName> VisitedRedirectors;
// Use the asset registry to avoid loading the object
FAssetData ObjectAssetData = AssetRegistryModule.Get().GetAssetByObjectPath(InObjectPath);
while (ObjectAssetData.IsValid() && ObjectAssetData.IsRedirector())
{
// Check to see if we've already seen this path before, it's possible we might have found a redirector loop.
if ( VisitedRedirectors.Contains(ObjectAssetData.ObjectPath) )
{
UE_LOG(LogContentBrowser, Error, TEXT("Redirector Loop Found!"));
for ( FName Redirector : VisitedRedirectors )
{
UE_LOG(LogContentBrowser, Error, TEXT("Redirector: %s"), *Redirector.ToString());
}
ObjectAssetData = FAssetData();
break;
}
VisitedRedirectors.Add(ObjectAssetData.ObjectPath);
// Get the destination object from the meta-data rather than load the redirector object, as
// loading a redirector will also load the object it points to, which could cause a large hitch
FString DestinationObjectPath;
if (ObjectAssetData.GetTagValue("DestinationObject", DestinationObjectPath))
{
ConstructorHelpers::StripObjectClass(DestinationObjectPath);
ObjectAssetData = AssetRegistryModule.Get().GetAssetByObjectPath(*DestinationObjectPath);
}
else
{
ObjectAssetData = FAssetData();
}
}
OutNewObjectPath = ObjectAssetData.ObjectPath;
}
return OutNewObjectPath != NAME_None && InObjectPath != OutNewObjectPath;
}