8歩目 プレイヤーの攻撃機能を追加 Unityで1日1ステップ!ノンフィールドRPG開発日記

1日1歩開発日記

ふりかえり

昨日は、プレイヤーと敵のステータスをTextMeshProでゲーム画面に表示できるようにしました!

プレイヤーの攻撃機能を追加

キャラクターのステータスがゲーム画面に表示されるようになったので、

今回はいよいよ、プレイヤーの攻撃機能を実装していきます!

1. PlayerManagerに攻撃処理を追加

まずは、プレイヤーが敵を攻撃できるように、PlayerManager に Attack() 関数を追加します。

public void Attack(EnemyManager enemyManager)
    {
        int damage = Mathf.Max(0, player.attack - enemyManager.enemy.defense);
        enemyManager.TakeDamage(damage);

        Debug.Log($"{player.name}が{enemyManager.enemy.name}に{damage}ダメージ!");
    }

2. EnemyManagerにダメージ処理を追加

次に、敵がダメージを受けたときの処理を EnemyManager に追加します。

public void TakeDamage(int damage)
    {
        enemy.currentHP -= damage;
        if (enemy.currentHP <= 0)
        {
            enemy.currentHP = 0;
            Debug.Log($"{enemy.name}を倒した!");
        }
    }

3. UIから攻撃できるようにPlayerUIManagerを修正

UIのボタンから攻撃を実行できるよう、PlayerUIManager に OnAttackButtonClicked() を追加します。

using UnityEngine;
using TMPro;

public class PlayerUIManager : MonoBehaviour
{
    public PlayerManager playerManager;
    public EnemyManager enemyManager; // 敵の参照を追加
    public TextMeshProUGUI nameText;
    public TextMeshProUGUI hpText;
    public TextMeshProUGUI levelText;

    void Update()
    {
        UpdateUI();
    }

    void UpdateUI()
    {
        nameText.text = playerManager.player.name;
        hpText.text = "HP: " + playerManager.player.currentHP + "/" + playerManager.player.maxHP;
        levelText.text = "Lv: " + playerManager.player.level;
    }

    public void OnAttackButtonClicked()
    {
        if (playerManager != null && enemyManager != null)
        {
            playerManager.Attack(enemyManager);
        }
        else
        {
            Debug.LogError("PlayerManager or EnemyManager is not assigned.");
        }
    }
}

4. Unityでのボタン設定

次に、実際に攻撃を実行するための ボタンUI を作成し、設定していきます。

  1. Hierarchyビューで「+」→「UI」→「Button – TextMeshPro」を選択
  2. ボタンのTextを「PlayerAttack」に変更
  3. 配置を調整して、プレイヤーのステータスの下に設置

続いて、ボタンの OnClickイベントの設定 を行います:

  • Button コンポーネントの On Click () に PlayerUIManager をアタッチ
  • ドロップダウンから PlayerUIManager → OnAttackButtonClicked() を選択

最後に、PlayerUIManager の Inspector を確認し、EnemyManager の項目にEnemyManager をアタッチしたゲームオブジェクトをドラッグ&ドロップします。


5. 実行確認

ゲームを再生し、「PlayerAttack」ボタンをクリック

敵(スライム)のHPが 50 → 42 に減っていれば、攻撃処理は成功です!

まとめ

今回は、プレイヤーの攻撃処理を実装しました!

敵にダメージを与えられるようになり、

一気に「戦闘っぽさ」が出てきましたね!

次回は、敵からの攻撃処理を実装していきます。

戦闘のターン制実装に向けて、どんどんゲームが進化していきます!お楽しみに!

コメント

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