//스킬을 장착해제하는 함수
    private void UnEquip_Skill(string buttonText)
    {
        try
        {
            //Exception 여부를 검사한다. (장착 해제하려고 한 칸이 빈 칸인 지 확인한다.)
            MainSceneManagerSkillException.Validate_EmptySkillInventoryException(buttonText);

            //스킬을 제거한다.
            textSystemLog_Skill.text = buttonText + "스킬을 제거합니다";

            equippedSkills.Remove(Search_SkillBaseStat_BY_Name_IN_List(buttonText, equippedSkills));
            //정보를 업데이트한다.
            SkillEquipWindowCleaner();
        }
        catch (MainSceneManagerSkillException.EmptySkillInventoryException)
        {
            textSystemLog_Skill.text = "비어있습니다";
        }
    }
    //스킬을 장착하는 함수
    private void Equip_Skill(string skillName)
    {
        try
        {
            //Exception 여부를 검사한다. (스킬을 추가로 장착할 수 있는지 확인한다.)
            MainSceneManagerSkillException.Validate_FullSkillInventoryException(buttonsSkillInventory);
            MainSceneManagerSkillException.Validate_SkillOverlapped_IN_InventoryException(skillName, equippedSkills);
            //(장착하려는 스킬이 잠겨있는 스킬인지 확인한다.)
            MainSceneManagerSkillException.Validate_SkillLockedException(IO_CSV.__Get_Searched_SkillBaseStat(skillName).__GET_isItLocked, player.GetComponent <Player_Info_Manager>().__GET_playerInfo._GET_saveSlotNum);

            //스킬을 장착할 빈 자리가 있으면 스킬을 장착한다.
            equippedSkills.Add(Search_SkillBaseStat_BY_Name_IN_List(skillName, allSkills));

            textSystemLog_Skill.text = skillName + "을(를) 장착합니다.";

            //정보를 업데이트한다.
            SkillEquipWindowCleaner();
        }
        //스킬을 장착할 빈 자리가 없는 경우
        catch (MainSceneManagerSkillException.FullSkillInventoryException)
        {
            //안내 메세지만 띄운다.
            textSystemLog_Skill.text = "더 장착할 수 없습니다.";
        }
        //장착하려고 하는 스킬이 이미 장착된 경우
        catch (MainSceneManagerSkillException.SkillOverlapped_IN_InventoryException)
        {
            //안내 메시지만 띄운다.
            textSystemLog_Skill.text = skillName + "을(를) 이미 장착했습니다.";
        }
        catch (MainSceneManagerSkillException.SkillLockedException)
        {
            //안내 메시지만 띄운다.
            textSystemLog_Skill.text = skillName + "은(는) 잠겨있는 스킬입니다.";
        }
    }
    // Use this for initialization
    void Start()
    {
        //모든 window를 숨긴다.
        windowSkillEquip.SetActive(false);
        windowUpgrade.SetActive(false);

        //================================================================================================
        //업그레이드 관련 내용 초기화

        //플레이어 정보를 수정하고 저장하기 위한 초기화
        player = GameObject.FindGameObjectWithTag("Player").transform;

        UpgradeWindowCleaner();

        //saveButton을 누르면 Sample__PlayerEquippedInfo.csv에 장착한 스킬 정보를 저장하도록 한다.
        buttonSavePlayerInfo.onClick.AddListener(() => SavePlayerInfo());

        //초기화 과정에서 무언가가 잘못됨. 일단 노가다로 해결
        buttonsStat[0].onClick.AddListener(() => ClickOnStatButton(0));
        buttonsStat[1].onClick.AddListener(() => ClickOnStatButton(1));

        buttonsStat[2].onClick.AddListener(() => ClickOnStatButton(2));
        buttonsStat[3].onClick.AddListener(() => ClickOnStatButton(3));
        buttonsStat[4].onClick.AddListener(() => ClickOnStatButton(4));

        buttonsStat[5].onClick.AddListener(() => ClickOnStatButton(5));
        buttonsStat[6].onClick.AddListener(() => ClickOnStatButton(6));
        buttonsStat[7].onClick.AddListener(() => ClickOnStatButton(7));

        buttonUpgrade.onClick.AddListener(() => Upgrade_OR_Downgrade_Stat(1f));
        buttonDowngrade.onClick.AddListener(() => Upgrade_OR_Downgrade_Stat(-1f));
        buttonBackTOOrigin.onClick.AddListener(() => Back_TO_Origin_Stat());

        //Debug용
        buttonCHEATGetGold.onClick.AddListener(() => ___CHEAT___GetGold());
        buttonCHEATLoseGold.onClick.AddListener(() => ___CHEAT___LoseGold());
        //================================================================================================
        //스킬 장착 관련 내용 초기화

        buttonSaveEquippedSkills.onClick.AddListener(() => Save_EquippedSkills());

        //스킬 버튼에 스킬 이름들이 나오도록 한다. (장착 스킬 제외)
        for (int i = 0; i < buttonsValidSkills.Length; i++)
        {
            string logForSample = allSkills[i].__GET_Skill_Name;

            //열려있는 스킬이면
            try
            {
                MainSceneManagerSkillException.Validate_SkillLockedException(allSkills[i].__GET_isItLocked, player.GetComponent <Player_Info_Manager>().__GET_playerInfo._GET_saveSlotNum);

                buttonsValidSkills[i].GetChild(0).GetComponent <Text>().text = allSkills[i].__GET_Skill_Name;
                buttonsValidSkills[i].GetComponent <Button>().onClick.AddListener(() => Equip_Skill(logForSample));
            }
            //잠겨있는 스킬이면
            catch (MainSceneManagerSkillException.SkillLockedException)
            {
                //잠겨있다고 출력한다.
                buttonsValidSkills[i].GetChild(0).GetComponent <Text>().text = "잠겨있는 스킬";
                //해당 버튼은 눌러도 잠겨있다는 메시지만 출력한다.
                buttonsValidSkills[i].GetComponent <Button>().onClick.AddListener(() => Equip_Skill(logForSample));
            }
        }

        SkillEquipWindowCleaner();
        SkillEquipWindowLogCleaner();
        //================================================================================================
    }