Unity
Unity2D
Rogue
Unity入門
Unity2018

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

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つ並べてそこに表示している。

配列などを使えばスムーズに書けるのですが力技で実装しています。持っているチンケなカードで勝負している感が凄い。


今後実装すべきもの


  • ゲームボリューム:敵や攻略フロアの追加

  • アイテム:インベントリとアイテムの実装。拠点では倉庫と商人も欲しい。

  • トラップ:ダメージ床やワープ等

アイテム要素が入れられたらローグライクとしての基本がほぼ完成する。

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