一个用 Three.js 做的卡通风格 3D 休闲小游戏 —— 操控一只蛋仔在悠闲小镇里闲逛、探索、收集。
在线试玩: https://chuccp.github.io/eggy/
本项目的全部代码由 AI 生成。 从游戏逻辑、物理、UI 到模型、贴图与音效,均由 AI 在对话中编写或程序化生成,无人工手写代码。
世界
- 200 × 200 的地形,60 棵树(4 种树形)、1500 株随风摆动的草丛、200 朵会回应玩家经过的花朵
- 10 位居民 NPC,靠近按
E会冒出发声的 3D 对话气泡 - 8 种鸟类各有不同飞行姿态,另有烟囱炊烟、花田蝴蝶、林间落叶等粒子
- 湖泊、秋千、跷跷板、喷泉、大炮、小船、可推动的球等互动设施
玩法
- 装备系统 —— 5 个装备槽(帽子 / 面部 / 背部 / 翅膀 / 手持),20 余件装备会实时穿戴到 3D 模型上
- 商店 —— 4 家主题商店(甜蜜面包店、时尚服装店、家具小馆、冰淇淋小屋),走近商品按
E直接购买,也能在柜台卖出 - 宝箱 —— 每 15 秒刷新,最多同时存在 5 个,5 级稀有度、20 种掉落物;湖底还藏着一个传说宝箱
- 彩蛋 —— 3 个黄金蛋散落在地图各处,另有一幅墙面像素画
- 飞行 —— 装备翅膀后连按
Space扇动翅膀起飞
系统
- 物理引擎:cannon-es 高度场碰撞,屋顶可以站立,球可以被推着滚
- 存档:localStorage 自动存档(每 30 秒 / 关键事件 / 退出时)
- 音效:程序化合成的音效与 BGM,靠近湖泊、树林时环境音会渐强
- 后处理:Bloom 泛光 + 暗角,卡通材质使用 5 级渐变着色
| 操作 | 键盘 / 鼠标 | 手柄 |
|---|---|---|
| 移动 | W A S D / 方向键 |
左摇杆 |
| 奔跑 | Shift |
B |
| 跳跃 | Space |
A |
| 飞行 | 连按 Space(需装备翅膀) |
连按 A |
| 视角 | 鼠标移动 | 右摇杆 |
| 缩放 | 滚轮 | — |
| 交互 / 购买 / 上座 | E |
X |
| 物品栏 | I 或点击右上 🎒 |
— |
| 暂停菜单 | Esc |
Start |
| 菜单内切换 / 确认 | Tab / Enter |
— |
首次进入需点击画面锁定鼠标;按
Esc可释放鼠标打开暂停菜单。
需要 Node.js ^20.19 或 >=22.12,以及 pnpm。
pnpm install
pnpm dev # 开发服务器,默认 http://localhost:3000
pnpm build # 类型检查 + 生产构建,输出到 dist/
pnpm preview # 预览构建产物| 项目 | 技术 |
|---|---|
| 渲染 | Three.js 0.170 |
| 物理 | cannon-es 0.20 |
| 语言 / 构建 | TypeScript 5 + Vite 8 |
| 部署 | GitHub Pages(GitHub Actions) |
无任何资源文件依赖:所有模型、贴图与音效均由代码程序化生成。
src/
├── main.ts 入口:开始界面 → 启动游戏
├── game/ Game 主循环、场景、输入、物理世界、存档
├── player/ 蛋仔角色、第三人称相机、移动控制、装备外观
├── world/ 地形、房屋、NPC、鸟类、商店、宝箱、道具、粒子…
├── ui/ HUD、开始界面、暂停菜单
├── audio/ 程序化音效与 BGM
├── effects/ 后处理(Bloom + 暗角)
└── utils/ 颜色与数学工具
