使用vite作为构建工具, typescript 和 threejs作为渲染库 在浏览器端制作webgl3d射击游戏案例; 该项目是我在系统学习了图形学和threejs这一库后进行的小练习;
可供学习/参考的点:
- 使用typescript封装游戏级别的代码框架
- 系统拆分/封装: 武器系统(全自动/半自动/匕首), 物品栏系统, 运动系统
- javascript打包module作为容器的思想
- 特效/渲染层(./src/viewlayers/*)实现思路
- 前端复杂文件架构/打包架构的参考(需要对打包工具的掌握)
- threejs vbo 特效代码风格, 以及各个特效实现参考
- blender 场景烘焙/动画制作
目前添加的视觉/特效效果:
- 弹壳弹出淡出特效
- 开枪场景烟雾
- 枪口闪光特效
- 弹孔弹坑特效
- 弹孔打击闪光特效
- 弹孔打击烟尘特效
目前导出武器:
- 主武器: AK47
- 副武器: USP
- 匕首: M9
blender武器导出动画轨道名插槽(代码自动读取动画):
<weaponName>_equip武器装备动画<weaponName>_reload武器装填弹药动画<weaponName>_fire武器开火动画<weaponName>_hold武器握持动画<weaponName>_view武器检阅动画
资源白嫖:
- 网易Buff商城(枪模型, 贴图) https://buff.163.com/
- 我的世界皮肤站(同uv角色皮) http://skin.minecraftxz.com/
- 弹道图: 上csgo中文网查看弹道gif使用画图工具手动统计x, y坐标获取每个弹道位点信息
- 使用时添加一些程序噪音即可
我的服务器可能会随时挂, 且看且珍惜! http://101.34.53.23/projects/fps-game-website/index.html
操作说明: wasd移动, 123q切换武器, 左键开枪, r换弹
待实现:
- 人物的俯视仰视转身, 视角操控骨骼
- 人物移动动画混合
难点:
- 高效的场景检测碰撞(几种算法), 我用了已经实现的octree
- decal贴花
- 网络同步/延迟算法(玩家和玩家之间的碰撞)
- 布娃娃
- 怎么在threejs中更好的渲染文字
- 通过threejs封装的人工智能, 作者也是threejs的作者之一 https://github.com/Mugen87/yuka
- 取骨骼与customer操作互动 https://codepen.io/kylewetton/pen/WNNeyWJ?editors=0010
- websocket案例与vite的websocket插件 https://gitee.com/lian_1998
- krunker在steam上线了的webgl设计游戏 https://krunker.io/