ふりかえり
前回はゴールドを使ってステータスを強化できるようにし、育成の楽しみが生まれました!
前回の投稿はこちら↓
スキルを実装!
今回は、戦略性を深める「スキル機能」を実装していきます!
実装内容
スキルを使うことで、通常攻撃とは違った強力な行動が可能になります。
今回は「強撃(攻撃力×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などをアタッチします。

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

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

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



