fix: 스킬 쿨타임 dimd 영역이 정상적으로 동작하지 않는 오류 수정
This commit is contained in:
		@@ -142,8 +142,8 @@ MonoBehaviour:
 | 
			
		||||
      m_Calls: []
 | 
			
		||||
  m_text: 
 | 
			
		||||
  m_isRightToLeft: 0
 | 
			
		||||
  m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
 | 
			
		||||
  m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
 | 
			
		||||
  m_fontAsset: {fileID: 11400000, guid: 5d9cd0b39cc658540aa28f3dcb744199, type: 2}
 | 
			
		||||
  m_sharedMaterial: {fileID: -3388310998712943579, guid: 5d9cd0b39cc658540aa28f3dcb744199, type: 2}
 | 
			
		||||
  m_fontSharedMaterials: []
 | 
			
		||||
  m_fontMaterial: {fileID: 0}
 | 
			
		||||
  m_fontMaterials: []
 | 
			
		||||
@@ -550,8 +550,8 @@ MonoBehaviour:
 | 
			
		||||
        m_MethodName: OnClickSkillButton
 | 
			
		||||
        m_Mode: 2
 | 
			
		||||
        m_Arguments:
 | 
			
		||||
          m_ObjectArgument: {fileID: 0}
 | 
			
		||||
          m_ObjectArgumentAssemblyTypeName: TON.ControllerUI_SkillButton, Assembly-CSharp
 | 
			
		||||
          m_ObjectArgument: {fileID: 5964648352921021872}
 | 
			
		||||
          m_ObjectArgumentAssemblyTypeName: TON.SkillButtonItem, Assembly-CSharp
 | 
			
		||||
          m_IntArgument: 0
 | 
			
		||||
          m_FloatArgument: 0
 | 
			
		||||
          m_StringArgument: 
 | 
			
		||||
@@ -573,17 +573,6 @@ MonoBehaviour:
 | 
			
		||||
  coolTimeDimd: {fileID: 561526979871276618}
 | 
			
		||||
  skillIcon: {fileID: 4450630482936255251}
 | 
			
		||||
  lockImage: {fileID: 9104780789004064627}
 | 
			
		||||
  skillBase:
 | 
			
		||||
    <SkillData>k__BackingField:
 | 
			
		||||
      id: 
 | 
			
		||||
      name: 
 | 
			
		||||
      mpConsumption: 0
 | 
			
		||||
      damage: 0
 | 
			
		||||
      coolDown: 0
 | 
			
		||||
      slotNumber: 0
 | 
			
		||||
      requiredLevel: 0
 | 
			
		||||
      maxHitCount: 0
 | 
			
		||||
    <CurrentCoolDown>k__BackingField: 0
 | 
			
		||||
--- !u!1 &9104780789004064627
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ GameObject:
 | 
			
		||||
  m_Icon: {fileID: 0}
 | 
			
		||||
  m_NavMeshLayer: 0
 | 
			
		||||
  m_StaticEditorFlags: 0
 | 
			
		||||
  m_IsActive: 1
 | 
			
		||||
  m_IsActive: 0
 | 
			
		||||
--- !u!224 &5417560988456393388
 | 
			
		||||
RectTransform:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
@@ -557,7 +557,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMax.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.x
 | 
			
		||||
@@ -565,7 +565,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_SizeDelta.x
 | 
			
		||||
@@ -605,7 +605,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.x
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 120
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.y
 | 
			
		||||
@@ -714,7 +714,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMax.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.x
 | 
			
		||||
@@ -722,7 +722,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_SizeDelta.x
 | 
			
		||||
@@ -762,7 +762,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.x
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 442.5
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.y
 | 
			
		||||
@@ -933,7 +933,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMax.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.x
 | 
			
		||||
@@ -941,7 +941,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_SizeDelta.x
 | 
			
		||||
@@ -981,7 +981,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.x
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 207.5
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 7442045083355200288, guid: c4604ffc09f28ed4c8f733a3ba91d6e4, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.y
 | 
			
		||||
@@ -1124,7 +1124,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 3622686016877026920, guid: f023329ca96ab444ca7c60781e310d59, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMax.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 3622686016877026920, guid: f023329ca96ab444ca7c60781e310d59, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.x
 | 
			
		||||
@@ -1132,7 +1132,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 3622686016877026920, guid: f023329ca96ab444ca7c60781e310d59, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 3622686016877026920, guid: f023329ca96ab444ca7c60781e310d59, type: 3}
 | 
			
		||||
      propertyPath: m_SizeDelta.x
 | 
			
		||||
@@ -1172,7 +1172,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 3622686016877026920, guid: f023329ca96ab444ca7c60781e310d59, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.x
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 500
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 3622686016877026920, guid: f023329ca96ab444ca7c60781e310d59, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.y
 | 
			
		||||
@@ -1202,14 +1202,6 @@ PrefabInstance:
 | 
			
		||||
      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
 | 
			
		||||
      value: 
 | 
			
		||||
      objectReference: {fileID: -4577297331876422106}
 | 
			
		||||
    - target: {fileID: 8637807277690663409, guid: f023329ca96ab444ca7c60781e310d59, type: 3}
 | 
			
		||||
      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgument
 | 
			
		||||
      value: 
 | 
			
		||||
      objectReference: {fileID: 169483457724555279}
 | 
			
		||||
    - target: {fileID: 8637807277690663409, guid: f023329ca96ab444ca7c60781e310d59, type: 3}
 | 
			
		||||
      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
 | 
			
		||||
      value: TON.SkillButtonItem, Assembly-CSharp
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    m_RemovedComponents: []
 | 
			
		||||
    m_RemovedGameObjects: []
 | 
			
		||||
    m_AddedGameObjects: []
 | 
			
		||||
@@ -1375,7 +1367,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMax.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.x
 | 
			
		||||
@@ -1383,7 +1375,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchorMin.y
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 1
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_SizeDelta.x
 | 
			
		||||
@@ -1423,7 +1415,7 @@ PrefabInstance:
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.x
 | 
			
		||||
      value: 0
 | 
			
		||||
      value: 260
 | 
			
		||||
      objectReference: {fileID: 0}
 | 
			
		||||
    - target: {fileID: 1465902235892889161, guid: c8f2e3092439b7f409834ac140c97a78, type: 3}
 | 
			
		||||
      propertyPath: m_AnchoredPosition.y
 | 
			
		||||
 
 | 
			
		||||
@@ -257,11 +257,13 @@ namespace TON
 | 
			
		||||
            callback?.Invoke(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SkillAttack(string skillId)
 | 
			
		||||
        public void SkillAttack(SkillBase skillBase)
 | 
			
		||||
        {
 | 
			
		||||
            SkillBase skillBase = SkillDataManager.Singleton.GetSkillInstance(skillId);
 | 
			
		||||
            if (skillBase == null) return;
 | 
			
		||||
 | 
			
		||||
            string skillId = skillBase.SkillData.id;
 | 
			
		||||
 | 
			
		||||
            // 스킬을 사용할 수 있는 스킬포인트가 있는지 판단
 | 
			
		||||
            // 스킬 포인트가 부족하다면 스킬을 수행하지 못함
 | 
			
		||||
            if (currentSP < skillBase.SkillData.mpConsumption) return;
 | 
			
		||||
 | 
			
		||||
            // 스킬 매니저에서 스킬을 쏠 수 있는지 여부를 판단
 | 
			
		||||
@@ -278,7 +280,7 @@ namespace TON
 | 
			
		||||
                // 스킬 매니저에 스킬 발사 요청
 | 
			
		||||
                SkillDataManager.Singleton.ExecuteSkill(skillId, firePoint, lastDirection);
 | 
			
		||||
 | 
			
		||||
                // RecoverSP 가 이미 진행중인 경우 이중으로 코루틴을 실행하지 않도록 함함
 | 
			
		||||
                // RecoverSP 가 이미 진행중인 경우 이중으로 코루틴을 실행하지 않도록 함
 | 
			
		||||
                if (!isRecovering)
 | 
			
		||||
                {
 | 
			
		||||
                    StartCoroutine(RecoverSP());
 | 
			
		||||
 
 | 
			
		||||
@@ -14,20 +14,13 @@ namespace TON
 | 
			
		||||
        [SerializeField] private GameObject skillIcon;
 | 
			
		||||
        [SerializeField] private GameObject lockImage;
 | 
			
		||||
 | 
			
		||||
        public SkillBase skillBase;
 | 
			
		||||
        public SkillBase skillBase { get; private set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public void Initalize(SkillBase skillData)
 | 
			
		||||
        {
 | 
			
		||||
            if (skillData != null)
 | 
			
		||||
            {
 | 
			
		||||
                skillData.OnSkillExecuted -= OnSkillExecuted;
 | 
			
		||||
                // skillData.OnCooldownCompleted -= OnCooldownCompleted;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 직접 주어진 skillData 인스턴스 사용
 | 
			
		||||
            skillBase = skillData;
 | 
			
		||||
            skillData.OnSkillExecuted += OnSkillExecuted;
 | 
			
		||||
            // skillData.OnCooldownCompleted += OnCooldownCompleted;
 | 
			
		||||
 | 
			
		||||
            skillIcon.SetActive(true);
 | 
			
		||||
 | 
			
		||||
@@ -36,12 +29,6 @@ namespace TON
 | 
			
		||||
                skillIcon.GetComponent<Image>().sprite = loadedSkillImage;
 | 
			
		||||
                lockImage.SetActive(false);
 | 
			
		||||
            }
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void OnSkillExecuted()
 | 
			
		||||
        {
 | 
			
		||||
            UpdateCooldownUI();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void UpdateCooldownUI()
 | 
			
		||||
@@ -50,13 +37,27 @@ namespace TON
 | 
			
		||||
            {
 | 
			
		||||
                return; // UI가 삭제되었으면 업데이트 중단
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            coolTimeText.gameObject.SetActive(skillBase.CurrentCoolDown > 0); // 남은 쿨타임이 있을 때만 표시
 | 
			
		||||
 | 
			
		||||
            if (coolTimeText.IsActive())
 | 
			
		||||
            if (skillBase == null)
 | 
			
		||||
            {
 | 
			
		||||
                coolTimeText.text = $"{skillBase.CurrentCoolDown: 0}s"; // 정수 초단위 표시
 | 
			
		||||
                coolTimeDimd.fillAmount = skillBase.CurrentCoolDown / skillBase.SkillCoolDown; // 1 → 0 으로 감소
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            SkillBase targetSkill = SkillDataManager.Singleton.GetEquippedSkillFromId(skillBase.SkillData.id);
 | 
			
		||||
 | 
			
		||||
            // 현재 쿨타임 상태 로그
 | 
			
		||||
            // Debug.Log($"Skill: {skillBase.SkillData.id}, CurrentCoolDown: {targetSkill.CurrentCoolDown}, SkillCoolDown: {targetSkill.SkillCoolDown}");
 | 
			
		||||
 | 
			
		||||
            // 남은 쿨타임이 있을 때만 표시
 | 
			
		||||
            coolTimeText.gameObject.SetActive(targetSkill.CurrentCoolDown > 0);
 | 
			
		||||
 | 
			
		||||
            if (targetSkill.CurrentCoolDown > 0)
 | 
			
		||||
            {
 | 
			
		||||
                coolTimeText.text = $"{targetSkill.CurrentCoolDown:0.0}s"; // 소수점 한 자리까지 표시
 | 
			
		||||
                coolTimeDimd.fillAmount = targetSkill.CurrentCoolDown / targetSkill.SkillCoolDown; // 1 → 0 으로 감소
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                coolTimeDimd.fillAmount = 0; // 쿨타임이 없으면 딤드 효과 제거
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,6 @@
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
using UnityEngine.Assertions;
 | 
			
		||||
 | 
			
		||||
namespace TON
 | 
			
		||||
{
 | 
			
		||||
@@ -52,7 +50,12 @@ namespace TON
 | 
			
		||||
 | 
			
		||||
            foreach (var skill in equippedSkills)
 | 
			
		||||
            {
 | 
			
		||||
                UpdateSkillCoolDown(skill.SkillData.id);
 | 
			
		||||
                if (skill != null)
 | 
			
		||||
                {
 | 
			
		||||
                    UpdateSkillCoolDown(skill.SkillData.id);
 | 
			
		||||
                    Debug.Log($"Updating cooldown for skill {skill.SkillData.id}: {skill.CurrentCoolDown}");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -169,39 +172,55 @@ namespace TON
 | 
			
		||||
            return equippedSkills;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public SkillBase GetEquippedSkillFromId(string skillId)
 | 
			
		||||
        {
 | 
			
		||||
            SkillBase targetSkillBase = null;
 | 
			
		||||
            foreach (SkillBase skill in equippedSkills)
 | 
			
		||||
            {
 | 
			
		||||
                if (skill != null && skill.SkillData.id == skillId)
 | 
			
		||||
                {
 | 
			
		||||
                    targetSkillBase = skill;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return targetSkillBase;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 스킬 슬롯에 적용될 스킬 리스트 초기화 및 업데이트에 사용
 | 
			
		||||
        public List<SkillBase> GetActiveSkillInstance()
 | 
			
		||||
        {
 | 
			
		||||
            if (equippedSkills != null)
 | 
			
		||||
            if (equippedSkills == null)
 | 
			
		||||
            {
 | 
			
		||||
                equippedSkills = new List<SkillBase>();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                equippedSkills.Clear();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            foreach (SkillData skill in skillDatas)
 | 
			
		||||
            for (int slot = 1; slot <= 3; slot++)
 | 
			
		||||
            {
 | 
			
		||||
                if (skill.slotNumber == 1 || skill.slotNumber == 2 || skill.slotNumber == 3)
 | 
			
		||||
                SkillData skill = skillDatas.Find(s => s.slotNumber == slot);
 | 
			
		||||
                if (skill != null && skillInstances.ContainsKey(skill.id))
 | 
			
		||||
                {
 | 
			
		||||
                    // Debug.Log("GetActiveSkillInstance() : " + skill.id);
 | 
			
		||||
                    equippedSkills.Add(skillInstances.GetValueOrDefault(skill.id));
 | 
			
		||||
                    // 바로 skillInstances에서 가져옴
 | 
			
		||||
                    equippedSkills.Add(skillInstances[skill.id]);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    equippedSkills.Add(null); // 빈 슬롯을 위해 null 추가
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            equippedSkills.Sort((a, b) => a.SkillData.slotNumber.CompareTo(b.SkillData.slotNumber));
 | 
			
		||||
            return equippedSkills;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 스킬 쿨타임 설정하는 메소드 
 | 
			
		||||
        public void SetCoolTime(string skillId)
 | 
			
		||||
        {
 | 
			
		||||
            if (skillInstances.TryGetValue(skillId, out SkillBase skillBase))
 | 
			
		||||
            {
 | 
			
		||||
                skillBase.SetCurrentCoolDown();
 | 
			
		||||
            }
 | 
			
		||||
            return equippedSkills;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 스킬 쿨타임 업데이트 메소드 
 | 
			
		||||
        public void UpdateSkillCoolDown(string skillId)
 | 
			
		||||
        {
 | 
			
		||||
            if (skillInstances.TryGetValue(skillId, out SkillBase skillBase))
 | 
			
		||||
            SkillBase skillBase = equippedSkills.Find(skill => skill != null && skill.SkillData.id == skillId);
 | 
			
		||||
            if (skillBase != null)
 | 
			
		||||
            {
 | 
			
		||||
                skillBase.UpdateSkill(Time.deltaTime);
 | 
			
		||||
            }
 | 
			
		||||
@@ -226,10 +245,13 @@ namespace TON
 | 
			
		||||
            // 스킬 생성
 | 
			
		||||
            GameObject effectGameObject = ObjectPoolManager.Instance.GetEffect(skillId);
 | 
			
		||||
            Projectile projectile = effectGameObject.GetComponent<Projectile>();
 | 
			
		||||
            SkillBase targetSkillBase = GetSkillInstance(skillId);
 | 
			
		||||
 | 
			
		||||
            // 현재 스킬의 쿨타임 시작 
 | 
			
		||||
            // equippedSkills에서 해당 스킬 찾기
 | 
			
		||||
            SkillBase targetSkillBase = GetEquippedSkillFromId(skillId);
 | 
			
		||||
 | 
			
		||||
            // 현재 스킬의 쿨타임 시작
 | 
			
		||||
            targetSkillBase.SetCurrentCoolDown();
 | 
			
		||||
            // Debug.Log($"스킬 쿨타임 설정: {skillId}, 쿨타임: {targetSkillBase.CurrentCoolDown}");
 | 
			
		||||
 | 
			
		||||
            // 스킬 투사체 초기화
 | 
			
		||||
            projectile.Init(targetSkillBase.SkillData.damage, targetSkillBase.SkillData.maxHitCount);
 | 
			
		||||
@@ -245,16 +267,10 @@ namespace TON
 | 
			
		||||
            Rigidbody2D skillRb = effectGameObject.GetComponent<Rigidbody2D>();
 | 
			
		||||
            skillRb.velocity = new Vector2(lastDirection * 5f, 0f);
 | 
			
		||||
 | 
			
		||||
            // 이벤트 발생
 | 
			
		||||
            targetSkillBase.OnSkillExecuted?.Invoke();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public SkillBase GetSkillInstance(string skillId)
 | 
			
		||||
        {
 | 
			
		||||
            // 스킬 베이스가 null일때 방어로직 추가
 | 
			
		||||
            SkillBase result = skillInstances.GetValueOrDefault(skillId);
 | 
			
		||||
            Assert.IsNotNull(result, "SkillDataManager.ExecuteSkill() : targetSkillBase is null");
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -61,9 +61,11 @@ namespace TON
 | 
			
		||||
                SkillButtonItem newSkillButton = Instantiate(skillButtonPrefab, skillButtonGroup);
 | 
			
		||||
                newSkillButton.gameObject.SetActive(true);
 | 
			
		||||
 | 
			
		||||
                if (i < activatedSkills.Count) // 해당 인덱스에 활성화된 스킬이 있을 경우
 | 
			
		||||
                if (i < activatedSkills.Count && activatedSkills[i] != null) // 해당 인덱스에 활성화된 스킬이 있을 경우
 | 
			
		||||
                {
 | 
			
		||||
                    // 직접 equippedSkills의 인스턴스를 전달
 | 
			
		||||
                    newSkillButton.Initalize(activatedSkills[i]);
 | 
			
		||||
                    newSkillButton.GetComponent<Button>().interactable = true;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
@@ -79,7 +81,7 @@ namespace TON
 | 
			
		||||
        {
 | 
			
		||||
            userItem = PlayerDataManager.Singleton.userItem;
 | 
			
		||||
 | 
			
		||||
            // 게임 진입 시 포션 초기 수량 세팅팅
 | 
			
		||||
            // 게임 진입 시 포션 초기 수량 세팅
 | 
			
		||||
            hpPotion = userItem.hpPotion >= potionLimit ? potionLimit : userItem.hpPotion;
 | 
			
		||||
            mpPotion = userItem.mpPotion >= potionLimit ? potionLimit : userItem.mpPotion;
 | 
			
		||||
 | 
			
		||||
@@ -141,7 +143,10 @@ namespace TON
 | 
			
		||||
 | 
			
		||||
        public void OnClickSkillButton(SkillButtonItem button)
 | 
			
		||||
        {
 | 
			
		||||
            linkedCharactor.SkillAttack(button.skillBase.SkillData.id);
 | 
			
		||||
            if (button.skillBase != null)
 | 
			
		||||
            {
 | 
			
		||||
                linkedCharactor.SkillAttack(button.skillBase);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,10 @@ namespace TON
 | 
			
		||||
            Dictionary<int, SkillBase> skillMap = new Dictionary<int, SkillBase>();
 | 
			
		||||
            foreach (var skill in activatedSkills)
 | 
			
		||||
            {
 | 
			
		||||
                skillMap[skill.SkillData.slotNumber - 1] = skill;
 | 
			
		||||
                if (skill != null)
 | 
			
		||||
                {
 | 
			
		||||
                    skillMap[skill.SkillData.slotNumber - 1] = skill;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < 3; i++)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user