using UnityEngine; // 유니티 엔진의 기본 기능을 불러올거에요 -> UnityEngine을 public class Stats : MonoBehaviour // 클래스를 선언할거에요 -> MonoBehaviour를 상속받는 Stats를 { [Header("--- 기본 능력치 ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- 기본 능력치 --- 를 [SerializeField] private float baseMaxHealth = 100f; // 변수를 선언할거에요 -> 기본 최대 체력인 baseMaxHealth를 [SerializeField] private float baseMoveSpeed = 5f; // 변수를 선언할거에요 -> 기본 이동 속도인 baseMoveSpeed를 [SerializeField] private float baseAttackDamage = 10f; // 변수를 선언할거에요 -> 기본 공격력인 baseAttackDamage를 [Header("--- 보너스 능력치 ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- 보너스 능력치 --- 를 public float bonusMaxHealth; // 변수를 선언할거에요 -> 추가 체력인 bonusMaxHealth를 public float bonusMoveSpeed; // 변수를 선언할거에요 -> 추가 이동 속도인 bonusMoveSpeed를 public float bonusAttackDamage; // 변수를 선언할거에요 -> 추가 공격력인 bonusAttackDamage를 [Header("--- 장착 장비 ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- 장착 장비 --- 를 public float weaponDamage; // 변수를 선언할거에요 -> 무기 데미지인 weaponDamage를 [Header("--- 밸런스 설정 ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- 밸런스 설정 --- 을 [SerializeField] private float runSpeedMultiplier = 1.5f; // 변수를 선언할거에요 -> 달리기 속도 배율인 runSpeedMultiplier를 [Header("--- 최소값 제한 ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- 최소값 제한 --- 을 [Tooltip("이동 속도가 이 값 아래로 내려가지 않습니다")] [SerializeField] private float minMoveSpeed = 0.5f; // 변수를 선언할거에요 -> 최소 이동 속도인 minMoveSpeed를 [Tooltip("최대 체력이 이 값 아래로 내려가지 않습니다")] [SerializeField] private float minMaxHealth = 1f; // 변수를 선언할거에요 -> 최소 체력인 minMaxHealth를 [Tooltip("공격력이 이 값 아래로 내려가지 않습니다")] [SerializeField] private float minAttackDamage = 0f; // 변수를 선언할거에요 -> 최소 공격력인 minAttackDamage를 /* ========================= * 실제 게임 로직용 프로퍼티 * ========================= */ public float MaxHealth => Mathf.Max(baseMaxHealth + bonusMaxHealth, minMaxHealth); // 프로퍼티를 선언할거에요 -> 총 최대 체력을 최소값 이상으로 반환하는 MaxHealth를 public float BaseAttackDamage => Mathf.Max(baseAttackDamage + bonusAttackDamage, minAttackDamage); // 프로퍼티를 선언할거에요 -> 총 기본 공격력을 최소값 이상으로 반환하는 BaseAttackDamage를 public float TotalAttackDamage => Mathf.Max(BaseAttackDamage + weaponDamage, minAttackDamage); // 프로퍼티를 선언할거에요 -> 최종 공격력(무기 포함)을 최소값 이상으로 반환하는 TotalAttackDamage를 // ✨ [수정] Mathf.Max로 최소 속도 보장 public float CurrentMoveSpeed => Mathf.Max(baseMoveSpeed + bonusMoveSpeed, minMoveSpeed); // 프로퍼티를 선언할거에요 -> 현재 이동 속도를 최소값 이상으로 반환하는 CurrentMoveSpeed를 public float CurrentRunSpeed => CurrentMoveSpeed * runSpeedMultiplier; // 프로퍼티를 선언할거에요 -> 현재 달리기 속도를 반환하는 CurrentRunSpeed를 private void Update() // 함수를 실행할거에요 -> 매 프레임마다 Update를 { finalMaxHealth = MaxHealth; // 값을 갱신할거에요 -> 디버그용 최종 체력을 finalMoveSpeed = CurrentMoveSpeed; // 값을 갱신할거에요 -> 디버그용 최종 속도를 finalAttackDamage = TotalAttackDamage; // 값을 갱신할거에요 -> 디버그용 최종 공격력을 } // ✨ [수정] 레벨업 시 체력과 공격력을 올려주도록 변경 public void AddBaseLevelUpStats(float hpAdd, float dmgAdd) // 함수를 선언할거에요 -> 레벨업 보너스를 적용하는 AddBaseLevelUpStats를 { baseMaxHealth += hpAdd; // 값을 더할거에요 -> 기본 체력에 증가분을 baseAttackDamage += dmgAdd; // 값을 더할거에요 -> 기본 공격력에 증가분을 } public void AddMaxHealth(float value) => bonusMaxHealth += value; // 함수를 선언할거에요 -> 추가 체력을 늘리는 AddMaxHealth를 public void AddMoveSpeed(float value) => bonusMoveSpeed += value; // 함수를 선언할거에요 -> 추가 속도를 늘리는 AddMoveSpeed를 public void AddAttackDamage(float value) => bonusAttackDamage += value; // 함수를 선언할거에요 -> 추가 공격력을 늘리는 AddAttackDamage를 // ✨ [제거] 무게 및 힘 관련 함수들(UpdateWeaponWeight, ResetWeight)이 삭제되었습니다. [Header("--- 최종 능력치 (Read Only) ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- 최종 능력치 (Read Only) --- 를 [SerializeField] private float finalMaxHealth; // 변수를 선언할거에요 -> 디버그용 최종 체력 변수를 [SerializeField] private float finalMoveSpeed; // 변수를 선언할거에요 -> 디버그용 최종 속도 변수를 [SerializeField] private float finalAttackDamage; // 변수를 선언할거에요 -> 디버그용 최종 공격력 변수를 }