부트캠프/Unity [ 스파르타 ]

[스파르타 ][TIL] 유니티 스파르타 7기 43일차 - Status관리법

맏난거 2025. 4. 9. 20:56

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();
    }
}

스탯을 클래스로 분리하면서 스탯관리가 더 쉽게 변경이 되었습니다.

팀원분이 공유해주신 분리 구조입니다.

감사합니다.