WECHAT

扫码添加微信

YoungFan 微信二维码
← 返回 UE5 笔记
开发笔记已完成

Actor和ActorComponent网络身份标识

Actor和ActorComponent网络身份标识

UE5多人游戏C++

NetGUID

UE用NetGUID标识每个可复制的Actor,前后端通过这个ID对应同一个对象。

NetGUID映射表

UNetDriver(全局唯一)通过FNetGUIDCache* GuidCache成员持有全局的NetGUID与FNetGuidCacheObject映射表。 前后端连接成功后,前后端各自创建一个UNetConnection,UNetConnection通过UPackageMap* PackageMap成员引用全局的UNetDriver::FNetGUIDCache映射表。 PackageMap管理每个UNetConnection的连接状态:AckState(哪些 NetGUID 已确认)、ExportBunches(待发送的导出包)。并且提供抽象接口,可替换实现。

UActorComponent网络身份

UActorComponent默认分配独立的NetGUID。 UActorComponent属性复制和RPC调用走的是所属Actor的ActorChannel,内部通过ObjectID标识组件对象。 即便向一个UActorComponent发送RPC,底层也是向这个UActorComponent所属的Actor发送RPC,只不过会用额外的额参数指向这个UActorComponent。

// UNetDriver::ProcessRemoteFunction
virtual void ProcessRemoteFunction(
    AActor* Actor,           // ← RPC 绑定到这个 Actor
    UFunction* Function,
    void* Parameters,
    FOutParmRec* OutParms,
    UFrame* Stack,
    UObject* SubObject       // ← SubObject 可选,但仍在 Actor 通道内
);

// ActorChannel.h
virtual void ProcessRemoteFunction(
    AActor* Actor,
    UFunction* Function,
    void* Parameters,
    FOutParmRec* OutParms,
    UFrame* Stack,
    class UObject* SubObject = nullptr  // ← 即使指定 SubObject
);                                      //   仍然走 Actor 的 ActorChannel

Discussion

留言讨论

无需注册账号
正在加载留言区…

发表留言时,评论服务会记录必要的 IP 与 User-Agent 信息,用于安全审核和防止滥用。