プロジェクトポートフォリオ:Adventure Quest

2025年3月14日

以下は、第三者にプロジェクト制作実績と技術力をアピールするためのポートフォリオ資料のサンプルです。タイトルもその目的に合わせて、プロジェクトの魅力や技術的な挑戦を強調する内容にしています。

〜 技術力と情熱で切り拓く魔法の冒険 〜


プロフィール

山田 太郎

  • メール:taro.yamada@example.com
  • GitHub:github.com/taroyamadha

プロジェクト概要

プロジェクト名:Adventure Quest
ジャンル:2Dプラットフォームアクションゲーム
コンセプト
魔法の世界を舞台に、プレイヤーが主人公として敵を倒しながら宝物を集め、ゴールを目指す横スクロールアクションゲーム。

開発環境

  • ゲームエンジン:Unity 6
  • プログラミング言語:C#
  • ツール:Visual Studio 2022、Git/GitHub、Adobe Photoshop、Audacity

開発期間:2025年7月~2025年9月(2ヶ月)
開発体制:個人開発


技術的アプローチと設計

システムアーキテクチャ

  • MVCパターンを採用し、以下のように機能を分割:
    • Model:ゲーム内データ(キャラクターの状態、スコア等)の管理
    • View:UI表示、アニメーション管理
    • Controller:ユーザー入力やゲームロジックの制御

クラス設計と主要機能

  • PlayerController
    • 操作:左右移動、スペースキーでのジャンプ(二段ジャンプ実装)、マウスクリックで魔法弾発射
    • 接地判定:Raycastによる地面接触の検出
  • EnemyController
    • 行動パターン:パトロール、追跡、攻撃の各状態をステートマシンで管理
  • GameManagerUIManagerItemクラスを用いて、ゲーム全体の状態管理とUI更新を実現

コード例

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 10f;
    private Rigidbody2D rb;
    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"))
        {
            jumpCount = 0;
        }
    }
}

技術的挑戦と解決策

物理演算の調整

  • 課題:キャラクターのジャンプや移動が不自然
  • 原因:物理マテリアル設定の不足、Gravity Scaleの調整不備
  • 解決策
    • 物理マテリアル2Dを用いて摩擦・反発力を調整
    • Rigidbody2DのGravity Scaleの微調整
    • FixedUpdate()での物理計算の最適化

敵AIの多様化

  • 課題:敵キャラクターの行動パターンが単調でゲーム性が低下
  • 原因:状態管理の不十分さ
  • 解決策
    • ステートマシンを導入し、パトロール、追跡、攻撃、待機などの状態を明確に区分
    • 視界・聴覚判定の追加により、プレイヤーの動きに合わせた柔軟な反応を実現

テストとフィードバック

  • テスト手法
    • ユニットテスト、実機テスト(自作および第三者によるプレイテスト)
  • バグ修正
    • バグトラッキングシートで管理
    • Layer設定の見直し、Animatorの調整で解決

ユーザーテスト評価(5点満点)

  • 操作性:4.5
  • グラフィック:4.7
  • ゲーム性:4.3

フィードバック例

  • 「キャラクターの動きが滑らかで操作しやすい」
  • 「世界観に引き込まれるビジュアル」
  • 「敵のバリエーションが増えるとさらに面白い」

学習成果と今後の展望

習得したスキル

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

今後の展望

  • 機能追加:新規敵キャラクター、追加ステージ、ストーリー拡充
  • 技術的挑戦:オンライン機能(スコアランキング、協力プレイ)の導入、シェーダープログラミングによるビジュアル強化
  • 個人の成長:3Dゲーム開発、新たなプログラミング言語(Python、JavaScript)の習得、チーム開発経験の積み上げ

付録

使用素材・ライセンス

  • オリジナル素材:Adobe Photoshopで作成したグラフィック、Audacityで編集した音声
  • 第三者素材:UnityアセットストアのMagic Effects Pack(ABC Studio)、フリー素材サイト「効果音ラボ」

参考資料


このポートフォリオ資料は、私のプロジェクト制作における技術的挑戦と成果を分かりやすく示し、第三者の皆様に技術力と情熱をアピールするための実績資料です。

C#,Unity,就職活動

Posted by hidepon