UE中的指针,弱指针,软指针
🤿

UE中的指针,弱指针,软指针

Tags
UE5
指针
Published
March 7, 2018
Author
think 01

✔ 使用这些指针类型:

 
  • TSoftObjectPtr:用于引用可能已加载或未加载的对象。即使对象在其他未加载的关卡中,也可以指向该对象。当指向需要即时加载的资产(如网格)时,可以与异步加载函数一起使用。与蓝图中的“Soft Object Reference”变量类型相同。
  • TSoftClassPtr:用于引用可能已加载或未加载的类或蓝图类型。一旦加载,它将提供一个类类型,可以从中创建实例。可与异步加载函数一起使用进行加载。与蓝图中的“Soft Class Reference”变量类型相同。
  • TWeakObjectPtr:用于引用已实例化的对象。如果对象被销毁或垃圾回收,将解析为null。

❌ 不要使用这些指针类型:

 
  • FSoftObjectPath:被其他指针类型内部使用。由于不缓存结果,速度较慢。在编辑器中设置时,它将指向UBlueprint类而不是UBlueprintGeneratedClass,这通常不适用于游戏代码。但是,编辑器插件的制作者可能需要该功能。
  • FSoftClassPath:与FSoftObjectPath类似,但带有一些与加载类相关的辅助函数。现在主要是一种遗留类型。
  • FSoftObjectPtr:非模板化且不在蓝图中公开的TSoftObjectPtr版本。

软指针和弱指针:

 
  • 软指针(Soft Pointer)是一个对象的路径字符串表示,它可以是已加载或未加载的对象。它在内部存储一个弱指针(Weak Pointer),用于在查询并找到对象后进行缓存。
  • 弱指针(Weak Pointer)仅引用已实例化的对象,不像软指针那样存储路径名称。

软指针(Soft Pointers):

 
  • TSoftObjectPtr和TSoftClassPtr是应该使用的主要软指针类型。
  • FSoftObjectPath是所有软指针类型的内部使用类型,不适合用于游戏代码。
  • FSoftClassPath是FSoftObjectPath的类似版本,主要用于加载类,但现在已过时。
  • FSoftObjectPtr是TSoftObjectPtr的基类,不建议直接使用。

弱指针(Weak Pointers):

 
  • 弱指针不像软指针那样存储路径名称,它们仅引用已实例化的对象。
  • 弱指针通过对象索引和对象序列号来引用对象。当调用Get()方法时,它会首先根据对象索引从GUObjectArray获取对象,然后使用对象序列号进行验证。
  • 弱指针在验证对象的有效性时使用IsValid()方法,如果对象无效,则返回null。

总结:

软指针和弱指针是指向UObject的有效且安全的方式。弱指针不需要作为UPROPERTY存储,并且在解引用时具有一些开销。弱指针还可用于订阅委托,而无需担心在销毁时取消订阅。建议使用TSoftObjectPtr和TWeakObjectPtr作为首选指针类型。