前端时间导师安排开发一个3D的强化学习环境,其实也就等于开发一个特定场景的游戏。经过一段时间的调研与实践,在这里分享下自己的经验,希望能对你有所帮助。
其实最开始的时候,导师问,能做成3D的么,要是不行的话,2D的也行。TM,当时就是嘴贱,否则也不至于后面几个月愁的头发直掉😹。
![资源分配图](https://i-blog.csdnimg.cn/blog_migrate/e5b0c67d18955cdf1bb33654a691cee3.jpeg#pic_center)
废话不多说,下面开始正文部分。
1.Python能否开发游戏
目前Python语言还是非常流行的,加上做机器学习,基本上也没有别的开发语言的选择,所以在语言的选型上是没有纠结的空间的。
那Python能开发游戏么,答案是肯定的,并且python在开发游戏上,也有不少优秀的游戏的游戏引擎可以使用。首先就是PyGame,老牌的游戏引擎,开发文档齐全,网上教程多,许多python游戏开发书籍都是以PyGame为主体的。还有就是cocos-2d,一款非常好用的游戏引擎,博主以前使用过JS版本的开发过一个游戏,使用其提供的IDE,非常方便,没想到也提供了Python版本。当然还有其他比较流行的引擎,就不在一一赘述了。
我也找到了一个大佬使用python开发的游戏,大家可以参考下,github地址.
哎,上面两款好用的引擎都是开发2D游戏的,心塞,只能继续探索。
![资源分配图](https://i-blog.csdnimg.cn/blog_migrate/4f92331fd43de2d0d8462dd8a90512a7.jpeg#pic_center)
2.Python3D游戏引擎
经过调研,主要把目光发在了以下三款引擎上,OpenGL、Pyglet、Panda3D。
2.1 OpenGL
OpenGL(Open Graphics Library),意为“开放式图形库”,是一个编写2D和3D应用程序的跨平台API。OpenGL 不是一个独立的平台,因此,它需要借助于一种编程语言才能被使用。C / C++ / Python / Java 都可以很好支持 OpengGL。Python版本的OpenGl模块名为PyOpenGL
听着是不是很厉害,也确实很厉害。但是太难了,学习成本过于高了。。在看了几篇介绍文档后,我就放弃了。
参考资料如下,有兴趣的可以看下。
2.2 PyGlet
Pyglet 是一个易于使用但功能强大的库,用于在 Windows、Mac OS 和 Linux 上开发视觉丰富的 GUI 应用程序,如游戏、多媒体等。这个库完全是用 Python 创建的,它支持许多功能,如窗口、用户界面事件处理、操纵杆、OpenGL 图形、加载图像和视频以及播放声音和音乐。
在刚一接触PyGlet,就感觉很棒,很易用,当时也跟着文档做了一个小行星游戏,页面如下:
![资源分配图](https://i-blog.csdnimg.cn/blog_migrate/84fcf7597dea941a5445d153154b41ad.jpeg#pic_center)
并且将这个小游戏和Gym进行了整合。
还尝试了加载3D模型,展示如下,当时一度觉得就是他了,可以是后面还是遇到了一些很难解决的问题。
![资源分配图](https://i-blog.csdnimg.cn/blog_migrate/716077290923375223aca4eb1478e566.jpeg#pic_center)
- 跨平台效果不好:我在我自己的电脑、Mac上执行,效果还可以,没有什么不一样的,当我到实验室的电脑上执行相同的代码时,出现了很大的偏差,显示效果很差。
- 一些配套项目停止维护:比如其官方文档上推荐的3D图形渲染引擎RatCave,已经停止了维护了,也没有找到很好地替代的渲染引擎。在开发过程中,Pyglet加载找到的obj模型文件,报错问题始终无法解决(可能是我技术问题),只能加载其提供的一些模型。。。
- 文档过少:在开发过程中,遇到问题,很难找到解决方案,百度搜索的结果基本全是Pyglet入门介绍。简直要崩溃到大哭。
参考文档:PyGlet官方文档。
2.3 Panda3D
当时被Pyglet折磨了一段时间后,便动了换路线的想法。网上看了Panda3D的入门介绍(类似于编程学习中的HelleWorld😹),哦,这有点意思哦。跟着教程,十几分钟做了简单的场景,截图如下:
![资源分配图](https://i-blog.csdnimg.cn/blog_migrate/f9a73187c2d554f6750a21b21db2ea64.jpeg#pic_center)
感觉很不错,模型的加载、渲染、动画的执行都很便捷,便进行了更深入的了解,开发了一个小Demo,当时心里就大呼:是他是他就是他。。。
在使用Panda3D的过程中,也遇到了相关内容过少的问题。Panda3D虽然技术很强,可以实现很多功能,但是其被设计给有丰富相关经验的人使用的,对于刚入门的小白不是很友好,加上国内的用户实在是少,所以相关的解决方案基本上也是很难找到。还好其开发文档比较全(全英文😭),根据文档,可以解决入门时的阵痛。
想去BiliBili上找找视频教程,只找了一个博主从Yutubu上下载下来上传的视频,好难啊,英语听力是在是不过关,最后也只能放弃。
不过Panda3D还是很强大的,至少可以解决我所有的需求,虽然过程很痛苦。
参考文档:Panda3D官方文档。
2.4 Unity 3D
没想到吧,还有第四个选择。这个是我在检索信息的时候看到的,Unity 3D开放对Python的支持,并且官方提供了一组用于强化学习的3D环境,Github地址。
![资源分配图](https://i-blog.csdnimg.cn/blog_migrate/e503ab0467333db0b7f283fa38f22cc7.png#pic_center)
经验主义害死人呀,做3D游戏,第一印象想到的就是Unity,但是其官方开发语言是C#,就一直没想到使用他,后悔呀。但是我使用Panda3D已经开发过半,项目时间也很紧张,也就没有时间在选择换技术了。Unity3D for python我还没有尝试,也不知道效果如何,不过背靠Unity这个大树,相信其功能、易用性上应该没什么问题,后面使用过会在进行分享。
3.总结
本文到这就结束了,每个游戏引擎都有自己的优势,我们也是根据不同的使用需求选择合适的技术。后面会分享Panda3D的使用经验,有需要的可以持续关注,有什么疑问,也可以在评论区留言。