
游戏:Solana 如何改变竞争格局
本文讲什么?
不是你的密钥,就不是你的加密资产。这句体现加密理念核心的格言,同样适用于电子游戏。将区块链融入游戏领域,不只是一项创新,更是一场范式转变,让资产所有权和自主权走向去中心化。Solana 正处于这场转变的前沿。它提供速度最快的智能合约平台,帮助开发者充分利用 Web3 的优势。凭借 Solana 的高速、低且可预测的费用以及低延迟能力,开发者可以创造出其他平台无法实现的独特游戏体验。
本文探讨区块链在游戏领域的潜力,分析支持 Web3 游戏的观点,以及游戏开发者为何应考虑在 Solana 上构建游戏。本文还将介绍如何安装、配置和使用热门框架与平台,创建集成 Solana 的游戏。
为什么选择 Web3 游戏?
对玩家而言
没有哪款电子游戏的收藏品能与反恐精英相提并论。根据稀有度和磨损值,一些最稀有的 Counter Strike 2 皮肤(即游戏内武器外观)价值可达数千美元。Neon 是反恐精英社区的一位知名交易者,他拥有价值超过 10 万美元的皮肤库存。2023 年 10 月 13 日,他启用 AMD 的 Anti-lag+ 功能后,被 Valve 反作弊(VAC)系统错误封禁。VAC 封禁会使玩家的库存无法交易,这意味着 Neon 价值 10 万美元的库存被永久绑定在他的账户中。Valve 已正式回应此事,幸运的是,Neon 最终解除了封禁。但反恐精英 2 仍然存在游戏误封问题。
在 Steam 这样的传统游戏平台上,玩家始终面临失去已购游戏或收藏品访问权的潜在风险。没有任何机制能阻止 Valve 收走你的资产。考虑到这会严重损害声誉并导致整个玩家群体流失,这种情况似乎不太可能发生。但平台可以提高稀有物品的掉落率,从而降低其价值。军团要塞 2 就确实发生过这种情况。无论价值多少,你购买的每款游戏和收集的每件游戏内物品都由中心化实体管理。玩家只能任由游戏公司摆布。甚至以太坊的诞生也与魔兽世界的 3.10 补丁有关。暴雪削弱了 Vitalik Buterin 角色的生命虹吸法术,毁掉了他多年的游戏投入,他也曾详细讲述“中心化的可怕之处”。玩家已经厌倦受制于中心化实体。Web3 游戏提供了一条出路。
Web3 游戏代表着一场范式转变。它利用区块链技术,让资产所有权和决策流程去中心化。它可确保透明度与安全性,让玩家真正拥有可跨平台使用的游戏内资产。由此形成的虚拟经济与反恐精英的皮肤市场类似,同时具备透明、安全和可组合的优势。这些经济体系催生以用户为中心的新游戏模式,例如边玩边赚(P2E),玩家可以通过游戏获得具有现实价值的奖励。
这绝不是小众概念。多款成功且有影响力的游戏,已经展现出 Web3 游戏颠覆行业的潜力。例如,Decentraland 提供了一个虚拟世界,玩家可将房地产作为 NFT 进行购买、出售和开发。Tokens.com 斥资超过 200 万美元购买 Decentraland 市中心的房地产。这展示了 Web3 生态中虚拟经济、数字体验和个人空间的可能性。同样,Axie Infinity 等边玩边赚游戏和 STEPN 等生活方式应用(一个边动边赚平台),通过展示玩家如何从游戏中赚取收入,吸引了全球关注。Star Atlas 和 Aurory 等游戏也在 Solana 上取得了类似成功。这些并非孤立案例,而是一股更广泛趋势的一部分:游戏正超越娱乐范畴,与现实世界的经济和社会体系融合。
对开发者而言
Web3 游戏的兴起为游戏开发者带来了新机遇,远远突破了当前游戏范式的限制:
- 更深的市场与信任保障:Web3 游戏能够创造更深、更稳健的市场。游戏开发者可以触达全球受众,参与者也能在更高信任度下互动。所有游戏内所有权和交易均可验证且不可篡改。这得益于区块链固有的透明度与安全性。
- **利用现有链上程序:**开发者可以轻松将现有程序及其相关资产集成到游戏中。这既能缩短上市时间,又能让游戏开发者通过生态协作专注于创意和创新
- 经济与玩法创新:游戏开发者可以设计复杂的游戏和经济循环,利用其他链上应用或体验。借助这种互联性,开发者可以创建丰富而动态的游戏世界,让一款游戏中的行为对另一款游戏产生连锁影响
- **鼓励模组开发:**区块链的开放性让游戏开发者有机会以促进模组开发的方式构建游戏。这种开放性可以推动社区主导的创新,让玩家参与游戏演进。这标志着开发模式从闭源环境转向协作式、以社区为中心的模式
区块链不只是构建游戏的平台,也是开创全新互动式数字体验的渠道。区块链为更具活力、参与度更高的游戏生态铺平了道路。
为什么在 Solana 上构建?
低且可预测的交易费对 Web3 游戏至关重要。玩家不愿为玩游戏支付高昂费用。Solana 的交易费很低,通常低于 0.001 美元,而且非投票交易的平均费用约为 0.000005 至 0.00007 SOL。由于采用本地化费用市场,这些费用也具有可预测性。该机制会隔离拥堵,确保只有试图访问高需求状态区域的交易费用上涨。这与以太坊等基于 gas 的网络不同;后者的交易费不可预测,在严重拥堵时,一笔简单交易的费用可能超过一百美元。
Solana 的架构提供了无与伦比的可组合性。对玩家而言,这意味着只需一个钱包即可获得流畅的用户体验。玩家无需担心跨接不同平台的复杂流程。Solana 生态中的一切都可以访问并相互连接。对游戏开发者而言,可组合性带来了大量机会。开发者可以轻松集成和利用现有链上程序(例如 The Remnants 与 Magic Eden 的合作)。这可确保游戏资产的流动性不会分散到其他 L2 或分片中。Solana 构建了一个可组合生态,促进游戏、社区和网络中其他应用无缝协作。
高速和低延迟是游戏的基本要求。交易缓慢会阻碍游戏状态更新,造成难以忍受的卡顿和漫长等待,带来比传统游戏更差的用户体验。Solana 专为高交易吞吐量而设计。它平均每秒处理 400 笔用户生成的交易(TPS),在高需求期间可超过 2000 TPS。随着 Firedancer 等创新即将落地,Solana 有望扩展到足以支持任何传统消费级应用。Solana 的目标时隙时间也只有 400 毫秒(即每个账本接收交易并生成区块所需的时间)。根据网络需求,实际时间可能在 500 至 600 毫秒之间,使其成为目前速度最快的区块链。这让 Solana 非常适合作为策略游戏、回合制游戏、城市建造游戏和放置类游戏等类型的实时数据库。
Forever Games 是完全在链上运行的游戏。这是区块链集成最彻底的形式,游戏的状态和逻辑全部在区块链上运行。由此形成的持久化游戏可连接由协议、dApp 和程序组成的丰富系统,而且参与门槛较低。Solana 上的示例包括:
- SolanaCiv:一款受 席德·梅尔的文明启发的 4X 策略游戏
- Geoverse:一款俯视角资源管理 RPG
- The Heist:一款高风险、基于风险机制的放置游戏,仅向其 NFT 持有者开放
- Sol-Chess:一个使用 Anchor 编写的国际象棋引擎
对玩家来说,400 毫秒的响应时间对于实时竞速或射击游戏而言非常糟糕。但并非所有内容都需要直接上链。例如,使用 NFT 表示游戏内物品、使用代币进行应用内购买,以及使用玩家钱包完成身份验证等较小规模的集成,都可以快速实现。如今已有大量工具可帮助你开始与 Solana 集成。
构建 Solana 游戏的工具
本文将介绍几种用于构建集成 Solana 游戏的热门框架和平台。为保持简洁,我们没有涵盖部分工具,但已在下方的其他资源部分提供链接。其中包括 Godot Solana SDK 和 Phaser 3 TypeScript 入门模板等工具。本文将介绍如何安装、配置和使用以下工具:
Anchor
借助 Anchor 等框架,链上游戏开发变得简单得多。Anchor 是一个用于快速构建安全程序的强大框架。它可以减少样板代码、处理各类安全检查、自动生成客户端库,并提供全面的测试环境,从而简化开发流程。开发完全链上游戏最简单的方法,是将游戏逻辑和状态存储在 Anchor 程序中。Anchor 抽象了 Solana 底层编程模型的复杂性。这样一来,开发者可以更专注于游戏开发,而不是与 SVM 较劲。
安装
使用 Anchor 需要 Rust。你可以在这里安装,也可以使用以下命令:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shAnchor 还建议 Rust 新手阅读 Rust 之书的前九章。其中涵盖了基础知识,因为编写 Anchor 程序通常不需要高级 Rust 知识。
Anchor 还需要 Solana 工具套件:
# macOS and Linux
sh -c "$(curl -sSfL https://release.solana.com/v1.17.7/install)"
# Windows
cmd /c "curl https://release.solana.com/v1.17.7/solana-install-init-x86_64-pc-windows-msvc.exe --output C:\solana-install-tmp\solana-install-init.exe --create-dirs"你可以运行命令 solana --version,确认是否已安装所需版本的 solana。
还需要安装 Yarn,可使用 npm 包管理器进行安装:npm install --global yarn。
建议使用 Anchor 版本管理器(avm)安装 Anchor。你可以使用 cargo 安装它:cargo install --git <https://github.com/coral-xyz/anchor> avm --locked --force。然后安装并使用最新版本:
avm install latest
avm use latest
# Verify the installation
avm --version用法与示例
SolanaCiv 完全使用 Anchor 在链上开发。资源管理、单位招募、新技术研究、与蛮族交战和交易全部在链上完成。它还是开源的!这意味着你可以将它作为参考,拆解游戏的逻辑与状态,了解所有内容如何存储在链上。
Clockwork 是面向 Solana 的开源自动化引擎。它特别适合游戏开发,因为它支持交易调度以及构建由事件驱动的自动化程序。你可以使用以下命令安装:cargo install -f --locked clockwork-cli,并可与 Anchor 顺畅集成。你可以在这里查看 Clockwork 的用法示例。
Solana Playground 是一个基于浏览器的代码开发环境,可用于测试和部署程序。其集成开发环境(IDE)非常适合刚接触 Anchor、希望学习 Solana 游戏开发的开发者。其中包含多个与链上游戏相关的 Anchor 教程。例如,Tiny Adventure 是一个适合初学者的链上游戏教程。该教程会教你如何使用 Anchor 控制游戏角色左右移动,以及如何使用程序派生地址(PDA)保存游戏数据。它还会展示如何使用 Solana 钱包适配器在 Next.js 中搭建前端。完整代码可在这里查看。
如需快速创建带 TypeScript 客户端的 Anchor 程序,请使用 npx create-solana-game 命令,后接你的游戏名称。该命令会创建结构完整的新项目,简化 Anchor 和 TypeScript 的开发流程。该工具由 Jonas Hahn 和 Beeman 开发,可在 solana-developers GitHub 仓库中找到。
Turbo
Turbo 是面向独立开发者的新一代 2D 游戏引擎和市场。它包含多项创新功能:
- 修改代码、着色器或精灵图后,游戏会自动热重载
- 游戏可无界面运行,方便你在远程服务器上验证游戏状态
- 引擎基于 WebAssembly 和 WebGPU 运行,因此可以在任何平台上运行
- 引擎的内置 API 对初学者友好
Turbo 由 Jozanza 使用 Rust 构建。由于采用 Rust,开发者无需任何 SDK 或插件,即可在程序中轻松复用 Anchor 结构体。该项目目前仍处于早期开发阶段。不过,它的网站提供了多个可在浏览器中执行的示例,展示了 Turbo 的强大能力和直观的开发者体验。你还可以在这里查看“Hello, world!”演练。
安装
要开始使用 Turbo,首先需要安装所有相关的 Rust 依赖项:
# Download and run the rust installer
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Add wasm targets
rustup target add wasm32-unknown-unknown wasm32-wasi
# Install cargo-watch
cargo install cargo-watch接下来,下载并运行 Turbo 命令行界面(CLI)的安装程序:
sh -c "$(curl -sSfL https://turbo.computer/install.sh)"安装完成后,可以使用 turbo-cli -h 命令确认 Turbo CLI 是否正确安装。运行该命令后,你应能看到 Turbo 的使用信息:
Run Turbo games natively on desktop
Usage: turbo-cli
Commands:
init Initializes a new Turbo project in Rust
run Runs a Rust Turbo project
help Print this message or the help of the given subcommand(s)
Options:
-v, --version Print version
-h, --help Print help
-V, --version Print version开发流程
Turbo 提供了多个宏来简化开发流程。顺带一提,Rust 宏是一种强大的元编程工具,可用于代码生成(即编写其他代码的代码)。它们有助于减少样板代码,并支持更具表现力的代码模式。
println 宏是标准 println 宏的自定义实现。它会格式化字符串,然后将其传递给游戏引擎的日志系统:
macro_rules! println {
($fmt:expr $(, $($arg:tt)*)?) => {
$crate::sys::log(&format!($fmt, $($($arg)*)?))
};
}cfg 宏用于配置。它会公开 config 函数,该函数返回一个 64 位整数,由配置字符串的指针及其长度组合而成。这适合将配置数据从 Rust 传递到 WebAssembly 等其他环境:
macro_rules! cfg {
($toml:expr) => {
#[no_mangle]
pub unsafe extern "C" fn config() -> u64 {
let ptr = $toml.as_ptr() as u64;
let len = $toml.len() as u64;
(len << 32 | ptr)
}
};
}init 宏适合管理游戏状态。它会定义一个结构体,并提供加载和保存其状态的方法。它使用 Borsh 实现状态持久化,并为结构体实现 load 和 save 方法:
macro_rules! init {
(struct $StructName:ident { $($fields:tt)* } = $default:expr) => {
...
};
}go 宏用于定义游戏的主要逻辑。它将代码块封装在可从 WebAssembly 等外部环境调用的函数中。它还会定义游戏逻辑的入口点,以及使用状态快照运行游戏的 run_snapshot 函数:
macro_rules! go {
($($body:tt)*) => {
use $crate::prelude::*;
#[no_mangle]
#[allow(overflowing_literals, non_upper_case_globals)]
pub unsafe extern "C" fn run() {
use std::f32::consts::PI;
$($body)*
}
pub fn run_snapshot(snapshot_data: &[u8]) -> Vec {
$crate::run_snapshot(snapshot_data, || unsafe { run() })
}
};
}Turbo 还使用 struckstruck crate 中的 strike 宏来增强 Rust 的结构体定义能力。通常,嵌套结构体必须单独定义。strike 宏允许在结构体中以内联方式定义嵌套结构体。此功能简化了代码,让复杂数据结构更易读、更简洁。它还会自动对整个结构应用 Borsch 序列化,并将顶层结构体的派生宏传播到所有嵌套结构体。
因此,Turbo 项目的完整开发工作流如下:
// Defne the game configuration using the turbo::cfg! macro
turbo::cfg! {r#"
name = "Grand Theft Auto VI"
version = "1.0.0"
author = "Ichigo"
description = "Vice City but pixelated"
[settings]
resolution = [256, 144]
tile_size = [32, 32]
"#}
// Define the game state initialization using the turbo::init! macro
turbo::init! {
...
}
// Implement the game loop using the turbo::go! macro
turbo::go! {
// Load the game state
let mut state = GameState::load();
...
}Solana 支持
Turbo 与其他基于 Rust 的游戏开发引擎不同,它将提供完整的 Solana 支持。例如,它只需两行代码就能从 RPC 获取账户数据并完成解码。它还会通过 WebSockets 自动订阅账户更新,确保你的数据始终保持最新:
// Get the Solana account data
let response = solana::get_account("pubkey");
// Decode the account data
let decoded = response.decode_anchor::();
// And now we can work with on-chain data!
if let Ok(data) = decoded {
...
}Magicblock
Magicblock 是一个用于构建链上游戏的多功能开源框架。任何人都可以借助它在 Solana 或 SVM 上制作和游玩游戏。它拥有丰富的工具集,开发者既可构建完全链上的游戏,也可将 Solana 集成到现有游戏中。它包含以下功能:
- Solana Unity SDK
- IDL → C# 生成器
- 原生 WebSockets
- SOAR(Solana 链上成就与排名)
- Solana Mobile Stack 集成
凭借这些功能,Magicblock 旨在抽象复杂性,让开发者专注于打造尽可能出色的用户体验。该框架采用 MIT 许可证,由 Magicblock Labs(即 Andrea 和 Peak)维护。
Solana Unity SDK
Solana Unity SDK 是一个开源软件包,提供相应工具,帮助游戏开发者将基于 Solana 的 NFT、代币和链上程序集成到 Unity 游戏中。该 SDK 使用 Solana Unity Core,这是一个兼容 .NET Standard 2.0 的框架,可将 Solana 与 .NET 生态集成。它包含多项功能,例如完整覆盖 JSON RPC API、指令反编译、支持 Solana Mobile Stack,以及原生 DEX 操作。
你可以在这里查看使用 Solana Unity SDK 在 Unity 中构建的示例游戏列表。
安装、配置与使用
要使用 Unity 进行创作,请在这里下载 Unity Hub。Unity Hub 可管理多个 Unity Editor 安装,让你使用不同版本处理和创建新项目。继续之前,请确保你的系统满足以下要求:
- 操作系统:仅限 Windows 7 SP1+、8、10 的 64 位版本;Mac OS X 10.13+;Ubuntu 16.04、18.04 和 CentOS 7
- GPU:支持 DX10(着色器模型 4.0)的显卡
安装 Unity 后,就可以创建并打开一个新项目。
打开新项目后,打开 Package Manager 窗口。你可以通过 Unity 顶部菜单中的 Window > Package Manager 访问它。
窗口打开后,点击状态栏中的添加(+)按钮。随后会显示添加软件包的选项。接着从菜单中选择“Add package from git URL”。
在文本框中输入 https://github.com/magicblock-labs/Solana.Unity-SDK.git Git URL,然后点击“Add”。如需安装特定软件包版本,请输入 https://github.com/magicblock-labs/Solana.Unity-SDK.git#X.Y.Z,并将 X.Y.Z 替换为所需版本。所有可用版本都可以在这里找到。
安装 Solana Unity SDK 后,使用 Package Manager 检查器导入 Samples。其中包含一个示例场景,你可以参考或修改它,将其集成到 Unity 项目中。该场景位于 Scenes 文件夹中,展示了钱包身份验证以及通过 Orca 兑换代币的示例。Scripts 文件夹包含不同的脚本示例,其中包括 Orca 兑换脚本。Web3.cs 脚本可以附加到项目中的任何对象。该脚本是 Solana Unity SDK 的主要入口点。它是一个单例,用于管理与 Solana 的连接,支持钱包登录、交易签名等功能。Prefabs 文件夹包含用于存储对象配置的模板。你可以用它们创建同一资产的实例,并在整个项目中重复使用。
Magicblock YouTube 频道提供了多种教程,包括将 Solana 钱包连接到 Unity、获取钱包的公钥和余额、使用游戏内钱包进行测试,以及在链上构建国际象棋引擎。
Jupiter 实现示例
除 Orca 外,Solana Unity SDK 还原生支持 Jupiter。该 SDK 提供了实用方法,便于获取兑换报价,以及构建和发送兑换交易。
要执行兑换,首先必须创建一个 IDexAggregator 实例,并提供默认账户。该实例将用于与 Jupiter 交互:
IDexAggregator dex = new JupiterDexAg(Web3.Account);然后定义要兑换的代币。在本例中,我们将用 SOL 兑换 BONK:
TokenData tokenA = await dex.GetTokenBySymbol("SOL");
TokenData tokenB = await dex.GetTokenBySymbol("BONK");接下来获取兑换报价。兑换 1 SOL 的报价如下:
SwapQuoteAg swapQuote = await dex.GetSwapQuote(
tokenA.MintAddress,
tokenB.MintAddress,
DecimalUtil.ToUlong(1, tokenA.Decimals)
);
var quote = DecimalUtil.FromBigInteger(swapQuote.OutputAmount, tokenB.Decimals);
// Logs the expected amount of BONK
Debug.Log(quote);我们还可以显示兑换路径,提升透明度:
Debug.Log(string.Join(" -> ", swapQuote.RoutePlan.Select(p => p.SwapInfo.Label)));现在可以生成兑换交易,使用钱包签名并发送:
Transaction tx = await dex.Swap(swapQuote);
await Web3.Wallet.SignAndSendTransaction(tx);将程序移植到 Unity
开发者可以使用 Solana Unity Anchor 软件包将 Anchor 程序集成到 Unity 中。该软件包包含一个 IDL 到 C# 转换器。转换器可简化将 Anchor IDL(即 Solana 程序的 JSON 表示)转换为 Unity 项目所用 C# 代码的流程。集成过程主要分为两个步骤:
- 安装:使用命令
dotnet tool install -g Solana.Unity.Anchor.Tool安装 Solana Unity Anchor Tool。-g标志可确保在全局安装该软件包,无需为每个新项目重复安装此工具 - **代码生成:**使用命令
dotnet anchorgen -i idl/file.json -o src/ProgramCode.cs生成程序的 C# 表示。该命令会将指定的 IDL 转换为 C# 文件,可直接在 Unity 中使用。
按照这些步骤,开发者可以高效地将 Solana 程序移植到 Unity 环境中。你可以在这里查看由 Jonas Hahn 制作的分步视频演练。
SOAR
Solana 链上成就与排名(SOAR)是一个旨在为管理排行榜、成就、玩家资料和自动奖励分发提供无缝解决方案的程序。它支持多项功能,包括:
- 创建排行榜
- 管理成就
- 支持 TypeScript 客户端
- 通过跨程序调用(CPI)与 SOAR 程序交互
目前正在添加对 Solana Unity SDK 的支持,预计很快就会推出。
只需几行代码,即可轻松将 SOAR 集成到项目中。例如:
import { SoarProgram, GameType, Genre } from "@magicblock-labs/soar-sdk";
const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);
const client = SoarProgram.get(provider);
let game = Keypair.generate();
let title = "Game1";
let description = "Description";
let genre = Genre.Action;
let gameType = GameType.Web;
let nftMeta = Keypair.generate().publicKey;
let _auths = auths.map((keypair) => keypair.publicKey);
// Retrieve the bundled transaction.
let { newGame, transaction } = await client.initializeNewGame(game.publicKey, title, description, genre, gameType, nftMeta, _auths);
// Send and confirm the transaction with the game keypair as signer.
await client.sendAndConfirmTransaction(transaction, [game]);以上代码直接取自 Magicblocks 的 SOAR 文档。该代码片段首先从 @magicblock-labs/soar-sdk 导入所需模块,包括 SoarProgram、GameType 和 Genre。
SoarProgram 类让客户端能够访问链上 SOAR 程序中的每一条指令。它还提供派生 PDA 和获取多个账户的功能。
然后,它初始化一个 Anchor 提供程序(anchor.AnchorProvider.env()),并将其设为后续操作的默认提供程序(anchor.setProvider(provider))。接下来,使用之前设置的提供程序创建 SoarProgram 客户端。
该代码片段开始初始化一款新游戏。它生成一个新的游戏密钥对,并定义游戏标题、描述、类型(例如 Genre.Action)和游戏模式(例如 GameType.Web)等基本信息。它还为游戏生成一个 NFT 元数据密钥对。然后准备一个授权列表(_auths),用于定义游戏内的访问控制。
在 SOAR 客户端上调用 initializeNewGame 方法,并传入游戏的公钥、标题、描述、类型、游戏模式、NFT 元数据和授权。该方法返回一个 newGame 对象,并准备发送新游戏交易。随后使用 SOAR 客户端提供的 sendAndConfirmTransaction 方法发送并确认交易。游戏密钥对用作交易签名者,确保交易获得游戏创建者的授权。
使用 SOAR 初始化客户端并设置新的链上游戏非常简单。现在,我们可以使用 GameClient 注册游戏、创建排行榜并访问游戏状态。可能性无穷无尽。
SOAR 的程序地址为 SoarNNzwQHMwcfdkdLc6kvbkoMSxcHy89gTHrjhJYkk,其 TypeScript 文档可在此处查看。
Solana Unreal SDK
Solana Unreal SDK 是一款插件和工具包,可让开发者使用 Unreal Engine 5 在 Solana 上构建区块链游戏。该工具包包含集成 Solana 的大型多人在线游戏(MMO)入门模板,其中包括游戏服务器模板。它还提供以下功能:
该插件利用 Solnet 和 .NET 运行时的强大能力,让开发者无需从头创建完整的 C++ 库,即可直接与 Solana 通信。LinkStream 可以通过 TCP 服务器和客户端协议,将交易消息从游戏发送到 Tranquility 等钱包。该 SDK 最初由 Star Atlas 团队构建,Bifrost 最近对其代码进行了分叉和更新。在下一节的安装说明中,我们将以 Star Atlas 团队的构建版本为例。Bifrost 的安装流程与之相同。
安装
要使用 Unreal Engine,我们必须先安装 Epic Games Launcher。接下来需要创建 Epic Games 账户并登录。登录后,前往 Unreal Engine 选项卡,点击安装按钮下载最新版本。此处提供了这一流程的详细分步指南。请注意 Unreal Engine 5 的建议系统要求:
- Windows 10 64 位、四核 Intel 或 AMD、2.5 GHz 或更快、8 GB RAM
- macOS Big Sur、四核 Intel、2.5 GHz 或更快、8 GB RAM
- Linux Ubuntu 18.04、四核 Intel 或 AMD、2.5 GHz 或更快、32 GB RAM
打开 Epic Games Launcher,并启动已安装的 Unreal 版本:
创建一个新项目,并选择 C++ 作为项目模板:
现在关闭编辑器,打开创建项目时设置的项目位置文件夹。然后在根目录中创建一个新的 Plugins 文件夹:
将插件复制到 Plugins 目录中。右键点击根目录中的 .uproject 文件,然后选择生成 Visual Studio 项目文件。双击 .sln 文件,使用你的 C++ IDE 打开项目。然后打开 Source/<ProjectName>/<ProjectName>.build.cs 下的文件。将插件名称添加到 PublicDependencyModuleNames。在本例中,需要输入 Foundation:
将插件名称添加到 .uproject 文件:
关闭 IDE,然后重新生成项目文件。之后打开项目解决方案(即 .sln 文件),安装流程即告完成。
使用方法
所有与插件相关的内容都可以在内容浏览器的 Plugins > Solana SDK 下找到。LinkStream 蓝图位于 Plugins > Solana SDK Content > Blueprints 中。开发者可通过该蓝图与 Solnet 通信。你可以参考 Maps 文件夹中的沙盒地图,了解如何正确设置 Solana SDK。Solana Unreal SDK GitHub 提供了常规用法、如何自定义 LinkStream 封装器,以及如何接入 REST API 进行服务器身份验证的详细说明。有关如何使用 Unreal SDK 与 Solana 交互的更详细介绍,请参阅此处。
与 Unity 等其他编辑器相比,Unreal 注重 3D 优化和后期处理效果,因此能够创建照片级真实感的游戏。Star Atlas 就是这种超写实风格的知名示例。Star Atlas 是一款带你深入太空的沉浸式策略游戏,其中充满机遇、领土征服和政治阴谋。Yaku Corp 等其他游戏也利用 Unreal Engine 的照片级真实感打造沉浸式 MMORPG。
Honeycomb
Honeycomb 是由 Tumi Labs 开发的协议,旨在简化 Web3 游戏开发流程。Honeycomb 是一套链上程序和状态压缩工具,用于处理游戏生命周期中的关键功能。所有程序均采用可互操作和模块化设计。开发者还可以根据自身需求定制这些程序。其基础设施开发工具包专注于以下核心功能:
- 闲置玩家奖励(质押)
- 任务
- 战利品箱或 RNG 奖品(抽奖)
- 公会 / 队伍
- 游戏代币(托管和非托管)
- 可变数字资产
- 创建和管理数字资产
- 玩家资料
- 费用结构
其工具可分为以下几类:
- Hive Control:主程序,负责管理整个 Honeycomb 中程序权限的所有许可和委托
- Asset Hub:一套用于创建和管理游戏内资产的工具
- Nectar Utility:一套实用工具,让 NFT 能够提供独特的游戏功能,例如闲置代币奖励(质押)、任务和战利品箱
- Buzz Kit:一套用于构建游戏内公会的工具。Tumi Labs 还计划在该工具集中开发匹配和游戏状态管理程序
安装
开发者可以使用 Honeycomb 的 JavaScript SDK 和 @solana/web3.js 与其交互:
# Using npm
npm install @solana/web3.js @honeycomb-protocol/hive-control
# Using yarn
yarn add @solana/web3.js @honeycomb-protocol/hive-control使用示例
安装后,开发者可以使用 Solana Connection 对象初始化一个 Honeycomb 对象:
import * as web3 from "@solana/web3.js";
import { Honeycomb } from "@honeycomb-protocol/hive-control";
const honeycomb = new Honeycomb(
new web3.Connection("https://api.mainnet-beta.solana.com")
);接下来便有无限可能。例如,开发者可以与 IdentityClient 交互,以管理用户身份和资料。guestIdentity 是默认身份,在向 Honeycomb 实例注册密钥对或钱包之前用作占位符。可以使用以下命令将密钥对关联为身份:honeycomb.use(keypairIdentity(<keypair>);。同样,也可以使用 Honeycomb 实例上的 walletIdentity 函数,将钱包对象(Solana Wallet Adapter)注册为身份。身份可用于签署消息或交易等身份验证场景。
另一个有趣的示例是 HttpClient。该模块使用 Axios 或 Fetch 发送 HTTP 请求,提供与 HTTP 相关的功能。它支持自定义请求标头,并提供发送 GET、POST、PUT 和 DELETE 请求的方法:
// Make a GET request
honeycomb
.http()
.get("/users", { authToken: "myAuthToken" })
.then((response) => {
console.log("GET Response:", response);
})
.catch((error) => {
console.error("GET Error:", error);
});
// Make a POST request
const userData = { name: "John Doe", email: "john@example.com" };
honeycomb
.http()
.post("/users", { data: userData })
.then((response) => {
console.log("POST Response:", response);
})
.catch((error) => {
console.error("POST Error:", error);
});这一点尤其有用,因为开发者可以访问第三方 API,例如数字资产标准(DAS)API,以查询游戏之外的其他链上数字资产。
这些代码片段改编自 Honeycomb Protocol 文档。SDK 文档可在此处查看。
GameShift
GameShift 是 Solana Labs 为游戏开发者推出的平台,让他们能够通过单个 API 轻松集成 Web3 元素。它旨在利用 Solana 游戏优势的同时,帮助开发者打造易于使用的 Web2 体验。GameShift 负责处理所有 gas 费用、区块链交互和钱包,从而在 Web3 生态系统中提供简洁的用户体验。GameShift API 包含四个垂直领域:
- 资产创建:使用结构化元数据铸造游戏资产
- 资产交易:在品牌市场中以美元买卖资产,相关功能预计很快上线
- 支付:支持 170 多个国家和地区的信用卡支付及支付处理集成,并提供 100% 拒付保护
- 钱包资产自主托管:让玩家能够在非托管钱包中持有和交易资产(即无需密码或助记词!)
开发者可以在 GameShift 控制台创建账户、设置组织、向组织添加开发者、添加游戏,并管理开发者 API 密钥,从而开始使用 GameShift。此处概述了完整流程。
法币交易需要商家账户。只需两步即可创建账户:
- 企业身份验证(KYB):开发者需要提供企业信息,以遵守资金转移相关法律。目前,GameShift 仅支持向美国境内的银行账户结算法币
- 设置法币结算账户:准备在生产环境中启用法币支付后,开发者必须联系 GameShift,获取商家入驻表单链接。KYB 信息通过此表单设置。验证可能只需几分钟,但部分情况可能需要人工审核
GameShift 的所有活动均按组织进行管理:
用户入驻
一切设置完成后,开发者便可与 REST API 交互。开发者可以注册用户,授予其使用市场功能、链上资产和支付流程的权限。为此,需要使用 API 密钥、用户电子邮件地址以及请求正文中的 referenceId(唯一值,例如 UUID),向 https://api.gameshift.dev/users 发送 POST HTTP 请求:
curl --request POST \
--url https://api.gameshift.dev/users \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-api-key: ' \
--data '
{
"referenceId": "exampleReferenceId",
"email": "user@example.com"
}用户注册后,可以随时获取其信息和资产。要获取用户信息和资产,可以向 https://api.gameshift.dev/users/{the-user-id-you-used-to-register}/assets 发送 GET HTTP 请求:
curl --request GET \
--url https://api.gameshift.dev/users/exampleReferenceId/assets \
--header 'accept: application/json' \
--header 'x-api-key:如果请求成功,将返回用户资产的分页列表:
{
"data": [
{
"id": "dcde5bc8-b30b-46b6-b4da-0763953b2484",
"collectionId": "36c97125-04a5-4dc3-b92a-029d74a42287",
"attributes": [],
"name": "Example Asset",
"description": "Example Description",
"imageUrl": "https://solana.com/src/img/branding/solanaLogoMark.png",
"status": "Committed",
"owner": {
"address": "",
"referenceId": "exampleReferenceId"
}
}
],
"meta": {
"page": 1,
"perPage": 50,
"totalPages": 1
}
}用户入驻流程的所有代码片段均可在此处找到。
创建资产
例如,开发者可以向 https://api.gameshift.dev/assets 发送 POST HTTP 请求,以编程方式创建链上游戏资产:
curl --request POST \
--url https://api.gameshift.dev/assets \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-api-key: ' \
--data '
{
"details": {
"description": "Example description",
"imageUrl": "https://solana.com/src/img/branding/solanaLogoMark.png",
"name": "Example Asset",
"attributes": [
{
"displayType": "Formatted Attribute Name",
"traitType": "attribute-name",
"value": "attribute-value"
}
]
},
"destinationUserReferenceId": "exampleUserId"
}
'资产需要提供以下详细信息:
- description - 一个 64 字符的字符串,用于提供资产相关信息
- name - 一个 32 字符的字符串,用于标识资产
- imageUrl - 表示该资产的图片直链
- displayType - 可选的格式化标题
- traitType - 可选的特征名称
- value - 表示属性值的可选字段
POST HTTP 请求还需要通过 destinationUserReferenceId 字段提供用户的 referenceId。有关处理游戏资产的更详细说明,请参阅此处。
总结
将区块链技术集成到游戏中,尤其是通过 Solana 实现这种集成,代表着我们感知数字世界并与之交互的方式迎来重大飞跃。Anchor、Turbo、Magicblock,以及 Solana Unity 和 Unreal SDK 等工具,让开发者能够创造全新的游戏方式。如今,玩家可以比以往更轻松地发展虚拟经济,并以完全透明且易于参与的方式,在前所未有的社交网络中互动。Honeycomb 和 GameShift 等平台通过简化开发流程并提升玩家参与度,进一步展现了 Web3 游戏的潜力。
Solana 正处于这场游戏革命的前沿。Solana 游戏社区正在稳步壮大,专门的黑客松和新游戏不断涌现。Solana Labs 和 Solana Foundation 发起并领导各项计划,创建教程、工具和平台,帮助这个新兴社区发展壮大。在现有速度最快的区块链上构建游戏,未来拥有无限可能。
如果你已经读到这里,匿名朋友,感谢你的阅读!别忘了在下方输入电子邮件地址,这样就不会错过 Solana 的任何最新动态。准备深入探索了吗?立即加入我们的 Discord,在性能最强的区块链上开始构建游戏的未来。
其他资源 / 延伸阅读
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


