为什么应该在虚幻引擎中使用 Angelscript

本文最初来源于推特上的讨论,后来觉得篇幅不够,于是整理成了一篇文章。
我最近在学习虚幻引擎(Unreal Engine,简称UE),并且尝试用它来做一些小项目。UE 是一个非常强大且功能完备的游戏引擎,几乎可以满足任何游戏开发的需求,但它有两个主要的痛点让我望而却步:C++ 和蓝图(Blueprints)。
C++过于复杂,对于写游戏逻辑来说有点太重度了,而且动不动就要重新编译也有点烦人。
蓝图的优点是对于非程序员友好,但对程序员来说几乎全是缺点:
- 蓝图文件是二进制的,无法使用版本管理工具进行 Diff
- 无法享受 Copilot 带来的自动生成代码的好处
- 拖动蓝图效率极低(越优秀的程序员,越讨厌图形化界面,而蓝图可以说是走到了这帮人的完全对立面)
- 很容易搞出意大利面条,难以维护
C++ 过于复杂,蓝图过于简单,UE 一直缺少一个类似 Unity 用的 C# 那样好用的中间语言,据说 UE6 会有 Verse 脚本语言,即是用来解决这一痛点的,但看了下语法,我并不很喜欢。
Angelscript(下文简称AS)很好的解决了上面的问题,并且已经经过了 It Takes Two 的成功,证明其有能力开发任意的大型游戏。 以下是我在学习和使用 AS 期间感受到的一些优点:
- 语法接近 C++,几乎不用额外学习,上手就能用
- 抛弃了C++里所有烦人的特性,比如要一直 include 头文件,动不动就重新编译,成吨的 boilerplate 代码
- Hot reload,不需要重新编译,改完立即在编辑器里看到效果,包括加新的类/枚举/组件等也都是立即生效的
- 语法简单但不简陋,该有的都有
- 对 UE 的 Binding 做的很好,符合直觉。虽然文档不全,但是有示例工程可以参考(未来我打算出一套教程)
- 做同样的功能,耗时可能只有C++的一半甚至更少。我跟着一套课程学习,老师用C++和蓝图,我用AS,他用时4个小时的工作量,我1小时就能用 AS 做完
因为 UE 强大而完备的功能,以及目前在游戏行业的流行程度,过去几年我曾经不止一次的想学习它,但都被 C++ 和蓝图劝退了。我不是学不会 C++,相反 C/C++ 是我的启蒙语言,我在高中时就自学C语言了,工作后的前几年一直都是用C++,所以C++不是我的障碍,我只是觉得它出现在这里不合时宜。而蓝图对我来说,完全就是反人类的东西,具体原因见上面说的4条。
直到我接触了 AS,那感觉就像是如鱼得水,终于有一门语言配得上 UE 了。我在使用 AS 学习 UE 期间获得了很大的学习乐趣,因为有一种降维打击的愉快感,看着别人用 C++ 和蓝图累死累活的做一个不起眼的功能,而你用 AS 三两下就搞定了,那感觉真是难以形容。
当然也有其他语言可供选择,比如:
- C#,USharp
- Lua,UnLua 和 sluaunreal
- TypeScript/JavaScript, puerts
我为什么选择 AS?
- USharp 已经停止维护了
- Lua 和 ts/js 弱类型的不考虑
- 目前 AS 还在活跃维护中,极其好用且够用
UE6 的 Verse 值得期待,如果集成的特别好用,语法丑一点也不是不能接受,但在这之前,AS 仍然是最好的选择。