ユニティちゃんのRPGを作ってみよう24ー戦闘時のメッセージを表示するー

今回は戦闘時のメッセージをUIに表示する機能を作成していきたいと思います。

前回は戦闘シーンでの味方のターンの行動処理を作成しました。

ユニティちゃんのRPGを作ってみよう23ー味方の攻撃ターンを作成するー
ユニティちゃんのRPGで戦闘シーンでの味方の攻撃のターンで持っているスキルの中から選択肢を選び行動を起こす機能を作成していきます。

ユニティちゃんのRPGを作ってみようの他の記事は

ユニティちゃんのRPGを作ってみよう
ユニティちゃんのRPGを徐々に作っていくカテゴリです。

から見ることが出来ます。

前回まではBattleManagerスクリプト(戦闘管理スクリプト)やCharacterBattleScriptスクリプト(戦闘時のキャラクター毎の行動処理スクリプト)内でDebug.Logを使ってコンソールに戦闘時のメッセージを表示していました。

ですがコンソールで確認出来るのはゲーム開発者がUnityエディターを開いている時だけなので、メッセージをゲーム内のUIに表示してわかりやすくしたいと思います。

戦闘時のゲーム画面の下の方はコマンドパネル関連で埋めてしまったので、メッセージはゲーム画面の上に表示するようにします。

新しいメッセージが表示されたら古いメッセージが上に流れていくような表示方法もあると思いますが、今回は一言メッセージを表示するだけで過去のメッセージは追えないようにします。

なぜそうするかというとこちらの方が簡単だからです。(´Д`)

また古いメッセージは新しいメッセージが表示されるタイミングで消すことにします。

新しいメッセージが表示されなくても一定の時間が経ったら古いメッセージは消えるようにします。

スポンサーリンク

メッセージ表示パネルのプレハブを作成

まずは戦闘時のメッセージを表示するパネルのプレハブを作成していきます。

BattleUIゲームオブジェクトを選択した状態で右クリックからUI→Panelを選択し名前をMessagePanelとし、インスペクタのImageのColorを他のUIと同じように少し透けた黒色にします。

MessagePanelの位置とサイズは以下のようにしました。

ユニティちゃんRPGのMessagePanelの位置とサイズ

MessagePanelを選択した状態で右クリックからUI→Textを選択しRectTransformのAnchor Presetsでstretch stretchを選択しMessagePanelのサイズに合わせてTextの領域も変わるようにします。

Textにはデフォルトのメッセージを表示し、Font Sizeは24にしました。

ParagraphのAlignmentは真ん中表示にし、Colorは緑色にします。

ユニティちゃんRPGのMessagePanelの子要素のTextの設定

出来たらAssets/RPG/Prefabs/UI/BattleCommandフォルダにヒエラルキー上のMessagePanelをドラッグ&ドロップしてプレハブにします。

BattleManagerスクリプトにメッセージ機能を追加

メッセージ表示機能はBattleManagerスクリプトに作成し、CharacterBattleScriptからメッセージを表示する場合はBattleManagerスクリプトのメッセージ表示機能を介して行います。

まずはBattleManagerスクリプトにフィールドを追加します。

messagePanelは先ほど作ったMessagePanelプレハブをインスペクタで設定します。

battleUIはインスペクタでヒエラルキー上のBattleUIゲームオブジェクトを設定します。

messagePanelInsはmessagePanelプレハブから作成したインスタンスを入れておくフィールドです。

次に受け取ったメッセージを表示するメソッドを定義します。

ShowMessageメソッドはstring型の引数を受け取ります。

messagePanelInsがnullでなければ既にメッセージが表示されているのでmessagePanelInsに入っているゲームオブジェクトを削除します。

その後messagePanelをインスタンス化しbattleUIを親にします。
messagePanelの子要素のTextゲームオブジェクトのTextコンポーネントを取得し、そこに引数で受け取ったメッセージを表示します。

MessagePanelを一定時間が経過したら自動で削除させるスクリプト

MessagePanelをインスタンス化する事が出来ましたが、次のメッセージが表示されない限りずっと残ってしまいます。

そこでAssets/RPG/Scripts/Battleフォルダに新しくDeleteMessagePanelスクリプトを作成しMessagePanelプレハブに取り付けます。

waitTimeはMessagePanelが表示されてから消えるまでの時間で、インスペクタで設定出来るようにします。

Startメソッドはこのスクリプトが設定されたゲームオブジェクトが登場した時に呼ばれるので、その中でコルーチンを使ってDeleteメソッドを呼び出し、

でwaitTime秒を経過した後にDestroyでこのスクリプトが設定されたゲームオブジェクトを削除しています。

コルーチンに関しては

Unityでコルーチンを使って定期的に処理をする
Unityでコルーチンを使うと定期的に何らかの処理を行える事が出来るようになります。一見解り辛いけど使い方がわかれば便利かも!?

を参照してください。

BattleManagerスクリプトでShowMessageメソッドを呼び出す

メッセージ表示メソッドShowMessageが出来たので後はそれを呼び出すだけです。

まずはBattleManagerスクリプト内でShowMessageメソッドを呼び出す処理を追加します。

ShowMessageメソッドを挿入する箇所以外は省いています。

元々あったDebug.Logは残してもいいですし、消してもいいです。

まずはStartメソッド内に追加します。

EnemyAttackメソッド内に追加します。

UseMagicメソッド内に追加します。

SelectItemメソッドに追加します。

UseItemメソッドに追加します。

GetAwayメソッドに追加します。

DeleteAllyCharacterInBattleListメソッドとDeleteEnemyCharacterInBattleListメソッドに追加します。

味方、敵が全滅した時は戦闘が終了するので別のメッセージ表示機能に変える可能性がありますが、とりあえず設定しました。

CharacterBattleScriptでShowMessageメソッドを呼び出す

CharacterBattleScriptスクリプトでShowMessageメソッドを呼び出す処理を追加します。

まずはChooseAttackOptionsメソッドでスキルを使ったキャラクターのメッセージを表示します。

DirectAttackメソッドに追加します。

DirectAttackではダメージを計算した後にすぐダメージ表示をShowMessageメソッドで行っています。

これはCharacterBattleScriptのSetHpメソッド内でHPが0以下になったかどうかで死んだかどうか判定し、Deadメソッドを呼び出すために、Debug.Logの位置と同じ個所でShowMessageメソッドを呼ぶと、

死んだ後に『~に何ダメージを与えた。』というメッセージが表示されてしまうからです。

ただ今回のメッセージ機能の仕様上、ダメージを表示したメッセージの直ぐ後にSetHpメソッド内でDeadメソッドが呼ばれて死んだ場合はダメージ数のメッセージ表示がされず(見えない)『倒れた』というメッセージが表示されます。

MagicAttackに追加します。

UseMagicに処理を追加します。

UseItemに処理を追加します。

Guardメソッドに処理を追加します。

Deadメソッドに処理を追加します。

CheckIncreaseAttackPowerメソッドとCheckIncreaseStrikingStrengthメソッドに処理を追加します。

これで処理の追加が終わりました。

実際に実行して確認してみます。

上のようになりました。

終わりに

戦闘中の攻撃やアイテムの使用等はパーティクルなどのエフェクトでわかりやすくするのももちろんですが、テキスト表示をすることで何をしたか?がわかりやすくなりますね。

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています

コメント

タイトルとURLをコピーしました