游戏:Solana 如何改变游戏环境

游戏:Solana 如何改变游戏环境

这篇文章是关于什么的?

不是你的钥匙,不是你的加密货币。这句格言是加密货币精神的核心,同样与视频游戏相关。将区块链集成到游戏领域不仅仅是一项创新。这是一种范式转变,实现了去中心化的资产所有权和自治权。 Solana 处于这一转变的最前沿。它提供了最快的智能合约平台来利用 Web3 的优势。通过利用 Solana 的高速度、低且可预测的费用以及低延迟功能,开发人员可以创造在其他地方无法实现的独特游戏体验。

本文探讨了区块链在游戏中的潜力 - 研究 Web3 游戏的论点以及为什么游戏开发人员应该考虑在 Solana 上进行构建。本文还讨论了安装、配置和使用流行的框架和平台来创建 Solana 集成游戏。

为什么选择 Web3 游戏?

对于游戏玩家

没有其他视频游戏的收藏品可以与《反恐精英》相媲美。根据稀有度和流通量,一些最稀有的《反恐精英 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等 Play-to-earn 游戏和STEPN(move-to-earn 平台)等生活方式应用程序通过展示玩家如何通过游戏赚取收入而引起了国际关注。 Star AtlasAurory等游戏在 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 毫秒之间变化,使其成为最快的可用区块链。这使其成为策略游戏、回合制游戏、城市建设游戏和闲置游戏等类型的完美实时数据库。

Forever Games是完全链上游戏。这是区块链集成最极端的情况,游戏的状态和逻辑完全在区块链上运行。这导致了一个持久的游戏连接到丰富的协议、dApp 和程序系统,进入门槛较低。 Solana 上的此类示例包括:

作为一名游戏玩家,400 毫秒的响应时间对于实时赛车或射击游戏来说听起来很可怕。然而,并不是所有的东西都需要直接放在链上。例如,使用 NFT 代表游戏内物品、使用代币进行应用内购买以及使用玩家钱包进行身份验证等较小规模的集成都可以快速完成。现在有大量工具可供您开始与 Solana 集成。

用于构建 Solana 游戏的工具

本文研究了用于构建 Solana 集成游戏的几种流行框架和平台。为了简洁起见,我们没有介绍一些工具,但在下面的附加资源部分中提供了链接。其中包括Godot Solana SDKPhaser 3 TypeScript Starter Template等工具。出于本文的目的,我们将研究如何安装、配置和使用以下工具:

Anchor

使用Anchor等框架,开发链上游戏变得更加容易。 Anchor 是一个强大的框架,用于快速构建安全程序。它通过减少样板文件、处理各种安全检查、自动化客户端库生成以及提供全面的测试设置来简化开发过程。开发完全链上游戏的最简单方法是将游戏的逻辑和状态存储在 Anchor 程序中。 Anchor 通过抽象 Solana 底层编程模型的复杂性来提供帮助。现在,开发者可以更加专注于游戏开发,而不是与 SVM 作斗争。

安装

使用 Anchor 需要 Rust。可以在这里安装,也可以使用以下命令安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Anchor 还建议 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

Anchor 文档还提供了深入的安装指南。

用法和示例

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 HahnBeeman开发,可以在solana-developers GitHub 存储库中找到。

Turbo

Turbo是下一代 2D 游戏引擎和市场,旨在为独立开发者提供支持。它包括多项创新功能:

  • 每当代码、着色器或精灵被修改时,游戏就会热重载
  • 游戏无头运行,因此您可以验证远程服务器上的游戏状态
  • 该引擎运行在WebAssemblyWebGPU上,因此可以在任何平台上运行
  • 该引擎的内置 API适合初学者
gamepad.rs 的屏幕截图,Turbo 网站上的示例

Turbo 是由Jozanza在 Rust 中构建的。由于它是用 Rust 构建的,开发人员可以轻松地在程序中重用 Anchor 结构,而不需要任何 SDK 或插件。该项目目前仍处于早期开发阶段。不过,其网站包含几个可以在浏览器中执行的示例,展示了 Turbo 的强大功能和直观的开发人员体验。还有“你好,世界!”可以在此处找到演练。

安装

要开始使用 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进行状态持久化:


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 还使用StrikeStruck 箱中的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 中提取帐户数据并仅用两行代码对其进行解码。它还通过 WebSocket 自动订阅帐户更新,因此您的数据始终是最新的:


// 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 集成到现有游戏中。它包括以下功能:

凭借所有这些功能,Magicblock 旨在消除复杂性,以便开发人员可以专注于创造最佳的用户体验。 MIT 许可的框架由Magicblock Labs(即AndreaPeak )维护。

Solana Unity SDK

资料来源:图表改编自Magicblock 的文档

Solana Unity SDK是一个开源包,其中包含的工具使游戏开发人员能够将基于 Solana 的 NFT、代币和链上程序集成到他们的 Unity 游戏中。该 SDK 利用Solana Unity Core,这是一个将 Solana 与 .NET 生态系统集成的 .NET 标准 2.0 兼容框架。它包含许多功能,例如完整的 JSON RPC API 覆盖、指令反编译、Solana Mobile Stack 支持和本机 DEX 操作。

可以在此处找到使用 Solana Unity SDK 在 Unity 中构建的示例游戏列表。

安装、配置和使用

要使用 Unity 进行创建,请在此处下载 Unity Hub。 Unity Hub 管理 Unity 编辑器的多个安装,允许您跨不同版本处理和创建新项目。在继续之前,请确保您的系统满足以下要求:

  • 操作系统:仅限 Windows 7 SP1+、8、10、64 位版本; Mac OS X 10.13+; Ubuntu 16.04、18.04 和 CentOS 7
  • GPU:具有DX10(着色器模型4.0)功能的显卡

安装 Unity 后,我们现在可以创建并打开一个新项目。

访问包管理器

打开新项目后,打开“包管理器”窗口。可以使用Window > Package Manager在 Unity 的顶部菜单中访问它。

添加 Git 网址

打开窗口后,单击状态栏中的添加 (+) 按钮。将出现添加包的选项。然后从菜单中选择“从 git URL 添加包”。

在哪里输入 Git URL

在文本框中输入https://github.com/magicblock-labs/Solana.Unity-SDK.git Git URL,然后单击“添加”。您可以通过输入https://github.com/magicblock-labs/Solana.Unity-SDK.git#XYZ并将XYZ替换为所需版本来安装特定的软件包版本。所有可用的版本都可以在这里找到。

安装 Solana Unity SDK 后,使用包管理器检查器导入示例。其中包括一个示例场景,您可以参考或修改以集成到您的 Unity 项目中。该场景位于Scenes文件夹中,包含钱包身份验证和通过Orca交换代币的示例。Scripts文件夹包含不同的脚本示例,包括 Orca 交换的脚本。 Web3.cs脚本可以附加到项目中的任何对象。该脚本是 Solana Unity SDK 的主要入口点。它是一个单例,用于管理与 Solana 的连接,促进钱包登录、签署交易等。Prefabs文件夹包含存储对象配置的模板。它们可用于创建可在整个项目中重复使用的同一资产的实例。

Magicblock YouTube 频道包含有关将 Solana 钱包连接到 Unity获取钱包的公钥和余额使用游戏内钱包进行测试以及构建链上国际象棋引擎的教程。

Solana Unity SDK GitHub 存储库还包含多个示例脚本,范围从指令解码构建事务

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)是一个旨在提供无缝解决方案的程序,用于管理 Solana 上的排行榜、成就、玩家档案和自动奖励分配。它支持多种功能,包括:

  • 排行榜创建
  • 成果管理
  • 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]);

上面的代码直接来自SOAR 上的 Magicblocks 文档。该代码片段首先从@magicblock-labs/soar-sdk导入必要的模块,包括SoarProgramGameTypeGenre

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 上构建区块链游戏。该工具包包含大型多人在线 (MMO) Solana 集成游戏的起始模板,其中包括游戏服务器的模板。它还包括以下功能:

该插件利用 Solnet 和 .NET 运行时的强大功能,因此开发人员可以直接与 Solana 通信,而无需从头开始创建整个 C++ 库。LinkStream可以通过 TCP 服务器和客户端协议将交易消息从游戏发送到钱包,例如Tranquility。 Star Atlas 团队最初构建了 SDK,Bifrost最近分叉并更新了代码。出于我们的目的,我们将在下一节的安装中参考Star Atlas 团队的构建。 Bifrost 的过程相同。

安装

我们必须首先安装Epic Games Launcher才能使用虚幻引擎。接下来,我们需要创建一个 Epic Games 帐户并登录。登录后,导航至虚幻引擎选项卡并单击“安装”按钮以下载最新版本。此处提供了此过程的详细演练。请注意虚幻引擎 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 版本:

如何启动虚幻引擎 5

创建一个新项目并选择C++作为项目模板:

创建一个新的 C++ 项目

现在关闭编辑器并打开创建项目时设置的项目位置文件夹。然后,在根目录中创建一个新的Plugins文件夹:

将插件复制到Plugins目录中。右键单击根目录中的.uproject文件,然后选择“生成 Visual Studio 项目文件”。双击.sln文件并使用 C++ IDE 打开该项目。然后我们要打开Source/<ProjectName>/<ProjectName>.build.cs下的文件。将插件的名称添加到PublicDependencyModuleNames。在我们的例子中,我们想进入Foundation

将插件的名称添加到 .cs 文件中

将插件的名称添加到我们的.uproject文件中:

将插件的名称添加到 .uproject 文件中

关闭 IDE 并重新生成项目文件。打开项目解决方案(即.sln文件)后,安装过程就完成了。

用法

所有与插件相关的内容都可以在内容浏览器中的插件 > Solana SDK下找到。 LinkStream 蓝图可在插件 > Solana SDK 内容 > 蓝图中找到。该蓝图使开发人员能够与 Solnet 进行通信。Maps文件夹中的沙箱地图可用作如何正确设置 Solana SDK 的参考。Solana Unreal SDK GitHub 上提供了一般用法的详细信息以及如何自定义 LinkStream 包装器或如何与 REST API 交互以进行服务器身份验证。有关如何使用 Unreal SDK 与 Solana 交互的更详细信息,请参见此处

与 Unity 等其他编辑器相比,Unreal 专注于 3D 优化和后处理效果,可以创建逼真的游戏。这种超现实主义的一个流行例子是《星图集》。 Star Atlas 是一款身临其境的策略游戏,带您穿越太空深处。它充满了机会、领土征服和政治阴谋。其他游戏(例如《Yaku Corp》)利用虚幻引擎的真实感来创建身临其境的 MMORPG。

Honeycomb

Honeycomb是Tumi Labs开发的协议,旨在简化 Web3 游戏开发流程。 Honeycomb 是一套链上程序和状态压缩工具,用于处理关键的游戏生命周期功能。所有程序都设计为可互操作和模块化。这些程序还可以定制以满足开发人员的个人需求。他们的基础设施开发工具包专注于以下核心功能:

  • 闲置玩家奖励(质押)
  • 任务(任务)
  • 战利品箱或 RNG 奖品(抽奖)
  • 公会/派对
  • 游戏代币(托管和非托管)
  • 可变数字资产
  • 创建和管理数字资产
  • 球员档案
  • 费用结构

他们的工具可以分为以下几类:

  • Hive Control:管理整个 Honeycomb 程序权限的所有权限和委托的主程序
  • 资产中心:一套用于创建和管理游戏内资产的工具
  • 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。该模块方便使用AxiosFetch进行 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 协议文档。 SDK 的文档可以在这里找到。

GameShift

GameShift是Solana Labs推出的一个平台,供游戏开发人员通过单个 API 轻松集成 Web3 元素。它旨在促进创建用户友好的 Web2 体验,同时利用 Solana 上游戏的优势。 GameShift 通过处理所有 Gas 费、区块链交互和钱包,在 Web3 生态系统中提供干净的用户体验。 GameShift API 有四个垂直领域:

  • 资产创建:使用结构化元数据铸造游戏资产
  • 资产交易:在品牌市场上以美元买卖资产,预计即将推出
  • 付款:170 多个国家/地区支持信用卡付款和付款处理集成,并提供 100% 退款保护
  • 钱包资产自我托管:允许玩家在非托管钱包中持有和交易资产(即没有密码或助记词!)

开发人员可以通过在 GameShift 控制台上创建帐户、设置组织、将开发人员添加到其组织、添加游戏以及管理其开发人员 API 密钥来开始使用 GameShift。整个过程概述如下

法币交易需要商家帐户。可以通过两个步骤创建帐户:

  • 了解您的业务 (KYB):要求开发商提供有关其业务的信息,以保持遵守货币传输法。目前,GameShift 仅支持向美国注册银行账户进行法币结算
  • 设置法币结算账户:开发人员准备好在生产中启用法币支付后,必须联系 GameShift 以获取其商家入职表格的链接。 KYB信息用该表格设置。验证可能需要几分钟,但某些情况可能需要手动审核

所有 GameShift 活动均在以下组织内组织:

来源:GameShift 文档

引导用户

一旦一切设置完毕,开发人员就可以与 REST API 进行交互。开发者可以注册用户,授予他们访问市场功能、链上资产和支付流程的权限。这是通过使用 API 密钥、用户的电子邮件地址和请求正文中的引用 ID(唯一值,例如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"
}
'

资产需要以下详细信息:

  • 描述- 提供有关资产的信息的 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 领导了多项举措,创建教程、工具和平台来帮助发展这个新兴社区。当构建在最快的区块链之上时,游戏的可能性是无限的。

💡
原文链接:https://www.helius.dev/blog

本文由SlerfTools翻译,转载请注明出处。

SlerfTools专为Solana设计的工具箱,致力于简化区块链操作,提供无编程全可视化界面,使发币管理流动性无代码创建Dapp等复杂过程变得安全简单。