如果成功序列化出Actor,使用SetChannelActor将其设置为Channel的当前Actor,并设置相应的标志。同时调用NotifyActorChannelOpen通知ActorChannel已打开,并设置RepFlags.bNetInitial为true代表这是首次初始化操作。 接下来再来看SetChannelActor做了什么吧,总的来说该函数用于设置Channel关联的Actor,并执行一系列初始化操作,例如...
voidUStruct::SerializeVersionedTaggedProperties(FStructuredArchive::FSlotSlot,uint8*Data,UStruct*DefaultsStruct,uint8*Defaults,constUObject*BreakRecursionIfFullyLoad)const{if(UnderlyingArchive.IsLoading()){//...用于加载的属性迭代,即反序列化}else{//...用于保存的属性迭代,即序列化}} 蓝图资产的修改值与...
UScriptStruct,只可包含属性,可以理解为C++中的POD struct,在UE里,你可以看作是一种“轻量”UObject,拥有和UObject一样的反射支持,序列化,复制等。但是和普通UObject不同的是,其不受GC控制,你需要自己控制内存分配和释放。 UClass,可包含属性和函数,是我们平常接触到最多的类型 原子类型: UEnum,支持普通的枚举...
struct StructName { GENERATED_USTRUCT_BODY() }; b.声明结构体时说明符可被添加到声明,以便控制结构体与引擎和编辑器诸多方面的相处方式: 1.USTRUCT(Atomic):意味着这个struct要一直作为一个单独的单元进行序列化。 2.USTRUCT(BlueprintType):将此结构体作为用于蓝图中变量的类型。 3.USTRUCT(NoExport):不会为...
例如:Config修饰符来从指定ini文件中读取数据、Transient修饰符来指明不需要序列化、Exec修饰符来指明该函数可被控制台调用 Replicated修饰符给属性加上同步属性、Server修饰符表明该函数为一个对服务端的RPC调用,等等 元数据UMetaData其实就是个键值对的集合,用于为编辑器提供分类、友好名字、提示等信息,Android、IOS、...
struct FJsonData { GENERATED_USTRUCT_BODY() UPROPERTY() FNested nested; UPROPERTY() FString foo; UPROPERTY() TArray<FBar> bar_arr; //Transient 会阻止该属性被序列化 UPROPERTY(Transient) FString PropertyToIgnore; }; 读写操作: Java代码
struct FJsonData { GENERATED_USTRUCT_BODY() UPROPERTY() FNested nested; UPROPERTY() FString foo; UPROPERTY() TArray<FBar> bar_arr; //Transient 会阻止该属性被序列化 UPROPERTY(Transient) FString PropertyToIgnore; }; 读写操作: void UJsonSerializeComponent::Read() ...
虚幻的序列化这块是个人比较喜欢的技术点,个人在工作中也山寨了个简化版,UE4延续了UE3的序列化方案。它使用了访问者模式(Vistor Pattern),将序列化的存档接口抽象化,其中FArchive为访问者, 其它实现了void Serialize( FArchive& Ar )接口的类为被访问者。FArchive可以是磁盘文件访问, 内存统计,对象统计等功能。
比如ClassA里面有一个StructB属性,这个属性被标记同步,StructB属性会被放到parents里面。由于StructB里面有一个Int类型C属性以及D属性,那么C和D就会被放到Cmd数组里面。有关结构体的属性同步第5部分还有详细描述。 3、发送同步数据流程分析 前面我们基本上已经做好了同步属性的基本工作,下面开始执行真正的同步流程。