一. 类介绍
在 内容浏览器 中为新资源命名时,变更动态材质实例中的参数或访问骨骼网格体中的一块骨骼时需要使用 FNames。 FName 通过一个轻型系统使用字符串。在此系统中,特定字符串即使会被重复使用,在数据表中也只存储一次。
FNames 不区分大小写。它们为不可变,无法被操作。FNames 的存储系统和静态特性决定了通过键进行 FNames 的查找和访问速度较快。 FName 子系统的另一个功能是使用散列表为 FName 转换提供快速字符串。
简而言之,可以将经常使用的字符串保存为FName类,它使用映射来节约内存。
二. 创建FName
直接使用构造函数,可以新建一个。
FName TempName=FName(TEXT("UniqueName"));
三. FName和其他类型转换
FNames 只能被转换为 FStrings 和 FText。
1. FName to Others
//FName to FString
const FString TempString=TempName.ToString();
//FName to FText
const FText TempText=FText::FromName(TempName);
2. Others to FName
//FString to FName
TempName=FName(*TempString);
//FName to FName
TempName=FName(*(TempText.ToString()));
四. FName函数操作
1. 属性
//Set Num
TempName.SetNumber(1);
//Get Num
PRINT(FString::FromInt(TempName.GetNumber()));
//String size
PRINT(FString::FromInt(TempName.GetStringLength()));
2. 比较
const FName TempCompare1=FName(TEXT("123"));
const FName TempCompare2=FName(TEXT("124"));
/* The == operator is used to compare two
* FNames and returns true or false, It does
* not compare strings, but compares values in
* indexes, which can greatly save CPU overhead
*/
bool bResult;
bResult=(TempCompare1==TempCompare2);
//Equal
bResult=TempCompare1.IsEqual(TempCompare2,ENameCase::CaseSensitive);
//Compare value (-1,0,1)
PRINT(FString::FromInt(TempCompare1.Compare(TempCompare2)));
PRINT(FString::FromInt(TempCompare2.Compare(TempCompare2)));
PRINT(FString::FromInt(TempCompare2.Compare(TempCompare1)));
3. 判断
//Is the FName none?
bResult=TempName.IsNone();
//Is the FName valid? Use for debug
bResult=TempName.IsValid();
4. 其他自行练习
五. 其他
宏定义真的很好用
#define PRINT(String) {if (GEngine){GEngine->AddOnScreenDebugMessage(-1,10.0f,FColor::Red,*(String));}}