查看: 615|回复: 7

[编程指南] 【FName | Unreal Engine】

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2016-6-27 01:29:17 | 显示全部楼层 |阅读模式


本页面的内容:

      
创建 FNames

转换
从 FName
到 FName

对比

使用 FName

搜索资源文件名称表
     
在 内容浏览器 中为新资源命名时,变更动态材质实例中的参数或访问骨骼网格体中的一块骨骼时需要使用 FNames。FName 通过一个轻型系统使用字符串。在此系统中,特定字符串即使会被重复使用,在数据表中也只存储一次。FNames 不区分资源文件大小写。它们为不可变,无法被操作。FNames 的存储系统和静态特性决定了通过键进行 FNames 的查找和访问速度较快。FName 子系统的另一个功能是使用散列表为 FName 转换提供快速字符串。

FNames 不区分资源文件大小写,作为索引组合存储在唯一字符串和实例编号的表格中。
创建 FNames
FName TestHUDName = FName(TEXT("ThisIsMyTestFName"));转换
FNames 只能被转换为 FStrings 和 FText,只能从 FStrings 进行转换。

从 FName




范例

FNameFStringTestHUDString = TestHUDName.ToString();FNameFTextTestHUDText = FText::FromName(TestHUDName);
FName -> FText is valid in some cases, but be aware that the FNames's content will not benefit from the FText's "auto localization".

到 FName




范例

FStringFNameTestHUDName = FName(*TestHUDString);
FString -> FName is dangerous as the conversion is lossy as FName's are case insensitive.
FTextFNameThere is no direct conversion from FText to FName. Instead, convert to FString and then to FName.
FText -> FString -> FName is dangerous as the conversion is lossy as FName's are case insensitive.

执行这些转换时,需注意它们可能包含对创建中的 FName 类型无效的字符。NameTypes.h 文件中的 INVALID_NAME_CHARACTERS 宏定义 FNames 中无效的字符;FName 中的数个函数(如 IsValidObjectName())将对 FNames 在特定使用情况下的有效性进行检查。
对比
== 运算符用于对比两个 FNames,返回 true 或 false。它并不执行字符串的对比,而是对比索引中的数值,可极大地节约 CPU 开销。

FName::Compare 还可用于对比两个 FNames。如  Other 将返回  0;如 == Other 将返回 0;如 > Other 将返回 > 0。

CompareFloat = TestFName.Compare(OtherFName); 使用 FName
FName 的使用简单直接。例如您需要从 Actor 的骨骼网格体组件中选择名为“pelvis(骨盆)”的骨骼。以下的 C++ 代码展示了即时构建的 FName 的使用,它将同时被传递到 GetBoneRotation()。

FRotator rotPelvis = Mesh-MeshGetInstance(this))-GetBoneRotation(FName(TEXT("pelvis")));
此代码将创建一个传递到 GetBoneRotation() 的 FName,将返回相应骨骼的 FRotator。包加载时骨骼命名将被加载到 FName 表格中,因此 FName 的构建函数可在散列表中找到骨骼的命名,不需要进行分配。
搜索资源文件名称表
如需确定 FName 是否在资源文件名称表中(但不希望进行自动添加),可在 FName 构建函数中补充一个不同的搜索类型:

if( FName(TEXT("pelvis"), FNAME_Find) != NAME_None ){    // Do something}
如资源文件名称不在资源文件名称表中,FName 的索引将被设为 NAME_None。注意:将不对指针进行 null 检查,因为使用的是普通字符串。
回复

使用道具 举报

0

主题

1282

帖子

3911

积分

vip会员

Rank: 1

积分
3911
发表于 2016-7-2 19:51:14 来自手机 | 显示全部楼层
助人为乐啊!
回复 支持 反对

使用道具 举报

0

主题

853

帖子

2762

积分

vip会员

Rank: 1

积分
2762
发表于 2016-7-4 02:04:16 来自手机 | 显示全部楼层
这个必须顶,撸主好人
回复 支持 反对

使用道具 举报

0

主题

856

帖子

2805

积分

vip会员

Rank: 1

积分
2805
发表于 2016-7-4 11:56:08 | 显示全部楼层
真是是好人啊,,过来看看
回复 支持 反对

使用道具 举报

0

主题

882

帖子

2933

积分

vip会员

Rank: 1

积分
2933
发表于 2016-7-4 13:21:19 | 显示全部楼层
论坛的好东西真多啊,相信版主放的东西都靠谱,就是希望价格便宜点啦。
回复 支持 反对

使用道具 举报

0

主题

828

帖子

2724

积分

vip会员

Rank: 1

积分
2724
发表于 2016-7-14 16:29:52 来自手机 | 显示全部楼层
收下了~~感谢~
回复 支持 反对

使用道具 举报

0

主题

824

帖子

2782

积分

vip会员

Rank: 1

积分
2782
发表于 2016-7-16 17:23:25 来自手机 | 显示全部楼层
好东西,所噶
回复 支持 反对

使用道具 举报

0

主题

882

帖子

2913

积分

vip会员

Rank: 1

积分
2913
发表于 2016-7-25 00:03:20 | 显示全部楼层
看看效果,谢谢分享
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部