ふりかえり
前回はゴールドを使ってステータスを強化できるようにし、育成の楽しみが生まれました!
スキルを実装!
今回は、戦略性を深める「スキル機能」を実装していきます!
実装内容
スキルを使うことで、通常攻撃とは違った強力な行動が可能になります。
今回は「強撃(攻撃力×1.5)」というスキルを実装し、クールタイム付きで使用できるようにします。
スクリプトの変更:SkillManager.cs
スキルを実装するために新たにSkillManager.csを作成しました。
- スキル発動時、一定ターン使用不可になる「クールタイム」機能を管理
- スキルボタンの状態(押せる/押せない)や、クールタイム中のオーバーレイ表示を制御
- スキルのダメージは 攻撃力 × 1.5 として計算
using UnityEngine; using UnityEngine.UI; using System; public class SkillManager : MonoBehaviour { public int skillCooldown = 5; // クールタイム(ターン数) private int currentCooldown = 0; // 現在のクールタイム残り // クールタイム表示用のUI要素(Inspectorで設定可能) [SerializeField] private Button skillButton; [SerializeField] private Image skillButtonImage; [SerializeField] private Image cooldownOverlay; // クールタイム表示用のオーバーレイ // クールタイム更新イベント public event Action<float> OnCooldownChanged; void Start() { // 初期化時にクールタイム表示を更新 UpdateCooldownDisplay(); } // UI参照を設定するメソッド(PlayerUIManagerから呼ばれる) public void SetUIReferences(Button button, Image buttonImage, Image overlay) { // 既にInspectorで設定されている場合は上書きしない if (skillButton == null) skillButton = button; if (skillButtonImage == null) skillButtonImage = buttonImage; if (cooldownOverlay == null) cooldownOverlay = overlay; // 設定後にクールタイム表示を更新 UpdateCooldownDisplay(); } // スキルが使用可能かどうか public bool CanUseSkill() { return currentCooldown <= 0; } // スキルを使用したときに呼ぶ public void UseSkill() { currentCooldown = skillCooldown; UpdateCooldownDisplay(); } // ターン終了時に呼ぶ(1ターン経過) public void OnTurnEnd() { if (currentCooldown > 0) { currentCooldown--; UpdateCooldownDisplay(); } } // 残りクールタイムを取得 public int GetCurrentCooldown() { return currentCooldown; } // 強撃スキルのダメージ計算 public int CalculateSkillDamage(int playerAttack) { return Mathf.CeilToInt(playerAttack * 1.5f); } // クールタイム表示の更新 private void UpdateCooldownDisplay() { float cooldownProgress = 0f; if (skillCooldown > 0) { cooldownProgress = (float)currentCooldown / skillCooldown; } // ボタンの有効/無効を設定 if (skillButton != null) { skillButton.interactable = currentCooldown <= 0; } // オーバーレイの表示を更新 if (cooldownOverlay != null) { cooldownOverlay.fillAmount = cooldownProgress; cooldownOverlay.gameObject.SetActive(currentCooldown > 0); } // イベントを発火 OnCooldownChanged?.Invoke(cooldownProgress); } }
PlayerUIManager.cs
PlayerUIManager.csでスキルのクールタイムを可視化するためのオーバーレイの設定をします。
// スキルクールタイム表示の初期設定 private void SetupSkillCooldownDisplay() { if (skillCooldownOverlay != null) { // オーバーレイの初期設定 skillCooldownOverlay.type = Image.Type.Filled; skillCooldownOverlay.fillMethod = Image.FillMethod.Vertical; skillCooldownOverlay.fillOrigin = (int)Image.OriginVertical.Top; skillCooldownOverlay.color = new Color(0, 0, 0, 0.7f); // 半透明の黒 skillCooldownOverlay.fillAmount = 0f; skillCooldownOverlay.gameObject.SetActive(false); } } // スキルクールタイム変更時の処理 private void OnSkillCooldownChanged(float cooldownProgress) { if (skillCooldownOverlay != null) { // アニメーション付きでクールタイム表示を更新 skillCooldownOverlay.DOFillAmount(cooldownProgress, 0.2f) .SetEase(Ease.OutQuad); } }
Unityでの設定
スキルボタンを作成 Canvas内にスキル用のButtonを作成し、子オブジェクトとしてクールタイム表示用のImageを追加。
オーバーレイのSourceImageに適当な画像を設定し、Inspectorで以下の設定を行います。
- Image Type: Filledに変更
- Fill Method: Verticalに変更
- Fill Origin: Topに変更
- Fill Amount: 1に設定
- Color: アルファ値を0.7に設定

新規GameObjectを作成し、SkillManager.csをドラッグ&ドロップします。そしてInspector上でButtonなどをアタッチします。

動作確認
斧のアイコンがスキルです。

スキルをクリックするとゴブリンに敵に大ダメージ!
その後、オーバーレイが現れ、クールタイム中であることが視覚的に分かります!

まとめ
今回は「スキル機能」を実装しました!
戦闘に戦略性が加わり、強敵相手にも手応えのあるバトルが楽しめるようになりました!
次回予告
次回はスキルの種類を増やしたいと思います!
お楽しみに!