案例一:金币图片与旋转序列帧
这个案例解决固定视角 UI 奖励资源。制作时使用三维模型,交付时只需图片,游戏中不必实时渲染金币模型。

需求与规格
| 项目 | 实际交付 |
|---|---|
| 源工程 | coin.blend,含模型、灯光、相机、旋转关键帧 |
| 静态图片 | coin.png,512×512 RGBA |
| 动画 | 16 张256×256透明帧,24 fps,约0.667秒一圈 |
| 图集 | coin-atlas.png,1024×1024,4×4格 |
| 坐标清单 | coin-atlas.json,左上原点,逐行排列 |
金币源模型为2,032三角形。这是离线渲染模型,运行时只使用图片,因此其面数不直接成为游戏每帧的三角形开销。
制作过程
- 用圆柱和正面星形建立轮廓,边缘倒角让小尺寸下的高光可读。
- 设置金属外观与固定灯光,使用相机统一画面与留白。
- 开启透明背景与RGBA输出,渲染512px主图。
- 在一圈中采样16个不同角度,省略重复闭合帧,保持每帧画布一致。
- 以4×4排版形成图集,输出每帧矩形和播放信息。
打开源文件看什么
先在 Outliner 查看金币、相机与灯光;再观察材质参数和旋转曲线。改变金属度或粗糙度时,保持灯光不变以便比较;改变相机时,注意是否裁掉旋转过程中的边缘。
重新生成单项:
"/Applications/Blender.app/Contents/MacOS/Blender" \
-b --python examples/blender/generate_assets.py -- coin
接入 Cocos
图集 JSON 是本站的帧矩形数据,不是 Creator 的专用图集格式。示例工程加载图集纹理,按256×256格创建16个 SpriteFrame,再按24fps切换。
// frames 已从图集创建;总时长约 16 / 24 秒。
elapsed += dt;
sprite.spriteFrame = frames[Math.floor(elapsed * 24) % 16];
金币沿路径飞向计数器、缩放和收集反馈由引擎控制;余额增加由业务逻辑控制。它们可以与帧动画组合,不能把美术帧序列当成账务状态。
验收与常见反馈
- 检查PNG实际含透明与不透明像素,放到深浅背景看边缘。
- 检查16帧数量、尺寸、图集顺序以及固定中心。
- 连续循环观察,确认没有重复闭合帧造成的停顿。
- 在游戏实际显示尺寸检查星形与边缘是否清楚。
第7帧播放时金币向右跳了2px,请比较该帧的画布、
视觉中心和裁剪偏移。保持所有帧画布一致,
修复后重新生成图集并验证顺序,不要只调整引擎节点位置。