新着:Parsed Events Scan APIをお試しください
ゲーミング:Solanaがゲームの世界をどう変えるか
ブログ/リサーチ

ゲーミング:Solanaがゲームの世界をどう変えるか

Developer Experience EngineerXの0xIchigoLinkedInの0xIchigoGitHubの0xIchigo
読了時間:28分

この記事で扱う内容

秘密鍵を持たなければ、暗号資産も自分のものではない。暗号資産の理念の中核をなすこの格言は、ビデオゲームにも当てはまります。ゲーム分野へのブロックチェーン統合は、単なるイノベーションではありません。分散型の資産所有と自律性を実現するパラダイムシフトです。その最前線にいるのがSolanaです。Web3の利点を活用できる最速のスマートコントラクトプラットフォームを提供します。Solanaの高速性、低額で予測可能な手数料、低レイテンシを活用することで、開発者はほかでは実現できない独自のゲーム体験を生み出せます。

この記事では、ゲームにおけるブロックチェーンの可能性を探り、Web3ゲーミングを支持する理由と、ゲーム開発者がSolanaでの開発を検討すべき理由を解説します。また、Solana統合ゲームを制作するための一般的なフレームワークやプラットフォームについて、インストール、設定、使用方法も説明します。

Web3ゲーミングを選ぶ理由

ゲーマーにとってのメリット

ほかのどのビデオゲームのコレクティブルも、Counter-Strikeには及びません。希少性やフロート値によっては、Counter Strike 2で最も希少なスキン、つまりゲーム内の武器用コスメティックアイテムに数千ドルの価値が付くこともあります。Counter-Strikeコミュニティで著名なトレーダーであるNeonは、10万ドルを超える価値のスキンを所有していました。2023年10月13日、AMDのAnti-lag+機能を有効にしたところ、Valveのアンチチート(VAC)システムによって誤ってBANされました。VACによってBANされるとプレイヤーのインベントリは取引不能になるため、Neonの10万ドル相当のインベントリは永久にアカウントへ固定されることになりました。Valveはこの問題について正式に見解を示し、幸いにもNeonのBANは解除されました。しかし、Counter-Strike 2では今もゲーム内での誤BANが問題になっています。

Steamのような従来のゲームプラットフォームには、購入したゲームやコレクティブルへのアクセスを失う潜在的なリスクが常にあります。Valveがユーザーの資産を取り上げることを阻む仕組みはありません。深刻な評判の低下やプレイヤー基盤全体の崩壊につながるため、その可能性は低いでしょう。しかし、希少アイテムのドロップ率を上げ、その価値を下げることは可能です。Team Fortress 2では、まさにこれが起こりました。価値の大小を問わず、購入したすべてのゲームと収集したすべてのゲーム内アイテムは、中央集権型の組織によって管理されています。ゲーマーはゲーム企業に生殺与奪を握られています。Ethereumが誕生したきっかけさえ、World of Warcraftのパッチ3.10でした。BlizzardがVitalik Buterinのキャラクターのライフ吸収スペルを弱体化し、何年にもわたるプレイを台無しにしたことから、彼は「中央集権化の恐ろしさ」について詳しく語っています。ゲーマーは中央集権型組織に支配されることにうんざりしています。Web3ゲーミングは、そこから抜け出す道を提供します。

Web3ゲーミングはパラダイムシフトです。ブロックチェーン技術を活用し、資産所有と意思決定プロセスを分散化します。透明性とセキュリティを確保し、プレイヤーがプラットフォームをまたいでゲーム内資産を真に所有できるようにします。その結果、Counter-Strikeのスキン市場のような仮想経済に、透明性、セキュリティ、コンポーザビリティという利点が加わります。こうした経済圏は、プレイを通じて現実世界の価値を報酬として得られるPlay-to-earn(P2E)など、ユーザー中心の新しいゲームモデルを可能にします。

これは決してニッチな概念ではありません。成功を収め、影響力を持つ複数のゲームが、Web3ゲーミングに業界を変革する可能性があることを示しています。たとえば、Decentralandは、プレイヤーが不動産をNFTとして購入、売却、開発できる仮想世界を提供しています。Tokens.comは、Decentralandの中心街にある不動産を200万ドル以上で購入しました。これは、Web3エコシステムにおける仮想経済、デジタル体験、個人空間の可能性を示しています。同様に、Axie InfinityのようなPlay-to-earnゲームや、Move-to-earnプラットフォームであるSTEPNのようなライフスタイルアプリは、ゲームプレイで収入を得られることを実証し、世界的な注目を集めました。Solanaでも、Star AtlasやAuroryなどのゲームが同様の成功を収めています。これらは孤立した事例ではありません。ゲームが娯楽の枠を越え、現実世界の経済・社会システムと融合していく、より大きな潮流の一部です。

開発者にとってのメリット

Web3ゲーミングの登場は、現在のゲームパラダイムの枠をはるかに超える新たな機会をゲーム開発者にもたらします。

  • 厚みのある市場と信頼性の保証:Web3ゲーミングは、より厚みがあり堅牢な市場を生み出します。ゲーム開発者は、参加者がより高い信頼性のもとで交流する世界規模のユーザー層にアクセスできます。ゲーム内のすべての所有権とトランザクションは検証可能で、改ざんできません。これは、ブロックチェーンが本質的に備える透明性とセキュリティによるものです。
  • 既存のオンチェーンプログラムの活用: 開発者は、既存のプログラムとそれに関連する資産をゲームへ簡単に統合できます。市場投入までの時間を短縮しながら、エコシステム内の協力を通じて創造性とイノベーションに集中できます
  • 経済とゲームプレイの革新:ゲーム開発者は、ほかのオンチェーンアプリケーションや体験を活用した、複雑なゲームループと経済ループを設計できます。この相互接続性により、あるゲーム内の行動が別のゲームにも波及する、豊かでダイナミックなゲーム世界を構築できます
  • MOD制作の促進: ブロックチェーンのオープン性により、ゲーム開発者はMOD制作を促進する形でゲームを構築できます。このオープン性は、プレイヤーがゲームの進化に貢献するコミュニティ主導のイノベーションにつながります。これは、クローズドソース環境から、協調的でコミュニティ中心の開発モデルへの転換です

ブロックチェーンが提供するのは、単なるゲーム開発プラットフォームではありません。新たな形のインタラクティブなデジタル体験を切り拓く媒体です。ブロックチェーンは、よりダイナミックで参加型のゲームエコシステムへの道を開きます。

Solanaで構築する理由

低額で予測可能なトランザクション手数料は、Web3ゲーミングに不可欠です。ゲーマーは、ゲームをプレイするために法外な手数料を払いたくありません。Solanaのトランザクション手数料は低く、多くの場合0.001米ドルを下回り、投票以外の平均手数料は0.000005~0.00007 SOL前後です。ローカライズド手数料市場により、これらの手数料は予測も可能です。混雑が局所化されるため、需要が集中しているステート領域へアクセスしようとするトランザクションだけで手数料が上昇します。これはEthereumのようなガスベースのネットワークとは異なります。そうしたネットワークではトランザクション手数料を予測できず、混雑時には単純なトランザクションでも100ドルを超えることがあります。

Solanaのアーキテクチャは、比類のないコンポーザビリティを提供します。プレイヤーにとっては、単一のウォレットで合理化されたユーザー体験を得られるということです。異なるプラットフォームへのブリッジに伴う複雑さを気にする必要はありません。Solanaエコシステム内では、あらゆるものにアクセスでき、相互接続されています。ゲーム開発者にとって、コンポーザビリティは豊富な機会をもたらします。開発者は、既存のオンチェーンプログラムを簡単に統合して活用できます(例:The RemnantsとMagic Edenの提携)。これにより、ゲーム資産の流動性がほかのL2やシャードに分散することを防げます。Solanaはコンポーザブルなエコシステムを育み、ネットワーク上のゲーム、コミュニティ、その他のアプリケーションがシームレスに連携できるようにします。

ゲームには高速性と低レイテンシが不可欠です。トランザクションが遅いと、ゲームステートの更新が妨げられ、耐えがたいラグや長い待ち時間が発生します。従来のゲームよりもユーザー体験が悪化してしまいます。Solanaは、高いトランザクションスループットを実現するよう設計されています。ユーザーが生成するトランザクションは平均で毎秒400件(TPS)で、需要が高いときには2,000 TPSを超えます。Firedancerのようなイノベーションも控えており、Solanaには従来のあらゆるコンシューマー向けアプリケーションを支えられる規模へ拡張できる可能性があります。Solanaが目標とするスロット時間、つまり各台帳がトランザクションを取り込んでブロックを生成するまでの時間は400ミリ秒です。ネットワーク需要に応じて500~600ミリ秒になることもありますが、利用可能なブロックチェーンの中で最速です。そのため、ストラテジーゲーム、ターン制ゲーム、都市建設ゲーム、放置ゲームなどのジャンルに最適なリアルタイムデータベースとなります。

Forever Gamesは、完全オンチェーンのゲームです。ゲームのステートとロジック全体がブロックチェーン上で実行される、ブロックチェーン統合の最も極端な例です。その結果、参入障壁が低く、豊富なプロトコル、dApps、プログラムのシステムにつながった永続的なゲームが実現します。Solana上の例には、次のものがあります。

ゲーマーにとって、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 | sh

Anchorでは、Rustを初めて使う方にRust bookの最初の9章を読むことも推奨しています。Anchorプログラムの作成に高度なRustの知識が必要となることはほとんどないため、ここで基礎を学べます。

AnchorにはSolana Tool Suiteも必要です。

コード
# 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 version manager(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向けのオープンソース自動化エンジンです。トランザクションのスケジューリングや、イベント駆動型プログラムの自動構築を可能にするため、ゲーム開発で特に役立ちます。次のコマンドでインストールでき、Anchorとスムーズに統合できます:cargo install -f --locked clockwork-cli。Clockworkの使用例はこちらにまとめられています。

Solana Playgroundは、プログラムのテストとデプロイに使用できるブラウザベースのコード開発環境です。統合開発環境(IDE)を備えているため、Anchorを初めて使い、Solanaゲーム開発を学びたい開発者に最適です。オンチェーンゲームに関連するAnchorチュートリアルが複数用意されています。たとえば、Tiny Adventureは初心者向けのオンチェーンゲームチュートリアルです。このチュートリアルでは、Anchorを使ってゲームキャラクターを左右に動かす方法と、Program Derived Address(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の構造体を簡単に再利用できます。現在、このプロジェクトはまだ開発初期段階です。しかし、Webサイトにはブラウザで実行できる複数の例があり、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マクロは、設定に使用します。設定文字列へのポインターとその長さを組み合わせた64ビット整数を返すconfig関数を公開します。これは、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は、Rustの構造体定義機能を強化するため、struckstruckクレートのstrikeマクロも使用します。通常、ネストされた構造体は個別に定義する必要があります。strikeマクロを使うと、ネストされた構造体をインラインで含む構造体を定義できます。この機能によってコードが簡素化され、複雑なデータ構造の可読性と簡潔さが向上します。また、構造全体にBorschシリアライズを自動適用します。さらに、最上位の構造体のderiveマクロを、ネストされたすべての構造体へ伝播します。

したがって、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を完全にサポートする予定であることです。たとえば、わずか2行のコードで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を統合したりできる、充実したツールセットを備えています。以下の機能が含まれます。

Magicblockはこれらすべての機能を通じて複雑さを抽象化し、開発者が可能な限り優れたユーザー体験の実現に集中できるようにすることを目指しています。このMITライセンスのフレームワークは、Magicblock Labs、つまりAndreaとPeakによってメンテナンスされています。

Solana Unity SDK

Solana Unity SDKは、ゲーム開発者がSolanaベースのNFT、トークン、オンチェーンプログラムをUnityゲームへ統合するためのツールを備えたオープンソースパッケージです。このSDKは、Solanaを.NETエコシステムと統合する.NET Standard 2.0互換フレームワークであるSolana Unity Coreを活用しています。JSON RPC APIの完全対応、命令の逆コンパイル、Solana Mobile Stackのサポート、ネイティブDEX操作など、多くの機能を備えています。

Solana Unity SDKを使用してUnityで構築されたゲームのサンプル一覧は、こちらにあります。

インストール、設定、使用方法

Unityで制作するには、こちらからUnity Hubをダウンロードします。Unity HubではUnity Editorの複数のインストールを管理でき、異なるバージョンでのプロジェクト作業や新規プロジェクトの作成が可能です。続行する前に、システムが次の要件を満たしていることを確認してください。

  • OS: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」を選択します。

テキストボックスにGit URLのhttps://github.com/magicblock-labs/Solana.Unity-SDK.gitを入力し、「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へ接続する方法、ウォレットの公開鍵と残高を取得する方法、ゲーム内ウォレットでテストを実施する方法、チェスエンジンをオンチェーンで構築する方法に関するチュートリアルがあります。

Solana Unity SDKのGitHubリポジトリにも、命令のデコードからトランザクションの構築まで、複数のサンプルスクリプトがあります。

Jupiterの実装例

Solana Unity SDKはOrcaに加え、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#コードに変換する作業を効率化します。統合プロセスは、主に次の2つのステップで構成されます。

  • インストール:Solana Unity Anchor Toolをインストールするには、dotnet tool install -g Solana.Unity.Anchor.Toolコマンドを使用します。-gフラグを指定するとパッケージがグローバルにインストールされるため、新しいプロジェクトごとにこのツールをインストールする必要がなくなります
  • コード生成: プログラムのC#表現を生成するには、dotnet anchorgen -i idl/file.json -o src/ProgramCode.csコマンドを使用します。このコマンドは指定したIDLを、Unityですぐに使用できるC#ファイルへ変換します。

開発者は、これらの手順に従うことでSolanaプログラムをUnity環境へ効率的に移植できます。Jonas Hahnが作成した、このプロセスのステップごとの動画ウォークスルーはこちらにあります。

SOAR

Solanaオンチェーン実績・ランキング(SOAR)は、Solana上のリーダーボード、実績、プレイヤープロフィール、自動報酬配布をシームレスに管理するためのプログラムです。以下を含む複数の機能をサポートしています。

  • リーダーボードの作成
  • 実績の管理
  • TypeScriptクライアントのサポート
  • Cross-Program Invocation(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)向けスターターテンプレートが含まれています。また、以下の機能も備えています。

  • C++とBlueprint Visual Scriptingで利用できる完全なSolnet機能
  • データ保護と暗号化を備えたゲーム内ウォレットシステム
  • Metaplex NFTのミント
  • 決済処理

このプラグインは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を適切にセットアップするための参考資料として利用できます。基本的な使用方法、LinkStreamラッパーのカスタマイズ方法、サーバー認証用REST APIとの連携方法の詳しい説明は、Solana Unreal SDKのGitHubで確認できます。Unreal SDKを使用してSolanaと連携する方法のさらに詳しい説明は、こちらで確認できます。

Unrealは3Dの最適化とポストプロセスエフェクトに重点を置いているため、Unityなどの他のエディターと比べて写実的なゲームを制作できます。この超写実性の代表例がStar Atlasです。Star Atlasは、宇宙の深淵を旅する没入型ストラテジーゲームです。さまざまな機会、領土争い、政治的駆け引きに満ちています。Yaku Corpなどのゲームも、Unreal Engineの写実性を活用して没入感の高いMMORPGを制作しています。

Honeycomb

Honeycombは、Web3ゲームの開発プロセスを効率化するためにTumi Labsが開発したプロトコルです。Honeycombは、ゲームのライフサイクルに不可欠な機能を処理するオンチェーンプログラムと状態圧縮ツールのスイートです。すべてのプログラムは相互運用可能かつモジュール式に設計されています。開発者ごとのニーズに合わせてカスタマイズすることもできます。このインフラ開発ツールキットは、以下の中核機能に重点を置いています。

  • アイドルプレイヤーへの報酬(ステーキング)
  • クエスト(ミッション)
  • ルートボックスまたはRNG報酬(抽選)
  • ギルド/パーティー
  • ゲームトークン(カストディ型とノンカストディ型)
  • 変更可能なデジタル資産
  • デジタル資産の作成と管理
  • プレイヤープロフィール
  • 手数料体系

各ツールは、以下のカテゴリーに分類できます。

  • Hive Control:Honeycomb全体でプログラム権限のすべての許可と委任を管理するマスタープログラム
  • Asset Hub:ゲーム内資産を作成・管理するためのツールスイート
  • Nectar Utility:アイドル時のトークン報酬(ステーキング)、クエスト、ルートボックスなど、NFTに独自のゲーム機能を持たせるためのユーティリティツールスイート
  • Buzz Kit:ゲーム内ギルドを実現するためのツールスイート。Tumi Labsは、このツールセットでマッチメイキングとゲーム状態管理プログラムも開発する予定です

インストール

開発者は、JavaScript SDKと@solana/web3.jsを使用してHoneycombと連携できます。

コード
# 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と連携して、ユーザーIDとプロフィールを管理できます。guestIdentityは、キーペアまたはウォレットがHoneycombインスタンスに登録されるまで、プレースホルダーとして使用されるデフォルトIDです。次のコマンドでキーペアをIDとしてリンクできます:honeycomb.use(keypairIdentity(<keypair>);。同様に、Honeycombインスタンスで利用できるwalletIdentity関数を使って、ウォレットオブジェクト(Solana Wallet Adapter)をIDとして登録できます。IDは、メッセージやトランザクションへの署名など、認証に使用できます。

もう1つの興味深い例が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);
  });

開発者がDigital Asset Standard(DAS)APIなどのサードパーティAPIへアクセスし、ゲーム外の他のオンチェーンデジタル資産を照会できるため、これは特に注目すべき機能です。

これらのコードスニペットは、Honeycomb Protocolのドキュメントを基に調整したものです。SDKのドキュメントはこちらで確認できます。

GameShift

GameShiftは、ゲーム開発者が単一のAPIを通じてWeb3要素を簡単に統合できるよう、Solana Labsが提供を開始したプラットフォームです。Solana上のゲームが持つ利点を活かしながら、使いやすいWeb2体験の構築を支援します。GameShiftは、すべてのガス代、ブロックチェーンとのやり取り、ウォレットを処理し、Web3エコシステム内で快適なユーザー体験を提供します。GameShift APIには4つの領域があります。

  • 資産作成:構造化メタデータを使用したゲーム資産のミント
  • 資産取引:近日公開予定のブランド独自マーケットプレイスで、資産を米ドルで売買
  • 決済:170か国以上で対応するクレジットカード決済と決済処理の統合、100%のチャージバック保護
  • ウォレット資産の自己管理:プレイヤーがノンカストディアルウォレットで資産を保有・取引可能(パスワードやシードフレーズは不要です)

開発者は、GameShiftコンソールでアカウントを作成し、組織を設定して開発者を追加し、ゲームを追加して、開発者用APIキーを管理することでGameShiftを使い始められます。全手順はこちらに記載されています。

法定通貨での取引にはマーチャントアカウントが必要です。アカウントは次の2ステップで作成できます。

  • Know Your Business(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 SDK、Solana Unreal SDKなどのツールにより、開発者は新しいゲーム体験を生み出せます。ゲーマーが仮想経済を構築し、これまでにないソーシャルなつながりの中で交流することは、かつてないほど容易になりました。しかも、完全に透明でアクセスしやすい形で実現できます。HoneycombやGameShiftなどのプラットフォームは、開発プロセスを効率化し、プレイヤーのエンゲージメントを高めることで、Web3ゲームの可能性をさらに示しています。

Solanaは、このゲーム革命の最前線に立っています。Solanaのゲームコミュニティは着実に成長しており、専用のハッカソンが開催され、新しいゲームも登場しています。Solana LabsとSolana Foundationは、成長途上のコミュニティを支援するため、チュートリアル、ツール、プラットフォームを提供する取り組みを主導しています。最速のブロックチェーン上で構築することで、ゲームがどのように進化できるか、その可能性は無限です。

ここまで読んでくださった皆さん、ありがとうございます。以下にメールアドレスを入力して、Solanaの最新情報を見逃さないようにしてください。さらに深く学ぶ準備はできましたか?今すぐDiscordに参加し、最高水準のパフォーマンスを誇るブロックチェーン上でゲームの未来を構築しましょう。

その他のリソース/関連資料

Heliusを購読

Solana開発の最新情報や新しい記事の公開通知を受け取れます

拡大画像