내일배움캠프 54일차

박나연·2025년 6월 24일

내배캠

목록 보기
49/69

최종프로젝트 1주차 - 인벤토리 기능 구현중

오늘의 키워드 : 좀... 어려운데?

당연하게도 어제 적은 코드들은 거의 전부 리팩토링 되었다 ㅋㅋㅋㅋ 어쩔 수 없다. 하지만 UI 드래그 앤 드랍 기능을 설명해놓았으니 기본 설명은 된 것이 아닌가?

오늘 작업

  • InventoryFilter.cs 작성 : 인벤토리에 있는 아이템 필터링 기능. 기존 ItemType Enum을 사용했기 때문에 추후 문제가 생긴다면 필터링 전용 Enum을 만들 것
  • 스킬 강화 시 룬 슬롯 한 칸 증가
  • 룬 장착 시 장착된 룬은 더 이상 드래그 되지 않게
  • 스킬 슬롯에서 스킬을 제거하면 장착했던 룬도 같이 없어지게
    • SkillItemController.cs 작성

오늘 작업 정리

어제는 스킬아이템은 스킬 슬롯, 인벤토리에만 드랍 가능하게 / 룬 아이템은 룬 슬롯, 인벤토리에만 드랍 가능하게 했다. 오늘은 이어서 스킬 슬롯에 스킬 아이템이 어느 곳에도 잘 들어가도록 하고, 룬 슬롯이 활성화되면 룬을 장착할 수 있게(대신 한 번 장착하면 다시는 드래그 불가)했다. 그리고 가장 시간이 오래 걸렸던 스킬 아이템을 다시 드래그 시작할 때 룬 슬롯에 있던 룬 아이템은 다 빼고 다른 스킬 슬롯에 스킬 아이템을 넣으면 기억했던 룬 아이템이 다시 룬 슬롯에 등장하도록 했던 것을 구현하였다. 아래는 오늘 작업하면서 겪었던 문제들과 오후 스크럼 회의 내용이다.

  • 문제 1: 왜 첫 번째 스킬 슬롯에만 스킬 아이템이 들어가지는지 모르겠음 → 해결 : 패널 크기 문제

어제 작업할 때 왜 아이템을 드래그해서 스킬 창에 드롭하려고 하거나 다시 드래그하려 할 때 잘 안됐는지 알게 됐다. 스킬창이랑 인벤토리 둘 다 각각의 패널로 만들었더니 그게 가리고 있던 거였다. 어쩐지 같은 프리팹을 쓰는데 절대 안될 이유가 없어서 답답했는데 이런 이유였다. 게임씬에는 이미지만 보이니 알기 힘들었다. 패널 말고 그냥 빈 오브젝트에 옮기는 걸로 해결했다.

  • 문제 2 : 스킬이 다시 드래그 상태가 되었을 때 룬이 없어져야 함 → 해결
SkillSlotController.cs

    //룬 UI만 떼어내고, 실제 데이터는 SkillItemController의 List에 남겨두기
    public void DetachRunes()
    {
        if (skillDragItem == null) return;
        skillItemCtrl = skillDragItem.GetComponent<SkillItemController>();
        skillItemCtrl.attachedRunes.Clear();

        for (int i = 0; i < runeSlots.Length; i++)
        {
            var slot = runeSlots[i];
            //슬롯 안에 룬이 한 개 이상이면
            if (slot.transform.childCount > 0)
            {
                //해당 룬 가져오기
                var runeGO = slot.transform.GetChild(0).gameObject;
                //실제 룬 데이터 (RuneData)꺼내기
                var data = runeGO.GetComponent<DraggableItem>().itemData as RuneData;
                //SkillitemController의 리스트에 추가
                skillItemCtrl.attachedRunes.Add(data);
                //룬 슬롯 자식에 있는 해당 룬 아이템은 파괴
                Destroy(runeGO);
            }
            //현재 스킬 아이템 드래그 중이므로 룬 슬롯은 다시 잠금 상태로
            slot.SetInteractable(false);
        }
    }

이 메서드를 아이템 드래그를 시작 했을 때 호출해서 해결했다.

  • 문제 3 : 다시 드롭이 되면 룬이 드러나야함 → 해결 : 스킬 아이템에서 룬 정보를 저장하도록 함
public class SkillItemController : MonoBehaviour
{
    //스킬 아이템 프리팹에 붙는 스크립트
    //룬이 장착되면 여기에 추가되어 스킬 슬롯을 옮겨다녀도 반영이 됨
    public List<RuneData> attachedRunes = new List<RuneData>();
}

스킬 아이템에 붙여준 스크립트이다. 스킬 슬롯에 스킬 아이템이 들어가고, 확장된 룬 슬롯에 룬을 장착하면 그 룬의 정보도 스킬 아이템에 넣어주기 위함이었다. 이렇게 스킬이 룬을 기억하게 되면 스킬 슬롯을 옮겨 다니거나, 인벤토리에 잠시 들어가 있어도 정보를 잃지 않기 때문에 언제든지 룬 정보를 표시할 수 있게 된다.

<스크럼>

  • 같은 스킬일 경우 레벨을 공유함(같은 스킬을 여러개 들고 다녀도 되는지) -> 같은 스킬 채용은 가능하나 레벨은 공유되지 않게

스킬 합성 강화를 실험해보기 위해 같은 스킬 아이템을 인벤토리에 넣어서 실험해봤는데 같은 SO를 공유하고 있기 때문에 한 스킬의 룬 슬롯이 확장되면 같은 스킬 아이템은 전부 자동으로 룬 슬롯이 확장되는 일이 있었다. 같은 SO를 공유중이라 사실 어떻게 보면 당연했지만 기획상 안된다면 방식을 수정해야 했기 때문에 이를 팀원들과 공유했고, 같은 스킬을 여러 개 들고 다니는 건 찬성하지만 이렇게 룬 슬롯 확장까지 공유되는건 안된다고 했다. 아쉬운거지~~~ 하긴 이건 고치는게 확실히 좋다. 이 부분은 내일 고쳐야지

  • 앞 내용이 가능할 경우, 같은 스킬을 합성하면 합성을 시도한 스킬에 장착된 룬이 없어짐. 괜찮은지? -> 괜찮다

이건 딱히 의도한건 아니었다. 합성을 시도하면 시도한 쪽의 아이템이 파괴되게 했기 때문에 자연스럽게 된 것. 그런데 시도한 쪽의 아이템을 파괴하는 대신 스킬의 룬 슬롯이 한 칸 늘어났기 때문에 리스크 리턴이 나름 괜찮은것 같다는 의견이 있었다. 다행히 이 부분은 수정없이 사용될 예정!


마무리하며

생각보다 오늘 작업이 잘 안됐다. 그래서 좀 시간을 잡아먹었는데 자꾸 기초적이고 쓸데없는 데에 시간 낭비는 하면 안되겠다고 생각했다.

내일 할 일

내일 저녁까지가 대충 기능 마무리 짓는 날인디... 흠... 생각보다 하다보니 하고 싶은게 더 생겨서 내일까지 잘 될지 모르겠다.. 그리고 지금은 더미데이터 기준으로 만든건데 실제 데이터가 들어오면 또 지금 되어있는 코드가 꽤 많이 바뀔 것 같기도 해서.... 남은 작업은 대충

<남은 작업>

  • 스킬 창과 연동
  • 아이템 끼리 자리 바꾸기 가능하게(인벤토리 정리가능, 스킬 슬롯 내에서 자유자재로 순서 변경 가능)
  • 스킬 레벨이 초기화 되게
  • 아이템 획득 시 인벤토리에 들어가게
  • 룬 교체 알림 팝업
  • 아이템 툴 팁
  • 휴지통 기능
    • 드래그해서 휴지통 아이콘에 버리면 아이템이 영구적으로 파괴

정도이다. 목표? 목표는 당연히 내일까지 완성이지! 화테엥

0개의 댓글