Type: concept
Confidence: 0.90
Created: 2026-04-16
Updated: 2026-04-16
Tags: UrhoXLua序列化二进制IO游戏引擎游戏开发

UrhoX序列化系统API

概述

UrhoX 序列化体系由 Serializer(写接口)和 Deserializer(读接口)两个抽象基类构成,支持基本类型、数学类型、资源引用和 Variant 等引擎内建类型的二进制序列化。

关键内容

Serializer — 写接口

Serializer 定义统一的写方法集,被 FileVectorBufferNamedPipe 等具体类实现。

支持写入的类型(返回 bool,表示成功与否):

类别 方法示例
整型 WriteIntWriteShortWriteByteWriteUIntWriteInt64
浮点 WriteFloatWriteDouble
数学类型 WriteVector2/3/4WriteQuaternionWriteMatrix3/3x4/4WriteColorWriteRectWriteBoundingBox
字符串 WriteStringWriteFileIDWriteStringHashWriteLine
压缩 WritePackedVector3(maxAbsCoord)WritePackedQuaternion
引擎类型 WriteResourceRefWriteResourceRefListWriteVariantWriteVariantVectorWriteVariantMap
网络 WriteVLE(可变长编码)、WriteNetID
-- 将游戏数据写入文件
local f = File("save.dat", FILE_WRITE)
f:WriteInt(level)
f:WriteFloat(health)
f:WriteVector3(playerPos)
f:WriteLine(playerName)
f:Close()

Deserializer — 读接口

Deserializer 定义统一的读方法集,与 Serializer 对称。提供游标控制和校验:

-- 游标控制
deserializer:Seek(0)          -- 跳到绝对位置
deserializer:SeekRelative(4)  -- 相对偏移

-- 检查
local pos = deserializer:GetPosition()  -- 当前位置
local size = deserializer:GetSize()     -- 总大小
local done = deserializer:IsEof()       -- 是否结束

属性(只读):namechecksumpositionsizeeof

读方法命名规律:ReadIntReadFloatReadVector3ReadStringReadVariant 等,与写方法一一对应。

设计模式

完整读写循环示例

-- 写
local buf = VectorBuffer()
buf:WriteInt(42)
buf:WriteVector3(Vector3(1, 2, 3))
buf:WriteString("item_name")

-- 读(需先重置游标)
buf:Seek(0)
local id = buf:ReadInt()          -- 42
local pos = buf:ReadVector3()     -- (1, 2, 3)
local name = buf:ReadString()     -- "item_name"

来源

相关