ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발일지 - 스킬5 UI 파트 (최종)
    프로젝트/방치형 RPG 2023. 8. 15. 22:20

    이번 목표 - 스킬 UI관련 코드 리팩토링, 스킬 UI 시스템 

    지금까지 스킬관련해서 구현한 부분 총 정리를 해보겠습니다.

    1. 스킬 테이블 생성

    2. DB관련 (firebase)

    3. 스킬 UI (스킬 슬롯, 스킬 상세보기), 간단한 UI 연출

    4. 스킬 장착 / 해제 기능 (+ 간편 장착/해제 기능)

    5. 스킬 레벨업 테이블 생성 (범용적)

    6. 스킬 업그레이드 기능

     

    구현 예정인 부분

    1. 스킬 구현 (몬스터와 전투) 

    2. 스킬 쿨타임, 데미지 적용 (+ 대략적인 밸런스)

    3. 스킬 오토 시스템 (스킬 자동사용 기능)

     

     

     

    1. 스킬 테이블

    ▲ CSV로 작성한 스킬 테이블입니다.  damage, desc 추가 수정이 필요할 거 같습니다.

     

     


     

     

    2. User DB (firebase)

    EquippedSkill은 현재 장착한 스킬 정보입니다.  '@'로 구분하여 skill_ID를 저장하고 있습니다.

    SkillData는 현재 얻은 스킬에 대한 정보입니다. '@'로 구분하여 스킬레벨, 보유갯수로 저장하고 있습니다.

     

     

    DBManager.cs

    void SetDB_SkillAcquireData() 
    {
        var skillAcquireData = GlobalManager.Instance.DBManager.GetUserStringData(UserStringDataType.SkillData).Split('@');
    
        if (skillAcquireData.Length == 1)           // skillAcquireData 없을 경우
        {
            string[] skillData = new string[SkillTemplate.Count];
            for (int i = 0; i < skillData.Length; i++)
            {
                int skillLevel = 1;
                int holdingCount = 0;
                skillData[i] = $"{skillLevel},{holdingCount}";
            }
    
            GlobalManager.Instance.DBManager.UpdateUserData(UserStringDataType.SkillData, string.Join('@', skillData));
        }
        else if (skillAcquireData.Length < SkillTemplate.Count)   // 템플릿에 새로운 테이블 추가됐을 경우
        {
            string[] skillData = new string[SkillTemplate.Count];
            for (int i = 0; i < skillData.Length; i++)
            {
                int skillLevel = 1;
                int holdingCount = 0;
                skillData[i] = $"{skillLevel},{holdingCount}";
            }
    
            skillAcquireData.CopyTo(skillData, 0);
            GlobalManager.Instance.DBManager.UpdateUserData(UserStringDataType.SkillData, string.Join('@', skillData));
        }
    }

    ▲ 확장성을 고려하여 스킬 템플릿(스킬 테이블)에 새롭게 스킬이 추가되어도 대응이 되도록 만들어 놨습니다.

     


     

     

     

    3. 스킬 UI (스킬 슬롯, 스킬 상세보기)

    좌 - 스킬 슬롯 프리팹, 우 - 인게임 스킬 슬롯

     

    좌 - 스킬 상세보기 프리팹, 우 - 인게임 스킬 상세보기

    스킬슬롯은 enum 비트연산을 이용해 의 state에 따라서 UI표시 하도록 했다.

     

     

    SkillSlot.cs

    Init메서드 - 최초 스킬슬롯 생성시 UserData를 받아서 스킬 레벨 / 보유 갯수 / 장착중 정보를 받아서 State를 저장하고 SetSlot 메서드를 이용해서 현재 상태에 따른 스킬슬롯 UI를 표시합니다.

     


     

     

     

    4. 스킬 장착 / 해제 기능 (+ 간편 장착 / 해제 기능)

    스킬 간편 장착/해제

     

    MainScene.cs

    스킬 장착하는 함수. 로비 스킬창과 스킬 팝업창의 장착한 스킬 아이콘을 넣어주고 slot의 상태를 장착상태로 바꿔준다.

    SetSlot 메서드를 이용해서 현재 상태에 따른 스킬슬롯 UI를 표시합니다. 마지막에는 UserData를 업데이트 해줍니다.

     

     

    MainScene.cs

     스킬 장착 해제하는 함수. 로비 스킬창과 스킬 팝업창의 스프라이트를 없애고,  slot의 상태를 해제상태로 바꿔줍니다.

    SetSlot 메서드를 이용해서 현재 상태에 따른 스킬슬롯 UI를 표시합니다. 마지막에는 UserData를 업데이트 해줍니다.

     

     


     

     

     

     

    5. 스킬 레벨업 테이블  & 스킬 업그레이드 기능

     

    스킬 강화
    레벨 템플릿

     

    MainScene.cs

    강화 버튼 누를시 실행되는 함수. 유저 skillData를 가져와서 스킬을 업그레이드한 후 레벨/보유갯수저장해줍니다.

     

     

    SkillSlot.cs

     스킬 업그레이드 후 업그레이드 조건(개수부족)이 안될시 비트연산을 통해 upgradeable 비트를 0으로 만들어주고 SetSlot메서드를 이용해서 슬롯 UI를 상태에 맞게 변경해줍니다

     

     

     

    잠금상태(스킬 미획득)는 버튼이 활성화가 안됩니다.

     

     

     

     

     

     

    '프로젝트 > 방치형 RPG' 카테고리의 다른 글

    개발일지 - 스킬 4  (0) 2023.08.09
    개발일지 - 스킬 3  (0) 2023.08.07
    개발일지 - 스킬 2  (0) 2023.08.07
    0727 개발일지  (0) 2023.07.27
    0725 개발일지 - 에셋번들 4  (0) 2023.07.25

    댓글

Designed by Tistory.