2Dプラットフォーマーゲーム「Adventure Quest」技術資料

本資料は、2Dプラットフォーマーゲーム「Adventure Quest」の開発に関する技術的な詳細をまとめたものです。ゲームのコンセプトから実装、技術的な課題とその解決策、学習成果までを網羅しています。

はじめに

この資料を第三者に提示するときの前書きについて触れておきます

本技術資料をご覧いただき、ありがとうございます。

Adventure Quest」は、私が開発した2Dプラットフォーマーゲームであり、魔法の世界を舞台にプレイヤーが冒険する横スクロールアクションゲームです。本資料では、ゲームのコンセプトからシステム設計、実装の詳細、技術的な課題とその解決策、そして学習したことや得られた成果までを詳しく解説しています。

このプロジェクトは、6ヶ月間の集中的な学習と情熱の結晶であり、UnityとC#を用いて一から開発を行いました。実務未経験ながらも、ゲーム開発における基礎から応用までのスキルを習得し、多くの技術的挑戦に取り組んできました。

本資料を通じて、私の技術力、問題解決能力、そしてゲーム開発への情熱を感じていただければ幸いです。

プロジェクト概要

2.1 ゲームコンセプト

「Adventure Quest」は、魔法の世界を舞台にした2D横スクロールアクションゲームです。プレイヤーは主人公となり、敵を倒しながら宝物を集め、ゴールを目指します。

2.2 開発環境

  • ゲームエンジン:Unity 6
  • プログラミング言語:C#
  • 開発ツール
    • Visual Studio 2022:コードエディタおよびデバッグ
    • Git/GitHub:バージョン管理
    • Adobe Photoshop:グラフィック作成
    • Audacity:音声編集

2.3 開発期間と体制

  • 開発期間:2ヶ月(2023年7月〜2023年9月)
  • 開発体制:個人開発

システム設計

3.1 アーキテクチャ

ゲームのアーキテクチャは、MVCパターン(Model-View-Controller)をベースに設計しました。

  • Model:ゲーム内のデータ管理(プレイヤーや敵のステータス、スコアなど)
  • View:ユーザーインターフェース(UI)やアニメーションの表示
  • Controller:ユーザー入力やゲームロジックの制御

3.2 クラス設計

主要なクラスとその役割は以下のとおりです。

  • PlayerController:プレイヤーキャラクターの制御
  • EnemyController:敵キャラクターの制御
  • GameManager:ゲーム全体の状態管理(スコア、残機、ステージ管理)
  • UIManager:UI要素の更新と管理
  • Item:アイテムの取得と効果の適用

3.3 ゲームフロー

  1. タイトル画面:ゲームの開始、設定メニュー
  2. ステージ開始:プレイヤーキャラクターの初期化
  3. ゲームプレイ:敵や障害物を避けつつ進行
  4. ボス戦:ステージ最後にボス敵と対決
  5. ステージクリア:スコア集計、次のステージへ
  6. ゲームオーバー:残機がなくなるとタイトル画面に戻る

実装詳細

4.1 プレイヤーコントローラー

PlayerControllerクラスでは、以下の機能を実装しています。

  • 移動:左右の移動(A/Dキー、または←/→キー)
  • ジャンプ:スペースキーでジャンプ、二段ジャンプの実装
  • 攻撃:マウスクリックで魔法弾を発射
  • 接地判定:Raycastを使用して地面との接触を検出

コード例

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 10f;
    private Rigidbody2D rb;
    private bool isGrounded;
    private int jumpCount = 0;
    private int maxJumpCount = 2;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        Move();
        Jump();
        Attack();
    }

    void Move()
    {
        float moveInput = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);
    }

    void Jump()
    {
        if (Input.GetButtonDown("Jump") && jumpCount < maxJumpCount)
        {
            rb.velocity = new Vector2(rb.velocity.x, 0f);
            rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
            jumpCount++;
        }
    }

    void Attack()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            // 攻撃処理(魔法弾の発射)
        }
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isGrounded = true;
            jumpCount = 0;
        }
    }
}

4.2 敵AI

EnemyControllerクラスでは、以下のAI行動パターンを実装しています。

  • パトロール:一定範囲を往復移動
  • 追跡:プレイヤーが一定距離内に入ると追尾
  • 攻撃:近距離で攻撃アクションを実行
  • ステートマシンを用いて状態遷移を管理

4.3 物理演算と衝突判定

  • Rigidbody2DCollider2Dを用いて物理演算を実装
  • 物理マテリアル2Dで摩擦や反発力を調整
  • Layer Collision Matrixで特定のオブジェクト間の衝突を制御

4.4 アニメーション制御

  • Animator Controllerを使用し、状態遷移を設定
  • Blend Treeで移動速度に応じたアニメーションの切り替え
  • アニメーションイベントで攻撃タイミングを同期

4.5 UI/UXデザイン

  • Unity UIシステムを用いて、以下の要素を実装
  • スコア表示
  • ライフバー
  • アイテム取得の通知
  • レスポンシブデザインに対応し、解像度に応じてUIを調整

使用素材とライセンス

5.1 オリジナル素材

  • グラフィック
    • プレイヤーキャラクター、敵キャラクター、背景
    • 作成ツール:Adobe Photoshop
  • 音楽・効果音
    • 一部のBGMと効果音
    • 作成ツール:Audacity

5.2 第三者素材

  • Unityアセットストア
    • Magic Effects Pack by ABC Studio
      • 使用用途:魔法効果のエフェクト
  • フリー素材サイト
    • 効果音ラボ(https://soundeffect-lab.info/)
      • 使用用途:効果音

5.3 ライセンス遵守

  • すべての第三者素材は商用利用可能であり、クレジット表記の条件を遵守しています。
  • ゲーム内およびドキュメントで、素材提供者へのクレジットを明記。

技術的な課題と解決策

6.1 物理演算の調整

  • 課題:キャラクターのジャンプや移動が不自然で、操作性に問題があった。
  • 原因:物理マテリアルの設定不備と、重力スケールの適切でない設定。
  • 解決策
    • 物理マテリアル2Dを用いて、摩擦と反発力を調整。
    • Rigidbody2DGravity Scaleを微調整し、ジャンプアークを最適化。
    • FixedUpdate()での物理計算を見直し。

6.2 敵AIの複雑化

  • 課題:敵の行動パターンが単調で、ゲーム性が低下していた。
  • 原因:状態管理が不十分で、複数の行動を組み合わせられていなかった。
  • 解決策
    • ステートマシンを導入し、敵の状態(パトロール、追跡、攻撃、待機)を明確に定義。
    • 視界判定聴覚判定を追加し、プレイヤーの位置に応じて行動を変化。
    • NavMeshを用いて、地形に応じた移動を実現。

テストとデバッグ

7.1 テスト手法

  • ユニットテスト:主要なスクリプトに対してテストコードを作成。
  • プレイテスト:自分および第三者による実機テストを実施。
  • デバッグモード:Unityのデバッグ機能を活用し、リアルタイムで変数の監視。

7.2 バグの発見と修正

  • バグトラッキングシートを作成し、問題の再現手順、優先度、対応状況を管理。
  • 主なバグと対処
    • 衝突判定の不具合:Layer設定の見直しで解決。
    • アニメーションの遅延:Animatorの設定とトランジション条件を調整。

学習と成果

8.1 習得したスキル

  • Unityの深い理解:2Dゲーム開発におけるエンジンの機能を習得。
  • C#プログラミング:オブジェクト指向設計、デリゲート、イベントの活用。
  • AIアルゴリズムの基礎:ステートマシンやパスファインディングの実装。
  • 問題解決能力:バグの特定と解決、パフォーマンス最適化。

8.2 ユーザーテストの結果

  • テスター数:10名
  • 評価項目と平均スコア(5点満点)
    • 操作性:4.5
    • グラフィック:4.7
    • ゲーム性:4.3
  • フィードバック
    • 「キャラクターの動きが滑らかで操作しやすい」
    • 「ビジュアルが魅力的で世界観に引き込まれる」
    • 「敵のバリエーションが増えるともっと面白い」

今後の展望

  • 機能追加
    • 新しい敵キャラクターの実装
    • 追加ステージストーリー要素の拡充
  • 技術的挑戦
    • オンライン要素の導入(スコアランキング、協力プレイ)
    • シェーダープログラミングによるビジュアル強化
  • 個人の成長
    • 3Dゲーム開発への挑戦
    • 新しいプログラミング言語(Python、JavaScript)の習得
    • チーム開発の経験を積み、リードエンジニアを目指す

連絡先


ご清覧いただき、ありがとうございました。ご質問やフィードバックがございましたら、お気軽にご連絡ください。


付録

A. 使用アセット一覧

  • Magic Effects Pack by ABC Studio
    • Unityアセットストア:https://assetstore.unity.com/packages/slug/xxxxxx
  • 効果音ラボ
    • ウェブサイト:https://soundeffect-lab.info/

B. 参考資料

  • Unity公式ドキュメント
    • https://docs.unity3d.com/ja/2021.3/Manual/index.html
  • C#プログラミングガイド
    • https://learn.microsoft.com/ja-jp/dotnet/csharp/

技術資料のまとめ

本技術資料では、2Dプラットフォーマーゲーム「Adventure Quest」の開発プロセス、技術的な実装、課題とその解決策、そして得られた成果について詳細に説明しました。本プロジェクトを通じて、ゲーム開発における基礎から応用までのスキルを習得し、自己成長を実感しています。

今後も新たな技術に挑戦し、ゲーム開発者として成長していきたいと考えております。


C#,Unity,就職活動

Posted by hidepon