コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity 入門】全方位シューティングを作る 第18回 プレイヤーのレベルアップ

目次

前回のチュートリアル

はじめに

前回は、プレイヤーと宝石の当たり判定を作成しました
今回は、プレイヤーのレベルアップを作成していきます

レベルアップとボム

今回作成する全方位シューティングでは、
プレイヤーがレベルアップした時に自動でボムが発動し、
周囲の敵を一掃できるようにしていきます

宝石のスクリプトの修正

まずは、宝石を取ったらプレイヤーの経験値が増えるようにしていきます

「Gem」スクリプトをコードエディタで開き、
OnTriggerEnter2D 関数の最後に下記のコードを追加します

// プレイヤーの経験値を増やす
var player = collision.GetComponent<Player>();
player.AddExp( m_exp );

プレイヤーのスクリプトの修正

次は、プレイヤーがレベルアップするコードと、
ボムを発動するコードを作成していきます

「Player」スクリプトをコードエディタで開き、
変数の定義に下記のコードを追加します

public int m_nextExpBase; // 次のレベルまでに必要な経験値の基本値
public int m_nextExpInterval; // 次のレベルまでに必要な経験値の増加値
public int m_level; // レベル
public int m_exp; // 経験値
public int m_prevNeedExp; // 前のレベルに必要だった経験値
public int m_needExp; // 次のレベルに必要な経験値

次に、Awake 関数の最後に下記のコードを追加します

m_level = 1; // レベル
m_needExp = GetNeedExp( 1 ); // 次のレベルに必要な経験値

さらに、Damage 関数の下に下記のコードを追加します

// 経験値を増やす関数
// 宝石を取得した時に呼び出される
public void AddExp( int exp )
{
    // 経験値を増やす
    m_exp += exp;

    // まだレベルアップに必要な経験値に足りていない場合、ここで処理を終える
    if ( m_exp < m_needExp ) return;

    // レベルアップする
    m_level++;

    // 今回のレベルアップに必要だった経験値を記憶しておく
    // (経験値ゲージの表示に使用するため)
    m_prevNeedExp = m_needExp;

    // 次のレベルアップに必要な経験値を計算する
    m_needExp = GetNeedExp( m_level );

    // レベルアップした時にボムを発動する
    // ボムの発射数や速さは決め打ちで定義しているため
    // 必要であれば public 変数にして、
    // Unity エディタ上で設定できるように変更してください
    var angleBase = 0;
    var angleRange = 360;
    var count = 28;
    ShootNWay( angleBase, angleRange, 0.15f, count );
    ShootNWay( angleBase, angleRange, 0.2f, count );
    ShootNWay( angleBase, angleRange, 0.25f, count );
}

そして、AddExp 関数の下に下記のコードを追加します

// 指定されたレベルに必要な経験値を計算する関数
private int GetNeedExp( int level )
{
    /*
     * 例えば、m_nextExpBase が 16、m_nextExpInterval が 18 の場合、
     *
     * レベル 1:16 + 18 * 0 = 16
     * レベル 2:16 + 18 * 1 = 34
     * レベル 3:16 + 18 * 4 = 88
     * レベル 4:16 + 18 * 9 = 178
     *
     * このような計算式になり、レベルが上がるほど必要な経験値が増えていく
     */
    return m_nextExpBase + 
        m_nextExpInterval * ( ( level - 1 ) * ( level - 1 ) );
}

これで、プレイヤーが宝石を取ったら経験値が増え、
レベルアップに必要な経験値になったらレベルアップして
ボムを発動するコードの作成が完了しました

経験値テーブルのパラメータを調整

最後に、レベルアップするために必要な経験値の計算に必要な値を設定します

f:id:baba_s:20180331195146p:plain

Unity に戻り「Player」オブジェクトを選択して、
「Next Exp Base」(次のレベルまでに必要な経験値の基本値)に「16」、
「Next Exp Interval」(次のレベルまでに必要な経験値の増加値)に「18」と入力します

f:id:baba_s:20180331195350g:plain

これで Unity を再生すると、宝石を集めて経験値が増えるとレベルが上がり、
レベルアップした時にボムが発動するようになったことが確認できます

次回は、BGM を実装していきます

次のチュートリアル

チュートリアル一覧