主题
单位换模与表现重建
主参考:单位换模与附属表现重建。涉及 GameGraph 时同时按需阅读桥接语义和骨骼动画。
先确定项目要控制什么
- 使用框架主模型:服务端
ModelSwap(link, tag)/ModelSwapPop(tag),客户端在本轮新模型和所需绑点就绪后恢复默认表现。 - 自定义外观控制:服务端同步项目自有
PropertyUnit外观值,客户端从当前状态管理自己创建的模型子树;Unit 继续负责身份、移动与玩法属性。 - 只加装备或外观部件:读自动挂载模型表现或GameGraph 附加模型,无需重建整个主模型。
常规重建规则
unit.RebuildDefaultActors()完全清理单位作用域,并默认重建当前技能、Buff 等附着对象的默认 Actor;false只处理单位作用域。单个技能 / Buff 用自己的RebuildDefaultActors()。- 携带物品的
HostedActors由物品记账,却也在持有者 Unit 的 ActorScope 中。单位重建会清掉它们,必须随后遍历InventoryManager.Items.OfType<ItemMod>()调用RebuildHostedActors(),否则装备外观不能恢复。单独恢复物品时只调用物品入口。 - 明示副作用:清理范围中的动态 Actor 同样销毁,不播放淡出;只恢复当前数据的
ActorArray,旧引用失效,实例变换和播放进度丢失,声音 / 动画可能重启。技能冷却、Buff 层数与时长、装备属性和授予技能不重置。未登记到对应集合的节点由项目清理。 - 物品重建按当前槽位、持有者和启用条件创建,只处理该物品记录的表现;不恢复地面自身或品质特效。不要拿
UpdateModifications(forced: true)代替表现重建。 - 服务端调用只是给当前可见客户端的一次请求,不等待模型加载。客户端调用只影响本地。不要生成
ModelSwap(); RebuildDefaultActors();并承诺顺序可靠,也不要以固定帧数 / 延迟作为模型已就绪的证据。当前没有通用的脚本换模前后通知;项目需核对目标实例和实际绑点,取消过时请求。
高级路线必须保留的知识
- 换模保留单位根 Node,替换模型子树、骨架和 Socket。普通子表现靠父子变换跟随,不需要每帧查找绑点;换模前若父节点就是 Socket,可读取
Parent.Name,有自建中间锚点则需要项目语义映射。 GetAnimatedModel()是骨骼渲染组件包装,不是整个主模型管理器。SetModel(mesh)只改网格 / 骨架,不负责完整 Prefab、材质、动画、Socket 和状态条更新。只销毁项目自己拥有的组件 / 子树,不能随意删除框架主模型组件或单位根。- 自建外观在
EventUnitCreate和对应EventUnitPropertyChange都按当前值应用;前者包含重新进入客户端视野。合并属性与节点就绪顺序、连续形态请求;销毁 / 离开视野时清理自建实例和订阅。服务端独立维护形态的玩法判定。 - 先准备新实例、核对挂点,再迁移子表现并释放旧实例;
Prefab.CreateInstance(parent)必须有父节点。模型组件常在子节点中,复杂 Prefab 要明确选择主骨骼宿主。 - 对框架主模型的普通 Actor 用
Actor.AttachTo(unit, socketName)更新 Actor 挂接关系,再恢复需要保留的局部变换。直接Node.Parent/AddChild()不会同步 Actor 的父子记账和专用绑定。 - 自建 Prefab 的 Socket 不会自动成为
Actor.AttachTo(unit, socketName)的查询目标;需要项目挂接逻辑。若把 Actor 改挂自建锚点,先Actor.Detach(),再操作其表现 Node,并自行管理变换、清理及独立的作用域归属。默认重建不会自动路由到自建模型。 GetSocket(name)返回骨骼 Node + 局部变换快照;要在骨骼下建锚点并应用这些变换。它不等于 Prefab 内实际 Socket Node。替换后重新查找,不复用旧骨骼、Socket 或组件。- 只在本轮迁移时需要保留的实例可用临时快照;C# Node 包装不保住底层节点,必须在旧子树释放前读出信息并把子表现迁到仍被持有的节点。事后扫描不能保证恢复已消失的绑点名。
- 骨骼附加模型需解除旧
AdditionModelAttachment并向新宿主重新挂载;材质、光束等按专用引用关系处理,不能承诺移动 Node 覆盖全部 Actor 类型。
用现有 API 自建外观不需要为方案本身新增客户端能力,但具体 API 仍需满足目标客户端支持范围。代码编译只证明签名正确;模型、骨架和绑点效果应在实际资源中验证。