1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using ResistanceSystem;
using System.Collections.Generic;
using System.Collections;
using UnityEngine;
 
public class EntityStatusEffectModule : MonoBehaviour
{
    #region Private Fields
 
    private List<BaseStatusEffect> activeEffects = new List<BaseStatusEffect>(); // 활성 상태 효과 목록
 
    [SerializeField]
    private float resistanceDecreaseInterval = 3f; // 저항 감소 주기 (초)
 
    private Dictionary<string, ResistanceStat> resistanceStats; // 저항 속성들을 저장할 딕셔너리
    private ResistanceController resistanceController; // 저항 컨트롤러
 
    #endregion
 
    #region Public Methods
 
    /// <summary>
    /// 초기화 메서드. ResistanceController와 저항 데이터를 설정합
    /// </summary>
    public void Initialize(ResistanceController resistanceController, Dictionary<string, ResistanceStat> resistanceStats)
    {
        this.resistanceController = resistanceController;
        this.resistanceStats = resistanceStats;
 
        foreach (var resistance in resistanceStats.Values)
        {
            if (resistance is ResistanceAttribute resistanceAttribute)
            {
                resistanceAttribute.OnThresholdReached += ResistanceEventHandler.HandleThresholdReached;
            }
        }
 
        StartCoroutine(ResistanceUpdateRoutine());
    }
 
    #endregion
 
    #region Resistance Updates
 
    /// <summary>
    /// 일정 주기로 저항 값을 갱신하는 코루틴.
    /// </summary>
    private IEnumerator ResistanceUpdateRoutine()
    {
        while (true)
        {
            yield return new WaitForSeconds(resistanceDecreaseInterval);
            UpdateResistanceValues();
        }
    }
 
    /// <summary>
    /// 모든 ResistanceStat의 값을 갱신
    /// </summary>
    private void UpdateResistanceValues()
    {
        foreach (KeyValuePair<string, ResistanceStat> resistanceStatPair in resistanceStats)
        {
            ResistanceStat resistanceStat = resistanceStatPair.Value;
 
            if (resistanceStat is ResistanceAttribute resistanceAttribute)
            {
                UpdateResistanceAttribute(resistanceAttribute);
            }
        }
    }
 
    /// <summary>
    /// 개별 ResistanceAttribute를 갱신
    /// </summary>
    /// <param name="resistanceAttribute">갱신할 ResistanceAttribute</param>
    private void UpdateResistanceAttribute(ResistanceAttribute resistanceAttribute)
    {
        string attributeName = resistanceAttribute.GetDefinition().name;
        ResistanceModifier increaseModifier = new ResistanceModifier(
            5,
            "System",
            ModifierOperationType.Additive
        );
 
        resistanceAttribute.ApplyModifier(increaseModifier);
 
        resistanceAttribute.SetCurrentValue(resistanceAttribute.GetCurrentValue());
 
        Debug.Log($"Updated Resistance for {attributeName}: {resistanceAttribute.GetCurrentValue()}/{resistanceAttribute.GetBaseValue()}");
    }
 
    #endregion
 
    #region Debug
 
    /// <summary>
    /// 디버그 입력을 처리
    /// 1~10번 숫자 키를 눌러 특정 ResistanceAttribute 값을 감소시킴
    /// </summary>
    private void HandleDebugInput()
    {
        for (int i = 1; i <= 10; i++)
        {
            if (Input.GetKeyDown(KeyCode.Alpha0 + i))
            {
                StatusEffectType type = (StatusEffectType)i;
                string resistanceName = $"{type}Attribute";
                DebugDecreaseResistance(resistanceName, 10);
            }
        }
    }
 
    /// <summary>
    /// 특정 ResistanceAttribute 값을 감소시킴
    /// </summary>
    /// <param name="resistanceName">감소시킬 ResistanceAttribute의 이름</param>
    /// <param name="amount">감소량</param>
    private void DebugDecreaseResistance(string resistanceName, int amount)
    {
        if (resistanceStats.TryGetValue(resistanceName, out ResistanceStat resistanceStat) && resistanceStat is ResistanceAttribute resistanceAttribute)
        {
            ResistanceModifier decreaseModifier = new ResistanceModifier(
                -amount,
                "DebugInput",
                ModifierOperationType.Additive
            );
 
            resistanceAttribute.ApplyModifier(decreaseModifier);
 
            Debug.Log($"[DEBUG] {resistanceName}: Current Value = {resistanceAttribute.GetCurrentValue()}/{resistanceAttribute.GetBaseValue()}");
        }
        else
        {
            Debug.LogWarning($"[DEBUG] {resistanceName} resistance not found.");
        }
    }
    private void Awake()
    {
        // 테스트용 ResistanceController와 데이터 생성
        resistanceController = GetComponent<ResistanceController>();
 
        // ResistanceController로부터 데이터 가져오기
        resistanceStats = resistanceController.GetResistanceStats();
 
        Initialize(resistanceController, resistanceStats);
    }
 
    private void Update()
    {
        HandleDebugInput(); // 디버그 입력 처리
    }
 
    #endregion
}
 
cs







현재의 문제점.


1. 일부 중복로직 존재함. 


2. 매핑 자동화를 하고 있는데 실패하고 있음(유니티 자체의 문제)


자고 일어나서 슬슬 해야지 


3일 내내 붙잡고 계속하고 있는데 스트레스 받네 그냥