Skip to main content

序列化与类型默认对象

组件框架提供了序列化机制,基于序列化机制和类型默认对象(每一个继承自LObject的对象,都会在需要的时候生成一个类型默认对象),目前可以做到统一的对象复制与粘贴,统一的存盘(只存差异值),预制件及预制件同步。

目前通过flexi/include/publuc/module.h中的手动反射宏,或者使用macros_reflection.h+reflang.exe自动生产反射两种机制生成的属性(称为TagProperty),会自动进行序列化。没有通过宏反射标注的属性,可以通过重载LObject::Serialize函数,通过SERIALIZE_INNER_PROP宏来进行序列化。

game_object.cpp

void LGameObject::Serialize(Stream& ar)
{
SERIALIZE_INNER_PROP(ar, m_pInputComponent);
SERIALIZE_INNER_PROP(ar, m_pRootComponent);
SERIALIZE_INNER_PROP(ar, m_pActorOwner);
SERIALIZE_INNER_PROP(ar, m_pLogicOwner);
SERIALIZE_INNER_PROP(ar, m_pCreateParent);
DISABLE_ATTRIBUTE_DEPRECATED_WARNINGS
SERIALIZE_INNER_PROP(ar, m_ActorUpdate);
ENABLE_ATTRIBUTE_DEPRECATED_WARNINGS
SERIALIZE_INNER_PROP(ar, m_GameObjectUpdate);

SERIALIZE_INNER_PROP(ar, m_bExchangedRoles, CPF_Transient);
SERIALIZE_INNER_PROP(ar, m_bSeamlessTraveled);
SERIALIZE_INNER_PROP(ar, m_bHiddenEd);
SERIALIZE_INNER_PROP(ar, m_bHiddenEdLevel, CPF_Transient);

SERIALIZE_INNER_PROP(ar, m_bEditable);

SERIALIZE_INNER_PROP(ar, m_bEnableCollision);
SERIALIZE_INNER_PROP(ar, m_bHiddenEdTemporary, CPF_Transient);

SERIALIZE_INNER_PROP(ar, m_nLocalControlType);

SERIALIZE_INNER_PROP(ar, m_nRemoteControlType, CPF_Transient);

SERIALIZE_INNER_PROP(ar, m_ActorLabel);
SERIALIZE_INNER_PROP(ar, m_strActorLabel);
SERIALIZE_INNER_PROP(ar, m_FolderPath);
SERIALIZE_INNER_PROP(ar, m_Tag);