切换深浅主题
关内美术入口
入口是 Assets/SGame/CubeLand/Runtime/Presentation/CubeLandGame.cs。CubeLand Core 负责命中、弹量、机关和关卡状态;PixelFlow 资源只提供显示。
| 内容 | 正式入口 |
|---|---|
| 原生炮台、骨骼、弹量字体和动画 | CubeLand/Art/PixelFlow/Shooter,来源 PixelFlow NormalPao.prefab |
| 普通弹体、拖尾与命中碎片 | Runtime/Presentation/CubeLandImpactEffects.cs;正式发射复用 PixelFlow/Bullet.prefab 的原网格、逐色弹体材质及 TrailRenderer,碎裂与受击分别复用原 fx_pfb_Fragment、X_pfb_Hit |
| 暂存槽和警告框 | CubeLand/Art/PixelFlow/Slot,来源 ShooterBase.prefab;数量随关卡槽位配置 |
| 背景、四角植物和主光 | CubeLand/Art/PixelFlow/Environment;SetCornerWorldPositions 接收现有 UI 的四角坐标;上方仅显示 CubeLand 三维物体,不保留 PixelFlow 水池、彩色滑道或托盘 |
| 关内 UI | Assets/SGame/CubeLand/Art/App/UI/NewPanel/UIGamePlay/Prefab/UIGamePlay.prefab;独立视觉依赖在 Assets/SGame/CubeLand/Art/PixelFlow/UI |
| 原生色板对应 | CubeLandPixelPalette.cs 和 PixelFlow/Materials/{Shooter,Bullet,Trail}_N.mat |
| 三维方块、机关、冰壳与链 | CubeLandBoardView 使用原 CubeLand 方块网格/贴图和 PixelFlow 按颜色区分的原材质;机关由 CubeLandMechanicGeometry、CubeLandShooterArt 提供 |
| 方块颜色材质绑定 | Runtime/Presentation/CubeLandBlockMaterials.cs、Art/Gameplay/PixelFlow/BlockMaterials.asset;原材质在 Art/PixelFlow/Materials/Blocks,通过 GUID 间接引用 |
| 共用镜头、模型和槽位布局 | Runtime/Presentation/CubeLandComposition.cs、Art/Gameplay/Composition.asset;地址 CubeLand/Art/Composition |
共用构图与标定
正式游戏与编辑器游戏视图共用 CubeLandComposition,通过 CubeLandArtAssets.Load<CubeLandComposition>("Composition") 读取 CubeLand/Art/Composition。相机投影、视野与窄屏适配、模型锚点与缩放、槽位/底框/队列布局、炮台抬角与弹道弧度均从该资产读取,不再以旧的运行时代码常量作为布局依据。参数以当前资产为准,调整后需重新验收相关截图。
3D 标定画幅为 540×1172,Canvas 保持既有 UI 适配。当前采用正交投影,多帧及留出帧拟合未显示透视收益。当前实际导出对照中,已测空槽中心误差不超过 0.5px、内框包围盒尺寸误差不超过 1px;队列数字中心与字身高度误差均不超过 1px。当前槽位皮肤的圆角与参考不同:同为 66×65 内框时,拟合半径约 21.55px/12.4px,暗区轮廓 IoU 为 91.67%。整体缩放或九宫格会破坏已对齐的边界/边厚,因此保留现有贴图,不宣称槽位外观全部像素一致。
模型大小、位置和旋转按用户确认,以同关未操作初始状态对照验收。本地参考录屏第 0 秒已处于中途消除,因此模型初态采用 XmenSixFour 第 21 关视频 的 t=0.000 解码帧(PTS=0,1920×1080;游戏区 XYWH=710,0,500,1080)。t=0.700 仍为完整外壳和 5 个空槽,t=0.800 首次上阵。该参考用于核对模型构图;540×1172 版本是重采样图,原始宽高比相差约 0.48%,像素误差需保留此边界。
模型整体大小由 ModelScaleMultiplier=.65 控制,ModelAnchor=(.01283,5.60998,0) 和 ModelRotationOffset=(5.7998,-4.30114,-8.3277) 保留。关卡作者的 view.scale 仍参与相对缩放;GetModelScale(view, bounds, occupiedBounds) 再根据实际目标各自的初始包围盒、原始 pivot、初态旋转及自动旋转轴求整圈投影范围(不使用整体空包围盒角点收缩球形模型),将模型限制在参考画幅中间的 ModelViewportWidth=.9 内。该限制只在正交相机下启用,不改变相机、槽位或炮台尺寸。正式游戏与编辑器试跑使用同一份初始目标范围;CalculateModelMatrix 也可接收相同范围复现缩放,细长、偏轴模型不能只验初态,需检查转横后的边缘留白。旧尺寸标定报告基于 .76843,其中的初态轮廓误差不代表当前较小构图;当前第21关初态约421×409px;第2关香蕉初态约131×418px,绕自动旋转轴整圈实测最宽约416px,最靠边位置仍留约27px。
view.pos、view.rot、view.scale、view.center 参与模型变换;模型布局与炮台/槽位尺寸分别配置,不按关卡尺寸重新 Fit 全场。保留资源内部原生 TRS,实例外层根位置由共享构图提供,禁止叠加源 Prefab 保存时的摆放位置。编辑器的自由旋转视角用于改关;像素验收使用“游戏视图 / 试跑”的录屏叠图及原尺寸截图导出。
弹量使用原骨骼子节点上的 Baloo2-ExtraBold TMP、Block03 描边/投影材质,基准字号 10 乘以构图配置的 AmmoLabelScale,单行显示且不换行。文字世界旋转 (90,0,0),后排透明度 150/255;仅 CubeLand 超过三字符的特殊状态文本缩小字号。原二维棋盘和原 PaoCell/Bullet 玩法脚本不迁入。
植物角点真实数组顺序是左上、右上、左下、右下。Environment 仅保留 Map/BG 和原 Directional Light;移除 Map/3、Map/Conveyor1、Map/Swim。下方暂存槽仍由 Core 槽位数量创建,独立于已移除的环境托盘。
参考弹道录屏为本地 Feishu20261026-185734.mp4(540×1172、24fps)。初段左炮与124.7917秒开始的中心炮单发,屏幕弦长分别约330/308px、最大垂距约3.5/4.4px,可辨持续至少约.58/.67秒;这支持近直线与较慢的视觉过程,不能单凭二维录屏确定正交/透视或世界重力。参考已处消除中途,模型大小比较须区分同关初态和消除中途。
入槽动画与射击节奏
炮台队列到暂存槽复用 AntHaul click.anim,以 CubeLand/Art/Animations/ShooterDeploy 地址预载,资产位于 Art/Gameplay/Animations/ShooterDeploy.anim。以独立采样对象读取原始抬升和缩放曲线,不挂载 Ant 业务组件、不执行原动画事件;保留 PixelFlow 猪的朝向并同步其已有 Click 骨骼动画。
原时序为 1/30 秒起移、11/30 秒到槽、0.6 秒完整结束。世界位移线性插值,连体组按原距离规则使用 1~2 倍播放速度,队列以 12 单位/秒补位。Core 立即预约槽位;FiringReadyRule 在入槽动画完成前阻止开火及满槽停滞失败,入槽后还需满足炮口朝向门控才能开火,暂停时冻结。生成器发出的炮台从生成器当前位置出发,重新开始关卡时清理旧运动状态。
炮台使用独立水平/抬角节点追踪目标,实际 FirePoint 既提供寻敌射线起点,也提供子弹出生点。BoardState 返回可见表面 ShotSolution;ShotState 共用发射预占、飞行时间和抵达结算。普通弹的默认控制点位于炮口与落点中间,ProjectileArcHeight=0,不加入相机平面内的侧向弯曲。保留世界竖直抬升参数供明确的美术调整使用;炮口瞄准和绘制共用控制点。ProjectileFlightDuration=.7 秒,GetProjectileProgress 是根据本地参考录屏中单发轨迹拟合、并用另一炮位核对的先加速后减速视觉进度;它不是对原版物理或精确命中逻辑的反编译结论。尾迹回看 .16 秒的同一进度,弹头世界半径从 .19 缩到 .14,独立于关卡模型缩放。发射扣弹和HP预占保持在发射时,到达结算与这份飞行寿命一致。可射击性仍由直线遮挡判断,弧线不提供越障能力。模型转动时落点保持目标局部空间关系,弹量标签独立保持可读朝向。
普通射击默认间隔为 0.035 秒,来自 CubeLand 0.5.9 APK 中 CreativeCanvasController.shootingSpeed1..5OrMoreBlasterShooting → CreativeSlider → Slider 的内置参数 35 / 1000。普通原生协程先发射,再等待该间隔;保留每帧最多一发、不补发积压弹的方式。实际间隔受帧率及可用目标限制;胜利清场分支和开发面板运行时改值不属于此默认值。
配色与边界
猪体使用 PixelFlow 原材质和烘焙贴图,不再从白猪生成重着色纹理。炮台的普通 CubeLand 色 ID 1..21 一对一映射到不同 PixelFlow 原生色;PixelFlow 原生色板与 CubeLand 色板不同,例如炮台逻辑 Yellow 绑定的 PF6 偏黄绿。22 彩虹炮台无原生等价,使用原米金外观并保留 R 状态标识。炮台色板与下面的方块基色适配分别配置,JSON 和逻辑色 ID 不改。机关和消除碎片仍使用 LevelPalette.Voxel。
普通三维方块通过 BlockMaterials.asset 显式绑定 PixelFlow 的 22 个原生基材质及 44 个颜色变体,共 66 个材质;源 .mat、.meta 逐字节保留,包括父材质和材质变体引用。每色初始普通体素数量为 N 时,按关卡 ID、逻辑颜色和整数坐标的确定性哈希选出 floor(N × 15%) 个格子,再分别确定使用变体 1 或 2,其余使用基材质。该分配不消耗 UnityEngine.Random,不因目标消除、分块重建或输入顺序改变而重排。
普通 Cell 直接使用各色 PixelFlow 原材质的基色、底图、粗糙度、IOR、环境补光和两组高光,不再通过 MaterialPropertyBlock 覆盖颜色、贴图或光照。CubeLand JSON 和逻辑色 ID 保持不变,显示颜色由 BlockMaterials.asset 的原生材质映射决定;wall 继续使用原灰色材质。机关仍使用 LevelPalette.Voxel。
正常进关使用 PixelFlow 关内 UI 视觉,保留现有存档、道具与进关回调。Ant 额外的速度按钮/倒计时隐藏,关内不初始化 Ant Banner 留位布局。
普通三维 Cell 通过 BlockMaterials.asset 的 CellMesh 绑定 PixelFlow NormalBlock2.prefab → NormalBox/Simple 使用的原 cube_YF_ZU.fbx 子网格(287 顶点、348 三角形)。FBX 和 .meta 保留源文件与 GUID,CellMeshEuler=(-90,0,0) 对应原 Prefab 的模型朝向。渲染层将原模型的范围居中适配到单位格,使用逆转置矩阵适配原顶点法线;保留原曲面拓扑和 UV,不用硬立方体或法线贴图代替。此适配仅改变 Cell 外观,不改关卡整数坐标、命中范围、模型根节点或模型调参配置。
Cell 仍按空间分块、实际 PixelFlow 材质合并绘制。外层 Cell 保留完整原曲面,使相邻格子的圆角接缝连续;只剔除六面均被占据的内部 Cell,消除后重建相邻分块并显露原来被包围的格子。合并顶点数超过 65535 时使用 32 位索引,避免复杂网格截断。正式绘制与编辑器隔离预览使用相同网格和共享材质;无逐格 GameObject、材质实例或 Cell 属性覆盖,存活格子的材质变体不重排。编辑器的数据示意着色仍由 Editor/LevelPreview/LevelPreviewRenderer.cs 提供。
Cell 使用 Art/App/Shader/New/URP_PBR_Simple_Block_Tonny.shader 的 PixelFlow 原生光照计算,包括几何法线、GGX/Fresnel、SH 环境光和原额外高光方向。与源 Shader 的唯一差异是为 CubeLand 当前 URP Forward+ 渲染路径保留 _FORWARD_PLUS 编译变体;不改原反射公式。此前为竞品 18 关添加的 AG 倒角法线、坐标哈希微法线、有限距离柔反光、逐色/共用色彩校准及其序列化配置已移除。原 Tex_Base_Voxel、Tex_Normal_Voxel 贴图资产保留,普通 Cell 不再覆盖原材质来读取它们。
Cell 的圆角、鼓起格面和柔和高光需要原网格法线、原材质和原 Shader 配套;仅恢复 Shader 而继续使用硬立方体不能还原该表现。CubeLand 的三维关卡排列、模型调参、相机构图和场景灯光保持原有配置,因此不将两款游戏的整幅画面视为逐像素一致。原 Shader 没有 ShadowCaster,当前不额外增加自投影或空间 AO;其 _AO_Val 调节原阴影/环境补光,不等同于计算几何遮挡。
LevelGamePreview.CaptureFrame 导出 PNG 时将线性 UNorm 预览目标编码为 sRGB,避免把偏暗的线性数据误当显示颜色;这是导出校正,不能通过反向提高正式材质亮度代偿。需要对照参考视频时,必须先匹配模型姿态和构图,并将参考 Rec.709 视频明确转换到 sRGB,与 Unity 的 sRGB 导出使用相同颜色空间;不能直接把播放器截图或未转换的视频编码 RGB 当作材质目标。完整初态与消除中途帧须分别比对;局部格面标定不代表整段光影与后处理已经还原。
倒角与亮帽形状还需使用 2 倍尺寸渲染、下采样回相同目标画幅的结果对照,排除低分辨率锯齿对边缘硬度的干扰。高分辨率导出是形状标定的诊断条件,不代表正式游戏已经启用抗锯齿;正式渲染设置需另行核对管线与相机配置。
命中与消除特效
CubeLandGame.ShotLaunched 经 CubeLandImpactEffects.CreateProjectile 调用 CubeLandPixelArt.CreateBullet,正式使用 PixelFlow 原 Bullet_new.prefab 的已迁入视觉部分。弹体和拖尾分别绑定 PixelFlow/Materials/Bullet_N、Trail_N,保留原网格、内部 TRS、拖尾宽度曲线、渐变和贴图。Core 的发射、预占、飞行时长与抵达结算不变;位置和朝向适配现有三维弹道,现有半径与拖尾时长配置仍控制实例缩放和 TrailRenderer。拖尾位置随同一飞行时钟刷新,暂停、交互阻塞和隔离预览不会另用墙钟推进。
ShotResolved 且 HitApplied 后,普通 voxel 消除在 Cell 中心播放原 fx_pfb_Fragment;机关受击在当前命中点播放原 X_pfb_Hit。两个 Prefab 入口位于 Art/Gameplay/PixelFlow/Effects,间接依赖位于 Art/PixelFlow/VFX,保留源资产与 meta。碎片通过原方式对粒子材质设置颜色属性块,颜色直接取 CubeLandBoardView.GetCellMaterial 返回的可见 Cell 材质(包含同色变体),不再取 CubeLand 逻辑色板。
弹体、碎裂和受击分别复用实例池;命中或取消时回收弹体并清空拖尾,取消的飞行弹不产生命中特效。粒子系统由 Advance 的视觉 delta 手动模拟,保留原发射、纹理、大小、速度与寿命曲线,按 Cell 尺寸和表面朝向适配三维显示,复用原 2 秒回收时限;暂停与交互阻塞冻结特效,退出关卡释放实例且不销毁共享材质。正式 Scene 与隔离关卡预览使用相同 Prefab。未迁入原 PaoCell/Bullet 玩法脚本,也未修改机关行为、胜利彩纸或 Well Done 界面。
Scene 调试模型
进关后的模型根节点位于 CubeLandGamePlayMap/CubeLandCore/CubeLand Model。Unity Editor 的正式场景在其 Editor model meshes 子节点下创建真实 MeshFilter/MeshRenderer,按体素分块和机关材质部件组织,支持 Scene 独立重绘、选中、聚焦与线框;不为每个方块创建节点。Editor 的游戏相机也使用这些 Renderer,避免重复提交。机关按对应 submesh 复制只读网格,不修改源资产的 Read/Write 设置;清空分块或机关销毁时同步禁用,退出关卡释放。发布版本和隔离预览仍使用 Graphics.DrawMesh 分块绘制,不创建这些编辑器节点。
模型随关卡在运行时生成,未进关时不会预先出现在 MainScene 中。关卡编辑器“游戏视图 / 试跑”使用隔离的预览场景,其模型不额外绘制到主 Scene 视图。
运行时可在 CubeLand Model 的 CubeLandModelTuning Inspector 开启模型调参,直接调整 Transform 和射击参数,使用当前实例的配置副本;瞄准、在途落点和命中特效沿用同一模型坐标变换。恢复、复制和显式保存方式见 运行时模型与射击手感调参。
资产归属与检查
Art/Gameplay 中直接加载资源(含 Composition.asset)已注册为 CubeLand/Art/... 地址与 CubeLand.Art 标签;进关前异步预载,退出释放句柄。PixelFlow 间接模型、字体、贴图、动画与 UI 依赖继续由 Prefab 和材质 GUID 引用,不复制资源;编辑器按相同地址解析资产。
Board 与机关通过 CubeLand/Art/{Meshes,Textures,Shaders}/... 稳定地址读取同一份预载资源。首页、UI、活动与流程的路径型 Addressables 地址随目录同步;Helper、UIHome、UIToast 自定义别名保留。
新增或整理资产时遵循 资产规范,通过 Tools → 资产 → 检查规范 检查目录与加载约定。工具入口为 Assets/SGame/CubeLand/Editor/AssetAudit/CubeLandAssetAudit.cs;静态检查不替代 Play Mode 或构建验收。