经过一年多的开发,用 Rust 编写的开源多人游戏引擎 Ambient 终于发布了 0.1 版本。
据介绍,Ambient 是一个用于构建高性能多人游戏和 3D 应用程序的运行时。 它使用 WebAssembly 和 WebGPU 技术音效,并与编译为 WebAssembly 或在 WebAssembly 上运行的任何语言兼容。 它旨在轻松构建和部署丰富的多人游戏世界和体验。 其开发团队表示,通过 Ambient游戏评测,他们希望构建多人游戏能够像构建单人游戏一样简单。
特征
无缝网络:Ambient 既充当服务器又充当客户端。 开发人员只需构建服务器和客户端逻辑,Ambient 会自动处理数据同步。
独立沙箱:开发人员为 Ambient 构建的项目通过 WebAssembly 的隔离功能执行。 因此,如果发生崩溃,它不会破坏整个程序,这也意味着运行不受信任的代码是安全的。
面向数据的设计:Ambient 的核心数据模型是每个 WASM 模块都可以操作的实体组件系统。
多语言:开发人员可以使用任何可以编译为 WebAssembly 的语言构建 Ambient 模块(目前,Rust 是唯一支持的语言,团队正在努力扩展到其他语言)
单个可执行文件:Ambient 是在 Windows、Mac 和 Linux 上运行的单个可执行文件。 它可以充当服务器或客户端。
互操作性:Ambient 允许定义自定义组件和“概念”(组件集合)。 只要使用相同的组件和“概念”,Ambient 项目就可以共享数据和互操作。
资产管道和流处理:Ambient 包含资产管道,支持多种资产格式的编译,包括 .glb 和 .fbx。 该资产通过网络进行流式传输,因此客户端在加入时会收到所需的所有数据。
强大的渲染器:Ambient渲染器由GPU驱动,裁剪(剔除)和细节层次切换完全由GPU处理。 它默认使用 PBR,此外还支持级联阴影贴图和实例化所有可实例化的内容。
例子
首先安装Ambient,然后创建一个新的Ambient项目:
环境新
然后打开_src/lib.rs_,在main函数中添加以下内容,让IDE自动导入:
spawn_query(player()).bind(move|players|{for_inplayers{Entity::new() .with_merge(make_transformable()) .with_default(cube()) .with(translation(),rand::random()) .with(color(),rand::random()) .spawn(); } });
这将为每个加入的玩家生成一个随机立方体(请参阅此处的完整示例)。 开始启动:
环境运行
运行上述命令后,您将看到以下屏幕:
现在打开一个新的终端窗口并输入:
环境连接
此时你会看到两个方框,这意味着你已经成功使用 Ambient 构建了你的第一个多人游戏体验。
Ambient开发团队描述了创建该项目的初衷,发现许多游戏引擎都是为构建单人游戏而优化的,但很少有专门为简化多人游戏而设计的。 所以他们很好奇:如何构建一款像单人游戏一样易于使用的多人游戏? 当开发者从网络细节中解放出来时,可以想象出什么样的非凡体验——新的、有趣的交互?
他们开始使用 Ambient 来回答这些问题:一个运行时,旨在帮助各类开发人员构建和分享他们想要构建的体验。 然而,这里的问题不仅仅是让客户端-服务器通信正确。 它还包括多人游戏开发中出现的所有其他挑战:服务器资源、分发游戏、将游戏作为服务可持续运行、与用户交互等等。 运行时只是他们朝这个方向迈出的第一步,还有许多其他问题需要解决。
Ambient 使用 MIT 许可证,其团队表示这是因为他们的目标是为每个人建立多人游戏的标准。 作为一家公司沙盒游戏开发引擎,他们的计划是为运行时提供增值服务(包括服务器和资产托管),并将其“货币化”,但运行时本身将始终是免费和开源的。 作为运行时的用户,他们可以选择使用Ambient团队提供的一些服务,也可以选择自己实现其他服务。
未来,开发团队表示,Ambient 将支持部署到 Web沙盒游戏开发引擎,支持更多可以编译成 WebAssembly 的语言(目前只有 Rust),并提供协作编辑器。