최종프로젝트 1주차 - 인벤토리 기능 구현중
당연하게도 어제 적은 코드들은 거의 전부 리팩토링 되었다 ㅋㅋㅋㅋ 어쩔 수 없다. 하지만 UI 드래그 앤 드랍 기능을 설명해놓았으니 기본 설명은 된 것이 아닌가?
오늘 작업
어제는 스킬아이템은 스킬 슬롯, 인벤토리에만 드랍 가능하게 / 룬 아이템은 룬 슬롯, 인벤토리에만 드랍 가능하게 했다. 오늘은 이어서 스킬 슬롯에 스킬 아이템이 어느 곳에도 잘 들어가도록 하고, 룬 슬롯이 활성화되면 룬을 장착할 수 있게(대신 한 번 장착하면 다시는 드래그 불가)했다. 그리고 가장 시간이 오래 걸렸던 스킬 아이템을 다시 드래그 시작할 때 룬 슬롯에 있던 룬 아이템은 다 빼고 다른 스킬 슬롯에 스킬 아이템을 넣으면 기억했던 룬 아이템이 다시 룬 슬롯에 등장하도록 했던 것을 구현하였다. 아래는 오늘 작업하면서 겪었던 문제들과 오후 스크럼 회의 내용이다.
어제 작업할 때 왜 아이템을 드래그해서 스킬 창에 드롭하려고 하거나 다시 드래그하려 할 때 잘 안됐는지 알게 됐다. 스킬창이랑 인벤토리 둘 다 각각의 패널로 만들었더니 그게 가리고 있던 거였다. 어쩐지 같은 프리팹을 쓰는데 절대 안될 이유가 없어서 답답했는데 이런 이유였다. 게임씬에는 이미지만 보이니 알기 힘들었다. 패널 말고 그냥 빈 오브젝트에 옮기는 걸로 해결했다.
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);
}
}
이 메서드를 아이템 드래그를 시작 했을 때 호출해서 해결했다.
public class SkillItemController : MonoBehaviour
{
//스킬 아이템 프리팹에 붙는 스크립트
//룬이 장착되면 여기에 추가되어 스킬 슬롯을 옮겨다녀도 반영이 됨
public List<RuneData> attachedRunes = new List<RuneData>();
}
스킬 아이템에 붙여준 스크립트이다. 스킬 슬롯에 스킬 아이템이 들어가고, 확장된 룬 슬롯에 룬을 장착하면 그 룬의 정보도 스킬 아이템에 넣어주기 위함이었다. 이렇게 스킬이 룬을 기억하게 되면 스킬 슬롯을 옮겨 다니거나, 인벤토리에 잠시 들어가 있어도 정보를 잃지 않기 때문에 언제든지 룬 정보를 표시할 수 있게 된다.
<스크럼>
스킬 합성 강화를 실험해보기 위해 같은 스킬 아이템을 인벤토리에 넣어서 실험해봤는데 같은 SO를 공유하고 있기 때문에 한 스킬의 룬 슬롯이 확장되면 같은 스킬 아이템은 전부 자동으로 룬 슬롯이 확장되는 일이 있었다. 같은 SO를 공유중이라 사실 어떻게 보면 당연했지만 기획상 안된다면 방식을 수정해야 했기 때문에 이를 팀원들과 공유했고, 같은 스킬을 여러 개 들고 다니는 건 찬성하지만 이렇게 룬 슬롯 확장까지 공유되는건 안된다고 했다. 아쉬운거지~~~ 하긴 이건 고치는게 확실히 좋다. 이 부분은 내일 고쳐야지
이건 딱히 의도한건 아니었다. 합성을 시도하면 시도한 쪽의 아이템이 파괴되게 했기 때문에 자연스럽게 된 것. 그런데 시도한 쪽의 아이템을 파괴하는 대신 스킬의 룬 슬롯이 한 칸 늘어났기 때문에 리스크 리턴이 나름 괜찮은것 같다는 의견이 있었다. 다행히 이 부분은 수정없이 사용될 예정!
생각보다 오늘 작업이 잘 안됐다. 그래서 좀 시간을 잡아먹었는데 자꾸 기초적이고 쓸데없는 데에 시간 낭비는 하면 안되겠다고 생각했다.
내일 저녁까지가 대충 기능 마무리 짓는 날인디... 흠... 생각보다 하다보니 하고 싶은게 더 생겨서 내일까지 잘 될지 모르겠다.. 그리고 지금은 더미데이터 기준으로 만든건데 실제 데이터가 들어오면 또 지금 되어있는 코드가 꽤 많이 바뀔 것 같기도 해서.... 남은 작업은 대충
<남은 작업>
정도이다. 목표? 목표는 당연히 내일까지 완성이지! 화테엥