現場レベルのゲーム制作が、すべてここで学べます。
この記事はノンフィールドRPG講座の作り方の第7回です。
前回はダンジョンシーンのUIステータス更新処理とダンジョンの前進処理を実装しました。
前回の記事:

第7回ではダンジョンでの休憩ボタンや3Dダンジョン内でのカメラの移動処理を実装していきます。
休憩コマンドの処理を実装 食料を消費してHPを回復するシステムを追加
今回制作するゲーム仕様では、ダンジョンで休憩コマンドを実行することで食料を消費してHPを最大HPの20%回復させることとします。
そのために必要なスクリプト修正や効果音再生のためのアタッチなどを行っていきましょう。
GameConstants.cs
まずは回復率(20%)をGameConstantsに定数として定義します。
このあとにカメラの移動の実装で使うカメラの移動距離も定数と定義します。
また、ついでに前回までテスト用に前進したあとの待機時間として定義していたMoveSpeedを移動の早さの定数として3fに変更します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using UnityEngine; public class GameConstants { public const string SaveDataKey = "HATENAKIDUNGEON";// データ保存で使うキー public const int StartLevel = 1;// ゲーム開始時のレベル public const int StartFood = 100;// ゲーム開始時の食料 public const int InitialFloor = 1;// 最初の階層 public const int HeroBaseHp = 45;// プレイヤーのHP public const int HeroRateHp = 5;// プレイヤーのレベル1ごとのHP public const int EnemyBaseHp = 8;// 敵キャラのHP public const int EnemyRateHp = 3;// 敵キャラのレベル1ごとのHP public const int HeroBaseAttack = 3;// プレイヤーの攻撃力 public const int HeroRateAttack = 3;// プレイヤーのレベル1ごとの攻撃力 public const int EncountRate = 50;// 敵キャラとの遭遇率 public const float MoveSpeed = 3f;// 前進の速さ public const float MoveDistance = 3f;// 前進した時のカメラの移動距離 public const float RecoveryRate = 0.2f;// HPの回復量 } |
MoveDistanceとRecoveryRateを追加。MoveSpeedは値を変更しただけです。
UnitStatus.cs
キャラクターの回復量を取得するメソッドと休憩したときにHPを回復するメソッドをUnitStatusに追加します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
using UnityEngine; [System.Serializable] public class UnitStatus { public string ID; public int Level; public int Exp; public int HP; public UnitStatus(string id, int bonus) { ID = id; Level = GameConstants.StartLevel + bonus;// レベルの初期値にボーナスを加えて初期化 Exp = 0; HP = GetMaxHP(); } // 最大HPを取得する public int GetMaxHP() { if (ID == "HERO") { return GameConstants.HeroBaseHp + Level * GameConstants.HeroRateHp; } else { return GameConstants.EnemyBaseHp + Level * GameConstants.EnemyRateHp; } } // 回復量を取得する public int GetRecovery() { return (int)(GetMaxHP() * GameConstants.RecoveryRate);// 最大HPをRecoveryRateの割合だけ回復 } // 回復 public void Recovery() { HP += GetRecovery(); if (HP > GetMaxHP()) HP = GetMaxHP();// 最大HPを超えないようにする } } |
HPの回復処理を実装しました。先ほど定義したRecoveryRateを掛け算して20%だけ回復する処理を実現しています。
RPGなどでは回復システムでは最大HPを超えないようにする処理、ダメージ処理では0を下回ってマイナスにならない処理を予め設定しておくケースがよく出てきます。
SoundManager.cs
休憩ボタンをタッチしたときに再生される効果音を追加します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
using UnityEngine; public class SoundManager : MonoBehaviour { public static SoundManager Instance; private AudioSource audioSource; public AudioClip TitleBGM; public AudioClip DungeonBGM; public AudioClip TouchSE; public AudioClip RecoverySE; private void Awake() { if (Instance == null) { Instance = this; audioSource = GetComponent<AudioSource>(); DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { } // Update is called once per frame void Update() { } private void PlayBgm(AudioClip audioClip) { if (audioSource.clip == audioClip) return;// すでに再生されているBGMなら処理しない audioSource.clip = audioClip; audioSource.Play(); } public void PlayTitleBGM() { PlayBgm(TitleBGM); } public void PlayDungeonBGM() { PlayBgm(DungeonBGM); } public void PlayTouchSE() { audioSource.PlayOneShot(TouchSE); } public void PlayRecoverySE() { audioSource.PlayOneShot(RecoverySE); } } |
休憩の効果音をSoundManagerにアタッチする
[Assets/Scenes/Title]をクリックしてタイトルシーンを表示します。
HierarchyビューにあるSoundManagerオブジェクトをクリックして、Inspetorビューを表示します。

AssetStoreからインポートしたフォルダ[Leohpaz]→[RPG_Essentials_Free]→[8_Buffs_Heals_SFX]→[02_Heal_02]をドラッグアンドドロップします。
SoundManagerはシングルトンでTitle画面で作成し、そのまま他シーンでも使いまわす設計なので効果音はタイトル画面で設定するんでしたね。
アタッチが終わったら[Assets/Scenes/Dungeon]をクリックしてダンジョンシーンを表示して続きの開発を行います。
休憩したときにプレイデータを変更するメソッドを作成
休憩したときのプレイヤーの処理を追加します。休憩したときはHPを回復し食料を減らします。プレイヤーの数値情報はPlayRecord.csで管理していたのでこちらを修正しましょう。
PlayRecord.cs
まとめ

今回はダンジョンシーンの休憩とカメラの移動処理を実装しました。
演出面が強化され、ダンジョンを探索してる雰囲気が高まりましたね。
次回はバトルシーンの設定とUI画面を作成します。
次の記事:

現場レベルのゲーム制作が、すべてここで学べます。






コメント