技術資料: Unity 2Dプラットフォーマーゲーム「Jump Hero」開発

2024年10月17日

この技術資料は、Unityを使用して2Dプラットフォーマーゲームを開発するプロセスを体系的にまとめたものです。ゲームの企画、仕様、設計までの全体的なフローを理解し、開発をスムーズに進めるための指針となることを目的としています。


1. 企画書

プロジェクト名

「Jump Hero」~シンプルで爽快なジャンプアクションゲーム~

概要

「Jump Hero」は、シンプルな操作で楽しめる2Dプラットフォーマーゲームです。プレイヤーはキャラクターを操作して、障害物や敵を避けながらゴールを目指します。各ステージにはアイテムが隠されており、スコアシステムを導入することでリプレイ性を高めています。

ターゲット層

カジュアルゲーマーや10代~20代の若年層をターゲットにしています。短時間で手軽に遊べることから、モバイルゲーマーも対象に含めています。

ゲームの特徴

  • シンプルな横スクロールジャンプアクション
  • 多様な障害物や敵キャラクターが登場
  • アイテム収集とスコアシステムによる競技性
  • 短いステージ構成でテンポよくプレイ可能

収益モデル

基本プレイ無料の広告モデルを採用。ゲームオーバー時に広告を視聴することでプレイヤーが復活できる仕組みや、広告を無効化するアプリ内課金も導入予定。

開発スケジュール

  • フェーズ1: 基本操作の実装(1ヶ月)
  • フェーズ2: 敵キャラクターとアイテムの追加(1ヶ月)
  • フェーズ3: スコアシステムとUIの整備(1ヶ月)
  • 最終フェーズ: サウンド、アニメーションの追加、最終調整(2週間)

2. 仕様書

タイトル

「Jump Hero」

プラットフォーム

モバイル(iOS / Android)

ジャンル

2Dアクションプラットフォーマー

ゲームプレイ

  • 操作: 左右移動とジャンプのシンプルな操作。移動は仮想ジョイスティック、ジャンプはボタンで操作します。
  • ライフシステム: プレイヤーは3つのライフを持ち、敵や障害物に当たるとライフが減ります。ライフが全てなくなるとゲームオーバー。
  • アイテム: ステージ内にはコインや回復アイテムが隠されており、スコアを加算したりライフを回復したりできます。
  • ステージ構成: それぞれのステージは固定スクロール型で、ゴール地点に到達することで次のステージに進めます。
  • スコアシステム: ステージ内で取得したコインやクリアタイムに基づいてスコアが決定され、リーダーボードに記録されます。

キャラクター

  • プレイヤーキャラクター: 移動とジャンプを行う。速度やジャンプ力は設定可能。
  • 敵キャラクター: プレイヤーに触れるとダメージを与える敵。移動パターンや攻撃パターンが異なる。
  • アイテム: コインや回復アイテムが配置されており、取得することでスコアが上がったりライフが回復したりします。

UI要素

  • ライフ表示: 画面左上にハートで表示される。
  • スコア表示: 画面右上に現在のスコアが表示される。
  • ジャンプボタン: 画面右下にジャンプボタンが配置されている。

サウンド

  • BGM: 各ステージごとに異なるバックグラウンドミュージックを使用。
  • SE: ジャンプ、アイテム取得、敵との接触時に効果音が鳴る。

3. 設計書

システム設計

「Jump Hero」はステージクリア型の2Dプラットフォーマーゲームです。以下のシステム設計に基づいて実装されます。

1. クラス設計

PlayerController(プレイヤー制御)

  • 役割: プレイヤーキャラクターの移動とジャンプを制御
  • プロパティ:
    • moveSpeed: 移動速度
    • jumpForce: ジャンプ力
    • isGrounded: 地面に接触しているかどうか
  • メソッド:
    • Move(): 左右移動を処理するメソッド
    • Jump(): ジャンプ動作を処理するメソッド
    • TakeDamage(): ダメージを受けた際にライフを減少させる
public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 10f;
    private bool isGrounded;
    private Rigidbody2D rb;

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

    void Update()
    {
        Move();
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            Jump();
        }
    }

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

    void Jump()
    {
        rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
        {
            TakeDamage();
        }
    }

    void TakeDamage()
    {
        // ダメージ処理
    }
}

EnemyAI(敵の制御)

  • 役割: 敵キャラクターの動きを制御
  • プロパティ:
    • speed: 移動速度
  • メソッド:
    • Move(): 敵の移動処理
    • OnCollisionEnter2D(): プレイヤーとの衝突処理
public class EnemyAI : MonoBehaviour
{
    public float speed = 2f;

    void Update()
    {
        Move();
    }

    void Move()
    {
        transform.Translate(Vector2.left * speed * Time.deltaTime);
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            // プレイヤーにダメージを与える
        }
    }
}

GameManager(ゲーム全体の管理)

  • 役割: ゲーム全体の進行を管理
  • プロパティ:
    • score: 現在のスコア
    • lives: プレイヤーのライフ数
  • メソッド:
    • UpdateScore(): スコアの更新
    • GameOver(): ゲームオーバー処理
public class GameManager : MonoBehaviour
{
    public int score = 0;
    public int lives = 3;

    public void UpdateScore(int points)
    {
        score += points;
        // スコア表示の更新処理
    }

    public void GameOver()
    {
        // ゲームオーバー処理
    }
}

まとめ

この技術資料は、Unityでの2Dプラットフォーマーゲーム「Jump Hero」の開発に必要な企画、仕様、設計の概要を示しています。この資料を基に、開発を進めながら追加の調整や拡張を行うことで、完成度の高いゲームを効率的に作成することができます。

Unity,設計

Posted by hidepon