LoginSignup
5
3

More than 5 years have passed since last update.

【Unity2D】0からのローグライク作成記録その3~パラメータ・セーブ・UI~

Posted at

1.gif
タイトル画面。

2.gif
ゲーム最序盤プレイ画面。オリジナル要素が欲しくて、ミスタードリラー的な穴掘りローグライクゲームにしました。

下に実装に苦労したものを軽く書いておきます。
ド初心者向けです。

プレイヤーと敵のパラメータ管理

Unity-Excel-Importer-Makerを使いEXCELで管理している。HPなどのパラメータはプレイヤーや敵にアタッチしているスクリプトで取得するようにする。パラメータは管理する場所が分散しすぎないように。
EXCELからデータを抜き出す時にエラーが頻出していたが、int変数の場所に文字列が入っていた為だった。

セーブデータの管理

【Unity】オブジェクトをJsonにシリアライズしてテキストに保存・読み込みする
この記事を参考に作成。シーン切替時にオートセーブするようにした。保存項目はプレイヤーのステータスとセーブ時にいたシーン名。これによりロード時にそのシーンの最初からやり直す様に出来る。
またゲームオーバー時にはセーブだけして、拠点扱いのシーンに飛ばすようにした。

UI右上のメッセージダイアログ

「プレイヤーは10のダメージを与えた」「宝箱を開けた」などのメッセージ表示箇所です。空オブジェクトにスクリプトを貼っつけて管理しています。実装はキューを使っています。

qiita.rb
using UnityEngine.UI; //必須

public class UIControl : MonoBehaviour
{
    Text MessageDialog1; //メッセージダイアログの表示
    Text MessageDialog2; //メッセージダイアログの表示
    Text MessageDialog3; //メッセージダイアログの表示
    Text MessageDialog4; //メッセージダイアログの表示
    Text MessageDialog5; //メッセージダイアログの表示
    Queue<String> Message = new Queue<String>(); //メッセージダイアログの入れ物(キュー)
    int MaxMessegeCount = 30; //メッセージの最大ログ数
    string MessegeOut;

    //各クラスから受けとったメッセージを入れるメソッド
    public void MessageDialogIn(string InMessege)
    {
        //受け取ったメッセージを格納
        Message.Enqueue(InMessege);
        //メッセージログが最大になったら一つ消す
        if (Message.Count >= MaxMessegeCount)
        {
            Message.Dequeue();
        }
        MessageDialogOut();
    }

    //メッセージ表示用
    void MessageDialogOut()
    {
        //メッセージダイアログのテキストを取得(表示用)
        MessageDialog1 = GameObject.Find("MessageText (1)").GetComponent<Text>();
        MessageDialog2 = GameObject.Find("MessageText (2)").GetComponent<Text>();
        MessageDialog3 = GameObject.Find("MessageText (3)").GetComponent<Text>();
        MessageDialog4 = GameObject.Find("MessageText (4)").GetComponent<Text>();
        MessageDialog5 = GameObject.Find("MessageText (5)").GetComponent<Text>();

        //メッセージログを下から上にコピーしていき、最後に最下段はDequeueしたものを入れる
        MessageDialog1.text = MessageDialog2.text;
        MessageDialog2.text = MessageDialog3.text;
        MessageDialog3.text = MessageDialog4.text;
        MessageDialog4.text = MessageDialog5.text;
        MessageDialog5.text = Message.Dequeue(); ;
    }
}

プレイヤーの攻撃など、メッセージが出たら外部より「MessageDialogIn」を実行して飛ばしています。Enqueueで入力しDequeueで出力できる。UIはテキストボックスを縦に5つ並べてそこに表示している。
配列などを使えばスムーズに書けるのですが力技で実装しています。持っているチンケなカードで勝負している感が凄い。

今後実装すべきもの

  • ゲームボリューム:敵や攻略フロアの追加
  • アイテム:インベントリとアイテムの実装。拠点では倉庫と商人も欲しい。
  • トラップ:ダメージ床やワープ等

アイテム要素が入れられたらローグライクとしての基本がほぼ完成する。
床に置いてあるアイテムに接触→プレイヤーのインベントリに追加→メニューより使用→アイテム消失・効果発生→ターン経過としたいが、実装の難易度は高そう。良いアセットとか参考になるものがあったら誰か教えてください…。

5
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3