Rust 元宇宙 8—— 脚本
为了让我们游戏世界显得有生气,理论上来说,应该有很多玩家(机器人)在世界里进进出出,来来回回。但是我们的元宇宙暂时还没有玩家,所以,我们需要创建一些角色进入和离开游戏世界,比如说下面的代码:
硬编码任何时候都不是一个好主意,特别是对于一个不断变化的元宇宙来说。
传统的游戏服务器开发来说,C++的服务器框架 加上 lua 的脚本是一个理想的组合,能够在性能和灵活性之间达到平衡。
当然 网易的 cloud 在这条路上走的非常远,使用 C++底层加上 lua 的框架,实现了整体游戏逻辑用 lua 语言来实现,这种方案对于框架本身完全满足需求的 游戏没问题,如果需求不足够,那就麻烦了,毕竟理解一个框架的代价,有时候比写一个框架还要高。
Rust 也有自己的 lua 语言绑定,但是既然选择了 Rust,我们就不太愿意使用第三方的解决方案了,目前除了可有可无的 SDL2.0 之外,我们没有使用任何非 Rust 的库,所以这里我们也选择纯 Rust 的脚本解决方案 阿海,rhai。
在游戏开发中使用脚本语言,最早要从 魔兽世界的界面插件开始了,bigfoot 就是一个典型的 lua 脚本插件集合,可以实现自动拾取,寻路等等功能。
一般而言有两种方式来使用脚本,一种是整体框架使用 c/c++,或者 go 或者 java,然后用脚本来实现某些界面或者游戏逻辑,还有一种就是 整体使用脚本语言来描述游戏世界,对性能特别 care 的一些函数,用 c/c++来实现。绝大多数游戏开放商选择的是第一种,除了 cloud。。。
借助于 Rust 语言强大的表达能力和匿名函数,我们只需要下面几行简单的代码,就可以在游戏世界里面嵌入基础的脚本语言了:
通过 crossbeam 的 channel,我们注册了三个匿名函数,可以直接在脚本语言里面使用
enter(id, x, y), 创建一个 角色 ID,进入游戏世界,位置为 x,y
leave(id),角色 ID 离开
move(id, x, y, s) 移动 角色 ID 到指定位置 (x,y),速度为 s
评论