前回の記事ではローグライクゲームのプレイ内容に応じて行動内容を表示し、古いものから自動スクロールで消していくメッセージシステムを作成しました。
また、戦闘システムとの連動を実現しました。
前回の記事:
今回の記事ではローグライクを魅力あふれるゲームシステムとして有名にした食料システムをUnityとC#スクリプトを用いて開発していきます。
ローグライクゲームにおける食料システムの概要
この講座では、食料というパラメータをプレイヤーに新しく持たせます。
食料は行動する度に1ポイントずつ減っていきます。そして、0になると次からは一度行動するごとにHPが減っていく形でゲームシステムを構築していきます。
満腹度を表すパラメータとUIの追加
それでは早速食料システムを作っていきます。
今回も先にUIの方を追加します。
この講座のその6で作成したシーンの「PlayerUI」にUIを追加します。
画像での「PlayerUI」以下のGameObject階層は次のようになります。
「FoodRoot」が食料用のGameObjectになります。基本的な部分は講座その6で作成した「LevelRoot」と同じになります。
- 「PlayerUI」
- – 「Root」
- – – …省略
- – – 「FoodRoot」:追加
- – – – 「Label」
- – – – 「Food」
この中の「Food」はスクリプトから制御します。
各GameObjectの作成方法とパラメータの一例は次のものになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// - -「FoodRoot」 「LevelRoot」のものをコピー 「Root」の子GameObjectにする RectTransform + Width = 80, Height = 30 子GameObject 「Label」 + TextコンポーネントのText = Fd 子GameObject 「Food」 + 名前を「Food」に変更 + TextコンポーネントのText = 99 ※テキストがはみ出てしまった時は「Root」のサイズを調節してください。 |
食料パラメータとなる満腹度の追加
次にスクリプトに食料パラメータを組み込んでいきます。
「Player」コンポーネントの内容を次のようにしてください。
1 2 |
//次のものを追加 public int Food = 99; |
「Player」コンポーネントに食料のパラメータを追加したので、次は「PlayerUI」の方も合わせて更新します。
1 2 3 4 5 6 7 8 9 10 11 12 |
//次のものを追加 [SerializeField] public Text FoodText; //次のものを修正 private void Update() { if (Player == null) return; LevelText.text = Player.Level.ToString(); LifeText.text = Player.Life.ToString(); AttackText.text = Player.Attack.ToString(); ExpText.text = Player.Exp.ToString(); FoodText.text = Player.Food.ToString(); //追加 } |
「PlayerUI」コンポーネントの方の修正が終わったら、シーンの「PlayerUI」コンポーネントの「FoodText」フィールドにシーンの「Food」を忘れずに設定してください。
ここまでで食料のUI表示ができましたので、次はプレイヤーがアクションを行ったら食料を減らすようにしていきます。
移動する度に食料の値が1減ると成功です。
食料が0の時は体力が減るかどうか、体力が0になったらゲームオーバーになるかも確認してください。
まとめ
今回の記事ではローグライクゲームをより面白くする食料システムを実装しました。
やったことをまとめると以下のようになります。
- プレイヤーに食料パラメータを追加
- UIに満腹度を表示するようにした
- プレイヤーが行動すると食料が減っていくようにした
- 食料が0以下の時は体力が減り、0になるとゲームオーバーになる処理を実装
それでは次の記事に行ってみましょう。
次は武器システムを開発していきます。
コメント