デジタルコンテンツの制作

nekosuko.jp

RPG レッスン

【16】バトルシーンを作ってみる|RPGを作ってみる

更新日:

バトルシーンを監督するオブジェクト

他のシーンと同じようにバトルシーンの設定をします。


Directorオブジェクトを作成し、battleDirectorスクリプトを作成してアタッチします。



SoundManagerにバトルシーンのBGMを再生するメソッドを作成して、BattleDirectorのStartメソッドで実行しましょう。

コードを書きやすくするため、主人公ステータスと敵ステータスはメンバ変数で参照させておきます。

BattleDirector.cs

private UnitStatus heroStatus;
private UnitStatus enemyStatus;

BattleDirector.cs -> Start()

if (GameManager.instance == null)
{
    GameManager.LoadScene("TITLE");
    return;
}

heroStatus = GameManager.instance.PlayRecord.HeroStatus;
enemyStatus = GameManager.instance.PlayRecord.EnemyStatus;


 

敵キャラ画像を表示するスプライト

GameObject -> 2D Object -> Sprite

敵キャラを表示するためのスプライトオブジェクト、EnemySpriteを作成しておきます。

EnemySpriteの位置はデフォルトのカメラの位置に合わせて以下の画像のようにしました。

使うつもりの敵キャラ画像があれば試しに表示してみましょう。

ちなみに2Dスプライトに使うテクスチャは下の画像のようにTexture TypeをSprite(2D and UI)にしておきます。

敵キャラの画像サイズを変更したいときは、EnemySpriteオブジェクトのScaleを変更するのではなく、テクスチャのPixels Per Unitを変更します(値が大きいほど画像は小さくなる)。

 

バトル用のUIを配置する

ダンジョンシーンで作ったStatusWindowプレハブをHierarchyウィンドウに配置して実体化しておきます。

敵キャラの状態(HP)を表示するUIを作成します。

コマンドボタン(攻撃、防御、回復)を3つ作成します。

ダンジョンシーンで作った壁オブジェクトを配置して背景っぽくしてみましょう。

バトルボタンオブジェクトを作って3つのコマンドボタンはを子にしてまとめておきます。

デフォルトでは非表示にしておいて主人公のターンのときに表示するようにします。

BattleDirector.cs

ボタンオブジェクトをアウトレット接続するためのメンバ変数を作ります。

public GameObject BattleButton;

ユニットのターンのときの処理

BattleDirectorに主人公のターンのときに呼び出されるHeroTurnメソッドと敵キャラのターンのときに呼び出されるEnemyTurnメソッドを作っておきます。

HeroTurnメソッドでBattleButtonを表示するようにしておきます。

HeroTurnメソッドはStartメソッドで呼び出すようにしておきましょう。

BattleDirector.cs

private void HeroTurn()
{
    BattleButton.SetActive(true);
}
 
private void EnemyTurn()
{
 
}

BattleDirector.cs -> Start()

...
    HeroTurn();
...

敵キャラ画像を表示する

バトルシーンに切り替える前に敵キャラのデータは作成しているので、そのデータを使って敵キャラ画像を表示します。

EnemyDataスクリプトにIDをもとに画像を取得するメソッドを追加しておきましょう。

EnemyData.cs

public Sprite GetEnemySprite(string ID)
{
    foreach(var value in enemyList)
    {
        if (value.ID == ID)
        {
            return value.sprite;
        }
    }
    return null;
}

BattleDirector.cs


敵キャラのスプライトを操作するためのメンバ変数、SpriteRendere型のEnemySpriteを追加します。

public SpriteRenderer EnemySprite;

EnemySpriteオブジェクトをアウトレット接続します。

敵キャラの状態を表示するため、UIクラスを使うための名前空間とText型の変数enemyHPを追加します。

public Text EnemyHP;

敵キャラのHPのTextオブジェクトをアウトレット接続しておきます。

BattleDirector.cs -> Start()

Startメソッドで敵キャラの画像を表示します。

enemuStatusを取得した直後くらいに書いておきます。。

...
string enemyID = enemyStatus.ID;
Sprite sprite = GameManager.instance.enemyData.GetEnemySprite(enemyID);
EnemySprite.sprite = sprite;
...

いちいちローカル変数に入れているのですが、こうしておくほうがデバッグするときに便利なんです。


BattleDirector.cs -> Update()

Updateメソッドの中で敵キャラのHPの状態を更新します。

// Update is called once per frame
void Update()
{
    if (GameManager.instance == null)
    {
        return;
    }
    EnemyHP.text = enemyStatus.HP + " / " + enemyStatus.GetMaxHP();
}

これで敵キャラ画像と敵キャラのHPの状態が表示されるようになりました。

なかなか良い感じじゃないでしょうか。

リンク

-RPG, レッスン

Copyright© nekosuko.jp , 2021 All Rights Reserved.