RustとWebAssemblyによるゲーム開発

―安全・高速・プラットフォーム非依存のWebアプリ開発入門

[cover photo]
TOPICS
Programming , Game
発行年月日
PRINT LENGTH
368
ISBN
978-4-8144-0039-3
原書
Game Development with Rust and WebAssembly
FORMAT
Print PDF EPUB
Ebook
4,290円
Ebookを購入する
Print
4,290円

WebAssemblyの登場で、JavaScriptを使わなくてもブラウザを操作することが可能になり、使い慣れた言語をブラウザ環境でも使うことができるようになりました。本書では、簡単なゲーム開発を通じて、JavaScriptやTypeScriptを使わずに、安全性、高速性、並列性で定評のあるRustを使って、従来より高速かつ安全にブラウザを動かす方法を学ぶことができます。システムプログラミングだけではなく、Web開発においてもRustの威力を体感することができます。本書では、Rustの実行環境としてWebAssemblyを使用していますが、WebAssemblyそのものを解説しているわけではありません。しかし、WebAssemblyでRustを動かしたい人に最適です。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷正誤表

(2023年10月30日更新)

■p72、5行目
【誤】
let f = Rc>> = Rc::new(RefCell::new(None));
let g = f.clone();
【正】
let f : Rc>> = Rc::new(RefCell::new(None));
let g = f.clone();

目次

まえがき

Ⅰ部 Rust、WebAssembly、ゲーム開発の開始

1章 Hello WebAssembly
    1.1 技術上の準備
    1.2 WebAssemblyとは何か?
    1.3 RustとWebAssemblyプロジェクトのスケルトンの作成
    1.4 HTML Canvasを用いたスクリーンへの描画
        1.4.1 現状のコード
        1.4.2 三角形の描画
        1.4.3 シェルピンスキーの三角形
    1.5 まとめ

2章 スプライトの描画
    2.1 技術上の準備
    2.2 ゲーム「Walk the Dog(犬の散歩)」のデザイン
    2.3 Canvasへのスプライトの描画
        2.3.1 画像のロード
        2.3.2 Canvasの座標
        2.3.3 画像の描画
        2.3.4 JavaScriptのコールバック
        2.3.5 非同期Rust
    2.4 スプライトシートを用いた複数スプライトのロード
        2.4.1 JSONのロード
        2.4.2 JSONのパース
        2.4.3 「クッキーカッター」による描画
    2.5 スプライトシートを用いたキャラクターアニメーション
    2.6 まとめ

Ⅱ部 エンドレスランナーの作成

3章 ゲームループの作成
    3.1 技術上の準備
    3.2 最小限のアーキテクチャの導入
        3.2.1 Good? Bad? I'm the guy with code
        3.2.2 階層アーキテクチャ
        3.2.3 browserモジュールの作成
        3.2.4 画像のロード
    3.3 ゲームループの作成
        3.3.1 requestAnimationFrame
        3.3.2 Gameトレイト
        3.3.3 タイムステップの補正
        3.3.4 アセットのロード
        3.3.5 描画コードの整理
        3.3.6 ゲームループの統合
    3.4 キーボード入力の追加
    3.5 Red Hat Boyの操作
    3.6 まとめ

4章 ステートマシンを用いたアニメーションの管理
    4.1 技術上の準備
    4.2 ステートマシンの説明
        4.2.1 ステートマシンの定義
        4.2.2 型による実装
    4.3 アニメーションの管理
        4.3.1 状態遷移
        4.3.2 ステートマシンの管理
        4.3.3 Intoを使ってコードをきれいにする
        4.3.4 ステートマシンの統合
        4.3.5 RedHatBoyの描画
        4.3.6 RHBの更新
        4.3.7 Running状態の追加
        4.3.8 スライディングへの遷移
        4.3.9 スライディングへの遷移とスライディングからの遷移
        4.3.10 これまでに理解したこと
        4.3.11 ジャンピングへの遷移
    4.4 まとめ

5章 衝突判定
    5.1 技術上の準備
    5.2 舞台の作成
        5.2.1 背景の追加
        5.2.2 障害物の追加
    5.3 軸平行バウンディングボックス
        5.3.1 衝突
    5.4 スプライトシートからのバウンディングボックスの取得
        5.4.1 トリミングしたシートの追加
    5.5 障害物との衝突
        5.5.1 岩のバウンディングボックス
        5.5.2 RedHatBoyのバンディングボックス
        5.5.3 衝突したら転倒する
    5.6 浮き台への着地と浮き台からの落下
        5.6.1 浮き台の追加
        5.6.2 下からの衝突
        5.6.3 バウンディングボックスの透明部分
    5.7 まとめ

6章 エンドレスランナーの作成
    6.1 技術上の準備
    6.2 背景のスクロール
        6.2.1 RHBのx座標を固定する
        6.2.2 無限に続く背景
    6.3 エンドレスランナーのリファクタリング
        6.3.1 f32 vs. i16
        6.3.2 Rectを使いやすくする
        6.3.3 Obstacleトレイト
        6.3.4 スクリーンから消えた障害物を削除する
        6.3.5 スプライトシートの共有
        6.3.6 さまざまな浮き台
    6.4 動的なレベルの生成
        6.4.1 セグメントの生成
        6.4.2 タイムラインの追加
        6.4.3 セグメントの生成
    6.5 まとめ

7章 効果音と音楽
    7.1 技術上の準備
    7.2 Web Audio APIのエンジンへの追加
        7.2.1 Rustでの音楽再生
        7.2.2 音源のロード
        7.2.3 音声をエンジンに追加する
    7.3 効果音の再生
        7.3.1 RedHatBoyContextとRedHatBoyのリファクタリング
        7.3.2 効果音の追加
    7.4 長い音楽の再生
    7.5 まとめ

8章 UIの追加
    8.1 技術上の準備
    8.2 「New Game」ボタンのデザイン
        8.2.1 UIの準備
        8.2.2 Rustでボタンを表示する
    8.3 ゲームオーバー時のボタンの表示
        8.3.1 ステートマシンの検討
        8.3.2 ステートマシンの再設計
    8.4 新たなゲームの開始
        8.4.1 プリロード
    8.5 まとめ

Ⅲ部 テストと先進的な手法

9章 テスト、デバッグ、パフォーマンス
    9.1 技術上の準備
    9.2 自動テストの作成
        9.2.1 テスト駆動開発
        9.2.2 準備
        9.2.3 純粋な関数
        9.2.4 browserモジュールの隠蔽
        9.2.5 ブラウザテスト
        9.2.6 Asyncテスト
    9.3 ゲームのデバッグ
        9.3.1 ログ vs.エラー vs.パニック
        9.3.2 リントと Clippy
    9.4 ブラウザを用いた性能測定
        9.4.1 フレームレートカウンタ
        9.4.2 ブラウザのデバッガ
        9.4.3 メモリのチェック
    9.5 まとめ

10章 継続的デプロイ
    10.1 技術上の準備
    10.2 継続的インテグレーション /継続的デリバリー( CI/CD)パイプラインの作成
        10.2.1 GitHub Actions
        10.2.2 Node.jsとwebpack
    10.3 テストビルドとプロダクションビルドのデプロイ
    10.4 まとめ

11章 参考資料と次にすべきこと
    11.1 技術上の準備
    11.2 挑戦的な課題を通じた復習
        11.2.1 犬はどこへ行った?
    11.3 さらなる参考資料
        11.3.1 JavaScriptライブラリの利用
    11.4 まとめ

索引