跳到主要内容
  1. Posts/

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

·1129 字·3 分钟·

本文最初来源于推特上的讨论,后来觉得篇幅不够,于是整理成了一篇文章。

我最近在学习虚幻引擎(Unreal Engine,简称UE),并且尝试用它来做一些小项目。UE 是一个非常强大且功能完备的游戏引擎,几乎可以满足任何游戏开发的需求,但它有两个主要的痛点让我望而却步:C++ 和蓝图(Blueprints)。

C++过于复杂,对于写游戏逻辑来说有点太重度了,而且动不动就要重新编译也有点烦人。

蓝图的优点是对于非程序员友好,但对程序员来说几乎全是缺点:

  1. 蓝图文件是二进制的,无法使用版本管理工具进行 Diff
  2. 无法享受 Copilot 带来的自动生成代码的好处
  3. 拖动蓝图效率极低(越优秀的程序员,越讨厌图形化界面,而蓝图可以说是走到了这帮人的完全对立面)
  4. 很容易搞出意大利面条,难以维护

C++ 过于复杂,蓝图过于简单,UE 一直缺少一个类似 Unity 用的 C# 那样好用的中间语言,据说 UE6 会有 Verse 脚本语言,即是用来解决这一痛点的,但看了下语法,我并不很喜欢。

Angelscript(下文简称AS)很好的解决了上面的问题,并且已经经过了 It Takes Two 的成功,证明其有能力开发任意的大型游戏。 以下是我在学习和使用 AS 期间感受到的一些优点:

  1. 语法接近 C++,几乎不用额外学习,上手就能用
  2. 抛弃了C++里所有烦人的特性,比如要一直 include 头文件,动不动就重新编译,成吨的 boilerplate 代码
  3. Hot reload,不需要重新编译,改完立即在编辑器里看到效果,包括加新的类/枚举/组件等也都是立即生效的
  4. 语法简单但不简陋,该有的都有
  5. 对 UE 的 Binding 做的很好,符合直觉。虽然文档不全,但是有示例工程可以参考(未来我打算出一套教程)
  6. 做同样的功能,耗时可能只有C++的一半甚至更少。我跟着一套课程学习,老师用C++和蓝图,我用AS,他用时4个小时的工作量,我1小时就能用 AS 做完

因为 UE 强大而完备的功能,以及目前在游戏行业的流行程度,过去几年我曾经不止一次的想学习它,但都被 C++ 和蓝图劝退了。我不是学不会 C++,相反 C/C++ 是我的启蒙语言,我在高中时就自学C语言了,工作后的前几年一直都是用C++,所以C++不是我的障碍,我只是觉得它出现在这里不合时宜。而蓝图对我来说,完全就是反人类的东西,具体原因见上面说的4条。

直到我接触了 AS,那感觉就像是如鱼得水,终于有一门语言配得上 UE 了。我在使用 AS 学习 UE 期间获得了很大的学习乐趣,因为有一种降维打击的愉快感,看着别人用 C++ 和蓝图累死累活的做一个不起眼的功能,而你用 AS 三两下就搞定了,那感觉真是难以形容。

当然也有其他语言可供选择,比如:

我为什么选择 AS?

  • USharp 已经停止维护了
  • Lua 和 ts/js 弱类型的不考虑
  • 目前 AS 还在活跃维护中,极其好用且够用

UE6 的 Verse 值得期待,如果集成的特别好用,语法丑一点也不是不能接受,但在这之前,AS 仍然是最好的选择。