UE4 | C++ | 理解UPROPERTY(instanced)

UE4 | C++ | 理解UPROPERTY(instanced)

1. 背景

最近在阅读源码,其中有一段物理碰撞体的部分使用的是UPROPERTY(instanced),一开始读到这部分的时候比较困惑,我觉得如果只是想要对同一个类有不同的实例对象的话可以直接初始化不同的对象啊,并不需要单独设置一个标签。

下面我来举例说明一下instanced标签的作用。

2. 举例说明

我来举个例子说明一下instanced实例化 这两个概念。
观察下面两个类型的变量,一个是UTexture2D,另一个是UStaticMeshComponent

UPROPERTY( Category=Test, EditDefaultsOnly )
	UTexture2D* TestAsset;

UPROPERTY( Category=Test, EditDefaultsOnly )
	UStaticMeshComponent* TestComponent;

具有这两个属性的Actor,这两个子对象的UPROPERTY部分完全相同,但实际使用的时候我们却希望他们有不同的表现:

  1. 对于纹理UTexture2D这样的资源文件,如果咱们有10个不同的actor使用相同的纹理,则咱们肯定不希望有10个完全一样的相同纹理的副本(Ctr+C,Ctr+V十遍确实不太好 XD ) 。
  2. 而对于UStaticMeshComponent,咱们又确实希望相同的10个Actor都能拥有属于他们各自的组件副本。

前者未实例化,而后者则是实例化。

3. 实例化与非实例化

如上所述,实例化就是咱们希望某种类型的所有属性都相同的一种行为。
为此,UE4提供了两种标签

  1. DefaultToInstanced 用来使得这一种类型的所有属性都有着相同的行为。
  2. instanced 属性关键字用来 基于每个属性进行设置。

( 顺带说一句,将instanced用于UClass属性并没有什么用。 相同的UClass的不同实例不会产生不同的结果,而所有这些新构造的对象都将使用相同的CDO来初始化其属性。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值