Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ コードの説明 | Flappy Birdゲームの改良
Unityでの格闘ゲーム

bookコードの説明

メニューを表示するにはスワイプしてください

プレイヤーコード

Start メソッドでの初期化

private void Start()
{
    startPosition = transform.position;
}

目的: ゲーム開始時にプレイヤーの初期位置を保存。

プレイヤー位置のリスタート

public void RestartPlayerPosition()
{
    transform.position = startPosition;
    rb.velocity = Vector2.zero;
}

目的: プレイヤーの位置を開始位置にリセットし、速度をゼロに設定して動きを停止する。

Updateメソッドでのプレイヤー入力処理

private void Update()
{
    Vector2 oldVelocity = rb.velocity;
    if (Input.GetKeyDown(KeyCode.Space))
    {
        oldVelocity.y = 6;
    }
    oldVelocity.x = 4;
    rb.velocity = oldVelocity;
}

目的: プレイヤーの入力(スペースキー)を検知し、y方向の速度を6に設定してプレイヤーを「ジャンプ」させ、x方向の速度を常に4に設定して右方向への移動を維持する。

衝突処理

OnCollisionEnter2D

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.collider.tag == "ground")
    {
        RestartPlayerPosition();
    }
}

目的:タグが「ground」となっているオブジェクトと衝突した際にプレイヤーの位置をリセット。

OnTriggerEnter2D

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.tag == "win")
    {
        winPanel.SetActive(true);
        SoundManager.instance.PlayEffect(1);
    }
}

目的:タグが「win」となっているオブジェクトにプレイヤーが接触した際、勝利パネルを表示し、効果音を再生。

まとめ

  • 移動:プレイヤーは右方向に継続的に移動し、スペースキーを押すとジャンプ;
  • リスタート:地面と衝突するとプレイヤーの位置がリセット;
  • 勝利:勝利トリガーに到達すると勝利パネルを表示し、効果音を再生。

SoundManager クラス

Start メソッド

private void Start()
{
    if (instance == null)
    {
        instance = this;
    }
    else
    {
        Destroy(gameObject);
        return;
    }
    DontDestroyOnLoad(gameObject);
}

目的: シングルトンパターンを使用して、ゲーム内に SoundManager のインスタンスが一つだけ存在するようにする。DontDestroyOnLoad(gameObject) を使い、異なるシーン間でオブジェクトを保持する。

PlayEffect メソッド

public void PlayEffect(int index)
{
    if (index >= 0 && index < effects.Count)
    {
        source.PlayOneShot(effects[index]);
    }
}

目的: 整数型の index を受け取り、effects リストから再生する効果音を指定する。indexeffects リストの有効な範囲内かどうかを確認し、source.PlayOneShot(effects[index]) を使って指定された効果音を再生する。

まとめ

  • シングルトンパターンSoundManager のインスタンスがゲーム内で一つだけ存在し、シーンをまたいで保持されることを保証;
  • 効果音の再生PlayEffect メソッドを使用し、effects リスト内のインデックスを指定して効果音を再生;
  • オーディオソースAudioSource コンポーネントを利用してオーディオクリップを再生。

WinPanel クラス

WinPanel クラスは、プレイヤーが勝利した際に表示されるUIパネルの機能を提供。メインメニューに戻る、またはレベルを再スタートするメソッドを含み、それぞれ効果音を再生し、適切なシーンを読み込む。

メソッド

ReturnToMainMenu メソッド

public void ReturnToMainMenu()
{
    SoundManager.instance.PlayEffect(0);
    SceneManager.LoadScene(0);
}

目的: SoundManager.instance.PlayEffect(0) を使用してサウンドエフェクト(インデックス 0)を再生。SceneManager.LoadScene(0) を使用してビルドインデックス 0 のメインメニューシーンを読み込む。

RestartLevel メソッド

public void RestartLevel()
{
    SoundManager.instance.PlayEffect(0);
    SceneManager.LoadScene("Game");
}

目的: SoundManager.instance.PlayEffect(0) を使用してサウンドエフェクト(インデックス 0)を再生。SceneManager.LoadScene("Game") を使用して "Game" という名前のゲームシーンを読み込む。

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 5.  1

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 5.  1
some-alt