Skip to content

xiapeize/third-person-mc

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

290 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Third-Person-MC(网页第三人称 MC / Web3D Demo)

中文 | English

Three.js + Vue 3 搭建的网页 3D 演示:展示 MC 风格多世界传送门魂类锁定战斗 的预热体验。 目标:把 Web3D 做成“可跑、可玩、可继续迭代”的项目,而不只是一个截图 Demo。

  • 在线预览:https://third-person-mc.vercel.app/
  • Debug 面板:https://third-person-mc.vercel.app/#debug
  • 产品需求(PRD,早期版本,可能与实现有偏差):docs/PRD.md

目录

视觉预览

开始界面展示

开始界面展示

攻击效果预览 地形:多生态拼图
攻击效果预览
攻击效果预览
多生态拼图
地形:多生态拼图

核心亮点(来自项目与实现现实)

  • 运动系统:第三人称角色移动与姿态切换(走/跑/跳),强调操作反馈与动画衔接
  • 生态地形:基于随机数与噪声的程序化地形(项目内有多生态概念:平原/森林/沙漠/冻洋等)
  • 第三人称相机:针对地形起伏做避障/防穿模的相机跟随思路,提升可玩性与稳定观感

备注:仓库里还集成了 HUD/菜单 UI、资源加载、Shader 管线等基础设施,详见下方“项目结构”和 PRD。

玩法与按键操作

以“读者打开页面 30 秒内就能上手”为标准。

操作 按键 说明
移动 W / A / S / D 八向位移,包含姿态切换
普通攻击 Z 支持连击 Combo
重攻击 X 强力打击反馈
锁定目标 鼠标中键 (开发中) 魂类锁定逻辑
格挡 C 防御动作
互动 E / F (开发中) 采集或开启传送门
关闭弹窗/菜单 ESC 退出或暂停

生态地形与地形生成

项目内地形强调“体素风格 + 程序化生态变化”,并尽量保持稳定帧率。

平原地形 森林地形
平原
平原地形
森林
森林地形
白桦林地形 樱花林地形
白桦林
白桦林地形
樱花林
樱花林地形
沙漠地形 冻洋地形
沙漠
沙漠地形
冻洋
冻洋地形

地形生成思路 (Noise & FBM)

一个 Seed 一个世界 (PRNG)

一个 Seed 一个世界

地形振幅调节 (Noise) 地面细节调节 (FBM)
振幅
地形振幅调节
FBM
地面细节调节

相机自适应与 HUD

核心目标:自由旋转视角,相机根据地形自动躲避不穿模。

HUD 界面总览

HUD 总览

相机跟随展示 相机越肩调整
相机跟随展示
相机跟随展示
相机调整
相机越肩调整

项目技术栈

核心框架

  • Three.js (v0.172+): 核心 3D 渲染引擎
  • Vue 3: UI 层开发框架
  • Vite: 极速构建工具与开发服务器
  • Pinia: 响应式状态管理(UI 与 3D 场景同步)

渲染与动画

  • GLSL (Custom Shaders): 自定义着色器实现传送门、地形渲染与后处理
  • three-custom-shader-material: 材质增强插件
  • GSAP: 高性能补间动画库
  • InstancedMesh: 大规模体素与植被渲染优化

工具与工程化

  • mitt: 全局事件总线,处理 UI 与 3D 层实时通信
  • Tailwind CSS: 样式工具库
  • Sass/PostCSS: 预处理器支持
  • Playwright: 端到端测试覆盖
  • Husky & Commitlint: 规范化代码提交

项目结构

E:\圖形學\Third-Person-MC\
├── public/                 # 静态资源
│   ├── models/             # GLB/GLTF 模型 (角色、方块)
│   ├── textures/           # 材质贴图 (环境、方块、HUD)
│   └── fonts/              # Minecraft 字体
├── src/
│   ├── components/         # Vue UI 组件
│   │   ├── hud/            # 游戏内 HUD (血条、经验、快捷栏等)
│   │   ├── menu/           # 主菜单、设置、加载界面
│   │   └── MiniMap.vue     # 小地图组件
│   ├── js/                 # 核心逻辑
│   │   ├── camera/         # 相机控制器与 Rig
│   │   ├── world/          # 场景元素、玩家逻辑、地形系统
│   │   │   └── terrain/    # 生态生成、区块管理、AO 计算
│   │   ├── interaction/    # 射线拾取、方块交互
│   │   ├── utils/          # 调试、事件、输入解析
│   │   └── experience.js   # 框架单例入口
│   ├── shaders/            # 自定义 GLSL 着色器
│   └── vue/                # Pinia Stores
├── docs/                   # 产品文档与开发计划
└── vite.config.js          # 构建配置

素材出处

未完成内容 (TODO)

  • 一直陪伴玩家的可爱狗: 实现宠物 AI 逻辑与跟随系统
  • 更好的 Biome: 优化生态转换平滑度与更多植被种类
  • 背包功能: 实现完整的物品存放与交互 UI
  • 挖掘特效: 方块破坏时的粒子效果与动画
  • 换肤功能: 实时切换玩家模型贴图
  • 敌人锁定特效: 魂类锁定视觉反馈增强

快速开始

环境要求

  • Node.js(建议 LTS)
  • 包管理器:推荐 pnpm(仓库包含 pnpm-lock.yaml

安装与运行

pnpm install
pnpm dev

然后打开终端输出的本地地址(Vite 会以 --host 启动)。

常用命令(与 package.json 对齐)

# 开发
pnpm dev

# 构建/预览
pnpm build
pnpm preview

# 代码检查
pnpm lint
pnpm lint:fix

# E2E(Playwright)
pnpm test:chrome
pnpm test:firefox
pnpm test:safari

文档与入口

开发约定(与仓库风格保持一致)

  • Three.js 侧以 src/js/experience.jsExperience 单例为核心入口组织代码
  • UI(Vue)与 3D 场景(Three.js)解耦:状态优先用 Pinia,同步/即时事件用 mitt
  • 新增 3D 组件建议配套 debugInit 面板,方便调参和定位问题

(更详细规则请看 .cursor/rules/ 下的规范文件)

贡献

  • 行为准则:CODE_OF_CONDUCT.md
  • 仓库启用 Husky + Commitlint,提交信息建议遵循 Conventional Commits

License

MIT,见 LICENSE

About

Maybe it's what the Minecraft official website looks like in 2030

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 76.3%
  • Vue 16.6%
  • GLSL 3.4%
  • SCSS 2.3%
  • HTML 1.4%