この記事はターン制の戦略シミュレーションRPGの作り方講座の第9回目です。
前回の記事ではUIの設定を行いながら、キャラクターにHPや攻撃力や属性システムに用いるパラメータを設定しました。
前回の記事:
今回の記事では設定したパラメータを基にして実際の攻撃や戦闘機能をつくっていきましょう。
いよいよSRPGの戦闘システムの実装ですね。ここから一気にゲームが完成に向かっていきます!
移動完了後のコマンドボタンを表示する
このゲームにおいて攻撃行動はキャラクターの移動完了後に行えますので、まずはそのタイミングで「攻撃」のボタンを表示する所から始めましょう。
また、攻撃せずターンを終了したい場合のために「待機」ボタンもあわせて用意します。両方ともここではコマンドボタンと称して扱います。
まずはGUIでボタンを作成してみましょう。
最初にCanvas以下に空のオブジェクト(CommandButtons)を作成します。このオブジェクトのオンオフで2つのボタンの表示・非表示切り替えを可能にするため、コマンドボタンのオブジェクトを子に作成していきます。
ボタンUIの作成は右クリック→[UI]→[Button]から行います。攻撃ボタンから作成するので名前は「AttackCommand」としました。
ボタンUIオブジェクトは作成の際に、自動的に子オブジェクトとしてTextUIが生成されます。これはボタン上に表示する文章になっています。後で変更します。
ボタン画像の表示
まずはボタンの画像を表示・配置させましょう。画像素材はCommandButtonを使用します。
サンプルでは画面の右下辺りに設置しました。アンカーも右下(Right Bottom)に合わせておきましょう。
画像の引き延ばしが綺麗でないので、前回ステータスウィンドウを作成した時と同様に画像素材(スプライト)側に9スライスの設定を行います。
Sprite Editorを開き、それぞれの端から30ピクセルのラインで分割するようにします。
後はオブジェクト側でSlicedに変更を行えばOKです。
ボタンテキストの設定
ボタン作成時に自動的に取り付けられているTextオブジェクトに対して設定を行っていきます。
文章を変更し、これが攻撃ボタンである事が分かるようになればOKです。
待機ボタンの作成
攻撃ボタンが作成できたら、待機ボタンオブジェクト(StandbyCommand)も同様に作成しておきます。
設定はほぼ同じなので、オブジェクトをコピー&ペーストし位置と文字だけ変更します。プレハブ化を行うかは任意です。
コマンドボタンの表示・非表示
キャラクターが移動を完了した後にのみこのボタンを表示し、どちらかのボタンが押されたら両方のボタンが非表示化するようにしたいです。
ボタン押下時の処理などはこの後に用意するので、まずはGUIマネージャ側で表示・非表示機能を作成しておきます。
GUIManager.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // UIコンポーネントを扱うのに必要 public class GUIManager : MonoBehaviour { // ステータスウィンドウUI public GameObject statusWindow; // ステータスウィンドウオブジェクト public Text nameText; // 名前Text public Image attributeIcon; // 属性アイコンImage public Image hpGageImage; // HPゲージImage public Text hpText; // HPText public Text atkText; // 攻撃力Text public Text defText; // 防御力Text // 属性アイコン画像 public Sprite attr_Water; // 水属性アイコン画像 public Sprite attr_Fire; // 火属性アイコン画像 public Sprite attr_Wind; // 風属性アイコン画像 public Sprite attr_Soil; // 土属性アイコン画像 // キャラクターのコマンドボタン public GameObject commandButtons; // 全コマンドボタンの親オブジェクト void Start () { // UI初期化 HideStatusWindow (); // ステータスウィンドウを隠す HideCommandButtons (); // コマンドボタンを隠す } (省略)public void ShowStatusWindow (Character charaData) (省略)public void HideStatusWindow () /// <summary> /// コマンドボタンを表示する /// </summary> public void ShowCommandButtons () { commandButtons.SetActive (true); } /// <summary> /// コマンドボタンを隠す /// </summary> public void HideCommandButtons () { commandButtons.SetActive (false); } } |
Inspectorからコマンドボタンの親(CommandButtons)への参照をセットしておきましょう。
ボタン押下時の処理を作成する
次はボタンをタップした時に開始する処理をそれぞれゲームマネージャ内に追加します。
GameManager.cs 新規メソッド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/// <summary> /// 攻撃コマンドボタン処理 /// </summary> public void AttackCommand () { // コマンドボタンを非表示にする guiManager.HideCommandButtons (); // (ここに攻撃範囲取得処理) } /// <summary> /// 待機コマンドボタン処理 /// </summary> public void StandbyCommand () { // コマンドボタンを非表示にする guiManager.HideCommandButtons (); // 進行モードを進める(敵のターンへ) ChangePhase (Phase.EnemyTurn_Start); } |
- 攻撃ボタン押下時には攻撃範囲を取得して表示する処理をこの後実装します。
- 待機ボタン押下時はそこでターンを終了し、敵のターンまで進行モードを進めます。
メソッドが用意できたので、ボタンが押された時にこれらを呼び出す設定を行います。
まずは攻撃ボタン側のButtonコンポーネントを確認してください。
下部にある[On Click ()]欄にメソッドを追加するとそのメソッドが呼び出し対象となります。
[+ボタン]→オブジェクト指定→コンポーネント指定→メソッド指定の順番で設定します。対象のメソッドはpublicである必要があります。攻撃ボタンの場合はAttackCommandメソッドを指定すればOKです。
同様に待機ボタンに対してもStandbyCommandメソッドの呼び出しを設定します。
攻撃範囲を取得して表示する
これでボタン側の設定は完了しました。まだボタンの表示メソッドを呼び出していないので動作に変化はありませんが、待機ボタンを押された場合の処理までは完成しています。
このまま攻撃処理を実装するために、まずはキャラクターが攻撃できる範囲を取得する所から進めていきます。既に「移動範囲の取得と表示」で行った事と殆ど同じなのでサクサクいきましょう。
攻撃範囲をキャラクターの周囲8マスとした場合以下のような実装になります。
まとめ
ここまでの開発でキャラクターの移動から攻撃までが一通り可能となりました。しかし、ゲーム的な演出としてアニメーションはやはり欲しいですね。
次回はDoTweenを使用したオブジェクトやUIのアニメーションの実装、処理の遅延実行について学んでいきます。
次の記事:
コメント