:
问题确认了。NpcEditor 的 refreshNpcIndex 优先从云端加载 "npc_index",如果云端不可用则从本地 npc_sprites/index.json 读取。而 NpcPickerPanel 只读本地文件,如果本地 index 文件不存在就直接返回空。修复方案:给 NpcPickerPanel 添加云端 fallback,异步加载 index 后再打开弹窗。同时增加扫描本地 npc_sprites/ 目录作为兜底。
:
一、先纠正一个关键误解你说的"单机模式有 clientCloud,多人模式无 clientCloud"并不准确。实际情况是:模式 clientCloud CloudProxy 路由单机 ✅ 直接可用 CloudProxy:Set() → clientCloud:Set()多人 ✅ 依然存在 CloudProxy:Set() → Client.CloudSave() → Server → serverCloudCloudProxy 已经做了这个透明切换(CloudProxy.lua:46-57)。所以不存在"有/无 clientCloud"的问题——两种模式下 CloudProxy 的接口完全一致,只是底层路由不同。这意味着 MapEditor 用 cloud:Set("map_xxx", data) 保存的地图,在两种模式下都能工作——但存到了不同的地方:单机:存进你自己的 clientCloud 个人空间多人:存进 serverCloud 的你的 userId 分区两种模式下,其他玩家都读不到你的地图。 这才是核心问题。
:
流程跑通情况:3/5 已实现,2 个关键环节缺失已跑通的部分环节 代码位置 状态processedLevel 门控 Tower.lua:624-625 — noProcessMul=0.2 / preProcessMul=5.0 已实现物理击杀 → Split 触发 Tower.HandleKillProducts() → Enemy.Split() (Tower.lua:591-592) 已实现子体继承 processedLevel+1 Enemy.Split() 第 387 行 processedLevel = enemy.processedLevel + 1 已实现酶粒子随机剥像素 + VFX EnzymeParticle.StripPixel() → Enemy.StripPixel() → 随机移除 key → pixelStrip VFX 已实现渲染优先 instancePixels Render.lua:1333-1335 — instancePixels 优先于 npcSpriteCache_ 已实现所以你图中的主干流程(入场 → 酶打不动 → 牙齿咬碎 Split → 子体酶×5.0 → 像素剥落)是通的。















