Skip to content

关于「步数养成树」微信小游戏的可行性分析与建议

这是一个很有意思的方向,结合了健康激励 + 养成乐趣 + 收集成就感,整体思路是 OK 的,并且和你当前的技术栈高度契合。下面我从几个维度给你拆解。


一、核心思路评估 ✅

你的核心循环是:

运动步数 → 兑换粮食 → 喂养小树 → 小树成长 → 阶段勋章

这是一个非常经典且被验证过的「外部行为驱动 + 内部正反馈」模型,类似产品有:

  • 蚂蚁森林(步数→能量→种树→公益证书)
  • Forest(专注时间→种树)
  • 微信运动 + 各种步数兑换活动

优点

  1. 步数是天然的"每日活跃"驱动器,留存有保障
  2. 树木成长是慢节奏养成,不需要重度玩法支撑
  3. 勋章/证书是低成本的高情绪价值奖励

二、潜在卡点和风险 ⚠️

1. 微信步数接口的限制(最大卡点)

微信小游戏获取步数依赖 wx.getWeRunData(),需要注意:

限制项说明
用户授权必须用户主动点击按钮触发,且每次都需要 scope.werun 授权
数据加密返回的是加密数据 encryptedData,需要后台解密(需要 session_key)
数据范围只能拿到最近 30 天的步数
更新频率微信运动数据有延迟,并非实时
iOS 限制iOS 用户需要开启「健康」权限,否则拿不到

⚠️ 个人开发者的最大问题:解密步数数据需要服务端,纯前端拿不到明文步数。

2. 个人小游戏的政策限制

  • 个人主体不能使用:支付、虚拟支付、广告变现中的部分类目
  • 微信小游戏个人主体不允许接入广告(需企业主体认证)
  • 可以做的:纯玩法、轻社交、不涉及金钱/虚拟物品交易

3. 数据安全 & 防作弊

  • 步数容易被刷(摇手机、第三方刷步软件)
  • 如果有排行榜/勋章稀缺性,需要做数据校验

4. 长期留存挑战

  • 树长成之后玩家容易流失
  • 单一玩法循环容易腻

三、改进建议 💡

玩法层面

  1. 多树/多阶段系统

    • 不是一棵树长大就结束,而是:小树苗 → 大树 → 森林 → 不同树种解锁
    • 借鉴你项目里的 goose 模块思路,做成"树木图鉴"
  2. 粮食类型多样化

    • 普通步数 → 普通水
    • 连续打卡 → 阳光
    • 周末 / 节日 → 特殊肥料
    • 不同搭配影响树的形态/颜色
  3. 稀有事件 & 收集

    • 随机掉落"小鸟"、"蝴蝶"装饰
    • 节日限定皮肤(春节红梅、夏日椰子树)
  4. 轻社交不涉及支付

    • 好友森林互相浇水(蚂蚁森林模式)
    • 步数 PK 排行榜(个人主体可做基础排行榜)
  5. 勋章体系设计

    - 累计步数勋章:1万步、10万步、100万步
    - 连续打卡勋章:7天、30天、100天
    - 特殊成就:单日2万步、雨天打卡、跨年打卡

技术架构层面

由于你已经有 cocos-game 项目的 Oops Framework 经验,建议复用:

module/
├── step/          # 步数模块(新)
│   ├── service/   # StepService - 步数获取、兑换
│   └── view/
├── tree/          # 树木养成模块(新,参考 goose)
│   ├── service/   # TreeService - 浇水、成长、阶段判定
│   ├── model/     # TreeStage, TreeType
│   └── view/
├── medal/         # 勋章模块(新)
│   ├── service/   # MedalService - 解锁逻辑
│   └── view/      # MedalWallPage、MedalUnlockDialog
└── ...

四、个人开发者的特别建议 🎯

1. 先做无服务器版本(MVP)

由于步数解密需要服务端,初期可以:

  • 方案 A(推荐):用 wx.cloud 微信云开发,0 成本拿到步数解密
    • 云函数解密 encryptedData → 直接拿到明文步数
    • 云数据库存树木/勋章数据
    • 个人主体可以用
  • 方案 B:用免费的 Serverless(如 Cloudflare Workers)
  • 方案 C:纯本地版本(用 wx.getWeRunData 但只展示加密数据,模拟步数体验)

2. 包体积控制

你项目里已经有 wechat-minigame-size-optimize skill,注意:

  • 主包 < 4MB
  • 树木立绘用渐变 + Graphics 绘制 > 静态图(参考你项目的 RoundedRectRenderer
  • 多形态树用骨骼动画或帧动画,不要每个阶段一张大图

3. 冷启动优化

  • 首屏只加载当前树阶段资源
  • 勋章墙、图鉴用分包加载

4. 变现路径(个人主体能做的)

  • ❌ 不能:内购、激励视频广告(需企业)
  • ✅ 可以:作品集 / 简历加分项、引流到公众号、未来转企业主体

5. 冷启动用户来源

  • 个人小游戏没有广告投放预算
  • 主要靠:分享卡片、好友森林互动、社群运营
  • 设计高分享意愿的节点:树长大、解锁勋章、特殊节日

五、立项前还要想清楚的问题 🤔

  1. 核心差异化:和蚂蚁森林相比你的不同点是什么?
    • 蚂蚁森林是"公益感",你可以做"陪伴感"或"收集癖"
  2. 目标用户:是给自己玩还是要做大?决定投入度
  3. 更新节奏:个人开发,能否保证至少每月一次内容更新?
  4. 是否结合你已有的 GooseHome:可以考虑直接在 GooseHome 里加一个"步数花园"模块,复用现有用户和资源

总结

维度评估
思路可行性⭐⭐⭐⭐ 经典模型,验证过
个人主体可做⭐⭐⭐⭐ 用云开发可绕过服务端门槛
技术栈匹配度⭐⭐⭐⭐⭐ 你已有 Cocos + Oops 经验
市场竞争⭐⭐⭐ 同类不少,需差异化
长期留存⭐⭐⭐ 需多玩法循环支撑

强烈建议

  1. 先做 MVP(步数 → 单棵树 → 3 个勋章),验证完整链路
  2. 用微信云开发避开服务端门槛
  3. 考虑直接在你现有的 cocos-game 项目中加 module/tree/module/step/,复用 Oops 框架,能节省 50% 工期



关于独立仓库 + 项目命名的建议

好的,独立仓库也是非常稳妥的选择 👌(尤其当你想让前后端有独立的开源/迭代节奏,或者后端将来可能服务多个项目时,独立仓更合适)。

下面给你两块建议:仓库结构 + 命名灵感


一、独立仓库的推荐结构

step-tree-client/        # 前端 Cocos 小游戏
step-tree-server/        # 后端 Koa + MongoDB
step-tree-shared/        # (可选)共享类型,发 npm 私有包 / git submodule

关于「类型共享」的轻量方案(推荐不发包)

既然你独立仓,又不想搞 npm 发包的麻烦,最简单的做法是:

方案 A:Git Submodule(推荐)

step-tree-server/
  └── shared/   ← submodule 指向 step-tree-shared
step-tree-client/
  └── assets/scripts/shared/   ← submodule 指向 step-tree-shared
  • 改一次 shared,两边 git submodule update 即可
  • koa-blog-end 已经有 .gitmodules,说明你熟这套

方案 B:纯文档约定(最轻)

  • 不抽 shared 包,直接在两个仓各自维护类型
  • 接口协议写在后端 README 或 docs/api.md
  • 适合接口稳定后期,初期不推荐

方案 C:发布到内网/私有 npm

  • 适合长期项目,前期成本高,不推荐

建议先用 方案 B 起步,等接口超过 10 个再升级到方案 A。


二、项目/小游戏命名建议

去掉 goose,围绕「步数 + 树/植物 + 养成」这个核心。我从几个方向给你出选项:

🌱 方向一:步数 + 自然意象(推荐,最贴主题)

名称寓意域名/包名风格
StepTree一步一棵树(最直白)step-tree, steptree.app
WalkWoods走出一片森林walk-woods
PaceLeaf步伐与树叶pace-leaf
SteplingStep + Sapling(小树苗)stepling(造词,独特)
Footprint Forest足迹森林footprint-forest
MileSeed每一里路,一颗种子mile-seed
走出一棵树中文直接命名zou-shu

🌳 方向二:纯植物/养成感(弱化"步数")

名称寓意
SproutySprout(发芽)+ 萌系后缀
TinyGrove小小树林
LeafLog叶子日记
Bloomly绽放感
小树日记中文清新感

🏃 方向三:突出"成就/勋章"

名称寓意
StepBadge步数勋章
MileMedal里程勋章
PaceQuest步伐之旅

🎯 方向四:取个"软萌"的 IP 名(适合小游戏调性)

名称寓意
嗒嗒树步数声 + 树(朗朗上口)
走走森林中文叠词,可爱
小步森林直白、温暖
一步一叶文艺向
树芽日记养成日记感

三、我的 Top 3 推荐

综合「好记 + 域名易得 + 表达准确 + 国际化潜力」:

🥇 StepTree(首推)

  • ✅ 一眼看懂玩法
  • ✅ 仓库名 step-tree-client / step-tree-server 非常清爽
  • ✅ 中英文都好用(中文叫「步树」或副标题"走出一棵树")
  • ✅ 可扩展:以后做花、做森林、做动物,都不冲突

🥈 Stepling

  • ✅ Step + Sapling 造词,独特性强
  • ✅ 软萌感,符合微信小游戏调性
  • ✅ 域名/商标好抢
  • ⚠️ 中文名需要单独想(可叫"小步苗")

🥉 嗒嗒树 / 走走森林

  • ✅ 中文圈传播力强
  • ✅ 适合微信小游戏的本土化命名
  • ⚠️ 国际化稍弱

四、命名落地后的仓库示例(以 StepTree 为例)

GitHub / Gitee:
├── step-tree-client     # Cocos 小游戏前端
├── step-tree-server     # Koa + MongoDB 后端
└── step-tree-shared     # (可选)共享类型 submodule

包名 / 标识:
- 微信小游戏名:StepTree · 步树
- AppID 备注:step-tree
- 数据库名:step_tree
- API 前缀:/api/step-tree/v1
- 客户端 ccclass 前缀:ST 或 StepTree

五、补充建议

  1. 先查重再定:在 微信小游戏后台、AppStore、商标局查一下重名(个人主体的小游戏名一旦提审通过就不能随便改)
  2. 域名顺手抢:哪怕暂时不用,5 块钱抢个 .app.fun 域名占位
  3. GitHub 用户名 + 仓库名组合:例如 novlan1/step-tree-client,独立仓的好处之一就是名字不互相绑架



✅ StepTree 项目骨架已就绪

📁 文件位置(在当前 workspace 内)

cocos-game/step-tree/
├── README.md                                ← 项目总览
├── step-tree-server/                        ← 服务端(可直接运行)
│   ├── README.md
│   ├── package.json / tsconfig.json
│   ├── .env.example / .gitignore
│   ├── ecosystem.config.js                  ← PM2 部署配置
│   └── src/
│       ├── app.ts                           ← Koa 入口
│       ├── config/
│       │   ├── config.ts                    ← 端口/JWT/微信/树成长阶段
│       │   └── medal-defs.ts                ← 11 个勋章模板
│       ├── core/                            ← db / 异常 / 路由注册
│       ├── middlewares/                     ← exception / auth(JWT)
│       ├── app/
│       │   ├── api/                         ← 5 个核心路由 + health
│       │   ├── services/                    ← 4 个 service(业务核心)
│       │   └── models/                      ← 4 个 Mongoose Schema
│       ├── utils/
│       │   ├── wx.ts                        ← code2session + weRunData 解密
│       │   └── date.ts                      ← 自然日 / streak 计算
│       └── types/api.ts
└── step-tree-client/                        ← 客户端业务骨架
    ├── README.md                            ← Cocos 工程初始化步骤说明
    └── scripts/                             ← 拷到 assets/scripts/
        ├── config/config.ts
        ├── core/                            ← http / storage / event
        ├── module/
        │   ├── auth/                        ← wx.login → wxLogin
        │   ├── step/                        ← getWeRunData → sync
        │   ├── tree/                        ← API + Controller
        │   └── medal/
        └── types/api.ts                     ← 与 server 对齐的 DTO

🔑 已实现的核心能力

服务端

  • 5 个接口完整实现(不是 TODO 桩函数):登录、步数同步、树状态、喂食、勋章列表
  • 微信 weRunData 解密(aes-128-cbc + watermark 防伪)
  • JWT 鉴权中间件
  • 步数→粮食兑换(带余数保留,避免 99 步被吞)
  • 连续打卡 streak 维护(跨天判断)
  • 勋章自动判定(喂食/同步后自动检查并解锁)
  • 树升级阶段计算(7 个阶段:种子→萌芽→幼苗→小树→茁壮→大树→参天)

客户端

  • HTTP 封装(自动注入 token,统一解包 ApiResult,兼容 wx/浏览器)
  • Storage 包装(小游戏 wx.setStorageSync + Web localStorage 双兼容)
  • AuthService(微信 login → 缓存 token)
  • TreeController(编排主页业务,含进度条计算)
  • EventBus(USER_UPDATED / TREE_UPDATED / MEDAL_UNLOCKED 全局事件)

🚚 下一步操作

bash
# 1. 把整个目录拷到独立位置
cp -r /Users/guowangyang/Documents/git-woa/cocos-game/step-tree ~/Documents/github/

# 2. 启动服务端(先装 MongoDB)
cd ~/Documents/github/step-tree/step-tree-server
cp .env.example .env.local
# 编辑 .env.local 填入你的 WX_APP_ID 和 WX_APP_SECRET
pnpm install
pnpm dev
# → http://localhost:3010/api/health 验证启动

# 3. 客户端:用 Cocos Dashboard 在 ~/Documents/github/step-tree/step-tree-client/ 新建 Cocos 工程
#    然后 cp -r scripts assets/scripts

💡 几个值得注意的设计点

  1. 勋章定义在配置文件 medal-defs.ts,新增勋章只改一处(不需要写代码)
  2. 树成长阶段也在配置里 config.game.treeStages,方便后期 A/B 测试数值
  3. step-log 集合记录每天步数,将来好做曲线图/排行榜,无需改 schema
  4. 服务端没引入 koa-blog-end 中的 Sequelize/MySQL,纯 Mongoose 单一存储
  5. 客户端和服务端的 DTO 类型分别独立维护(不强耦合 monorepo),但字段一一对齐

接下来你 cp 走之后开始跑起来,遇到问题随时叫我!🌱