前言
UE4中存在4种引用关系
-
Object Reference
-
Class Reference
-
Soft Object Reference
-
Soft Class Reference
下面分别介绍各自作用及优缺点
Object Reference
直接引用资源,也就是“硬引用”。其引用的类会自动被实例化加载到内存中。
Class Reference
对一个UObject的class的引用,C++中用TSubclassOf来表示。例如以下代码可指定该类只能是派生自UType的子类。可以起到一个筛选的作用。
UPROPERTY(EditDefaultsOnly)
TSubclassOf<UType> Type;
Soft Object Reference
软引用FSoftObjectPath,为了解决Object Reference的硬引用的缺点而引入的。可以做到当无需此资源时,无需将资源加载到内存中。只要保存一个资源路径就好。
Soft Class Reference
FSoftClassPath继承于FSoftObjectPath,其返回的是UClass*
FSoftClassPath于FSoftObjectPath的对比和使用
(1)FSoftObjectPath我们只需要某种特定资源的路径,可以用
UPROPERTY(EditAnywhere, meta = (AllowedClasses ="Material,StaticMesh"))
FSoftObjectPath softObjectPath;
筛选出材质和静态网格资源
注意AllowedClasses ="Material,StaticMesh" 的 Material和StaticMesh不能有空格,否则会出现编辑器上的bug
(2)FSoftObjectPath的AllowedClasses 只能筛选"Material,StaticMesh,Particle等资源"
像我们自定义继承UObject的类用AllowedClasses 就无法筛选了。
这时候就需要FSoftClassPath 和 MetaClass。
UCLASS(config=Game)
class AMyCharacter : public ACharacter
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, meta = (MetaClass = "MyActor"))
FSoftClassPatht testClassPath;
}