using System;
using UnityEngine;
public class BaseStat : MonoBehaviour
{
public float value;
public float valueMultiples = 1f;
public virtual void SetStat(float amount)
{
if (amount < 0) return;
value = amount;
}
public virtual void Init(float amount)
{
SetStat(amount);
}
public virtual float GetStat()
{
return value * valueMultiples;
}
public void AddStat(float amount)
{
SetStat(Mathf.Max(0, value + amount));
}
public void SetStatMultiples(float amount)
{
if (amount < 0) return;
valueMultiples = amount;
}
public void AddMultiples(float amount)
{
SetStatMultiples(Mathf.Max(0, valueMultiples + amount));
}
public virtual string GetValueToString()
{
return (value * valueMultiples).ToString("F0");
}
}
public class HealthStat : BaseStat
{
public float curHealth;
public override void Init(float amount)
{
base.Init(amount);
curHealth = value * valueMultiples;
}
public override void SetStat(float amount)
{
base.SetStat(amount);
if(value == 0)
{
value = 1;
}
if (value * valueMultiples < curHealth)
{
curHealth = value * valueMultiples;
}
}
public void SetHealth(float amount)
{
if (value * valueMultiples < amount)
{
curHealth = value * valueMultiples;
}
else
{
curHealth = amount;
}
}
public float GetHealth()
{
return curHealth;
}
public void AddHealth(float amount)
{
SetHealth(Mathf.Max(0, curHealth + amount));
}
public void FullHealth()
{
SetHealth(value * valueMultiples);
}
public override string GetValueToString()
{
return curHealth.ToString("F0") + "/" + base.GetValueToString();
}
}
스탯을 클래스로 분리하면서 스탯관리가 더 쉽게 변경이 되었습니다.
팀원분이 공유해주신 분리 구조입니다.
감사합니다.
'부트캠프 > Unity [ 스파르타 ]' 카테고리의 다른 글
[스파르타 ][TIL] 유니티 스파르타 7기 45일차 - UniTask (2) | 2025.04.14 |
---|---|
[스파르타 ][TIL] 유니티 스파르타 7기 44일차 -🔄 Git rebase (2) | 2025.04.11 |
[스파르타 ][TIL] 유니티 스파르타 7기 42일차 - PointerEventData (4) | 2025.04.08 |
[스파르타 ][TIL] 유니티 스파르타 7기 40일차 - 어드레서블 (0) | 2025.04.04 |
[스파르타 ][TIL] 유니티 스파르타 7기 39일차 - 전략패턴 (0) | 2025.03.19 |