UE FastArray的分享
2023-06-10 15:18 作者:skycontact | 我要投稿
使用FastArray
第一步:聲明一個結(jié)構(gòu)體繼承自 FFastArraySerializerItem
第二步:聲明一個Array結(jié)構(gòu)體繼承自 FFastArraySerializer;并且使用TArry來包含第一步聲明的結(jié)構(gòu)體
第三步:聲明結(jié)構(gòu)體特征
第四步:使用的關(guān)鍵函數(shù)
增加或者修改元素后調(diào)用函數(shù)FFastArraySerializer::MarkItemDirty();
刪除元素后調(diào)用函數(shù)FFastArraySerializer::MarkArrayDirty();
例:
第五步:可以實現(xiàn)一些輔助函數(shù)
元素添加:PostReplicatedAdd
元素修改:PostReplicatedChange
元素刪除:PreReplicatedRemove
這三個函數(shù)只會在連接到服務(wù)器的客戶端才會被被調(diào)用,服務(wù)器以及單機均不會被調(diào)用。
如果一個元素是被刪除,之后又添加了新的,不一定會調(diào)PreReplicatedRemove()以及PostReplicatedAdd(),有可能只有一個PostReplicatedChange()。
FastArray數(shù)據(jù)結(jié)構(gòu)
FFastArraySerializerItem
FFastArraySerializer
FastArray的原理
使用的關(guān)鍵函數(shù)解析
FFastArraySerializer::MarkItemDirty()
FFastArraySerializer::MarkArrayDirty()
例:空Array,添加元素后調(diào)用MarkItemDirty
初次序列化的流程
第一步:構(gòu)造數(shù)據(jù)
例子
例:數(shù)組有A、B和C三個元素
例:
第二步:序列化
第三步:執(zhí)行函數(shù)FNetSerializeCB::NetDeltaSerializeForFastArray()
反序列化的流程
第一步:做一個ItemMap
第二步:執(zhí)行函數(shù)FNetSerializeCB::NetDeltaSerializeForFastArray()
第三步:反序列化
非初次序列化的流程
第一步:判斷是否需要進行序列化
第二步:構(gòu)造數(shù)據(jù)
例:
第三步:序列化
第四步:執(zhí)行函數(shù)FNetSerializeCB::NetDeltaSerializeForFastArray()
標簽: