1. 오늘 학습 키워드
상단 바
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
코드를 한번 뒤엎어야해서, 머리가 어지럽다.
그래서 오늘 작업물이 뭔가 확실한 구조가 짜여있는 기분이 아니다.
우선 어드레서블에 데이터를 넣고, 사용하기 위해 초기에 로드시켰다.
근데 이걸 씬 넘어갈때, 이 부분을 넣어줘야하는지 아님 그냥 내가 작성한대로 이런식으로 하는게 맞는지 확신이 들지 않는다.
public void LoadList()
{
Addressables.LoadAssetsAsync<RewardSO>("Reward", null);
var memoryHandle = Addressables.LoadAssetsAsync<MemorySO>("MemoryData", so => { memoryList.Add(so); });
memoryHandle.Completed += result =>
{
if (memoryHandle.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log("Memory SOs Loaded!");
InitPool(); // 메모리 초기화
}
};
Addressables.LoadAssetsAsync<CardSO>("Card", cardSO =>
{
if (!allCards.Contains(cardSO))
allCards.Add(cardSO);
}).Completed += handle =>
{
if (handle.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log("Card SOs Loaded!");
}
};
}
크게 3개가 있는데
첫번째로 전리품
액션을 사용해서 이렇게 변할때마다 해당 업데이트 구문이 작동해서
텍스트나 이미지가 변하도록 제작했다.
DM.OnSanityChanged += UpdateHPText;
DM.OnBootyChanged += UpdateBootySlots;
public void UpdateBootySlots()
{
// 모든 슬롯 비활성화 (또는 초기화)
foreach (var slot in slots)
{
slot.sprite = null;
slot.gameObject.SetActive(false); // 일단 다 끄기
}
// 유물 개수만큼 슬롯 설정
for (int i = 0; i < DM.Booties.Count && i < slots.Count; i++)
{
var booty = DM.Booties[i];
if (booty.Image != null)
{
slots[i].sprite = booty.Image;
slots[i].gameObject.SetActive(true);
}
else
{
Debug.LogWarning($"[Booty Slot] '{booty.RewardName}' 에 유물 이미지가 없습니다.");
slots[i].gameObject.SetActive(false);
}
}
}
그리고 카드와 메모리의 패널은 따로 관리해줬다.
스크롤뷰는 하나지만, 데이터가 달라서 어쩔수 없는 것 같다.
private void InitPool()
{
// 메모리용 풀
for (int i = 0; i < memoryList.Count; i++)
{
GameObject obj = Instantiate(memory, content);
obj.SetActive(false);
memoryPool.Add(obj);
}
// 카드용 풀
for (int i = 0; i < DM.CardDatas.Count; i++)
{
GameObject obj = Instantiate(cardPrefab, cardContent); // 카드 전용 content 사용
obj.SetActive(false);
cardPool.Add(obj);
}
}
그리고 카드와 메모리의 스크롤뷰를 키게하는 메서드고
이 부분은 카드버튼을 눌려 카드에 대한 패널이 켜져있다가, 메모리 버튼을 누르면 메모리 패널이 켜지고
메모리가 켜져있을 때, 메모리를 누르면 메모리가 꺼지는 이런 로직을 제작했다.
public void DisplayCardCollection()
{
if (currentPanel == PanelState.Card)
{
ReturnAllCardPanels();
currentPanel = PanelState.None;
return;
}
ReturnAllMemoryPanels();
ReturnAllCardPanels();
content.gameObject.SetActive(true);
foreach (var cardData in DM.PlayerDeck.Values)
{
var obj = GetCardPanel();
var ui = obj.GetComponent<RewardCell>();
var rewardData = new RewardData
{
RewardName = cardData.CardName,
Desc = cardData.Desc,
Image = cardData.Image,
GetCardIndex = cardData.Index
};
ui.Set(rewardData);
}
currentPanel = PanelState.Card;
}
public void DisplayMenoryCollection()
{
content.gameObject.SetActive(true);
if (currentPanel == PanelState.Memory)
{
ReturnAllMemoryPanels();
currentPanel = PanelState.None;
return;
}
ReturnAllCardPanels();
ReturnAllMemoryPanels();
content.gameObject.SetActive(true);
foreach (var kvp in DM.Memories)
{
var so = kvp.Value;
var panelObj = GetMemoryPanel();
var ui = panelObj.GetComponent<RewardCell>();
RewardData rewardData = new RewardData
{
RewardName = so.MemoryName,
Desc = so.Desc,
Image = so.Image,
TypeValue = RewardType.Memory
};
ui.Set(rewardData);
}
currentPanel = PanelState.Memory;
}
3. 학습하며 겪었던 문제점 & 에러
구조적으로 고민이 많았다.
4. 내일 학습 할 것은 무엇인지
startUI가 모두 유니티에서 이미지나 데이터를 넣어준거라, 이 부분을 어드레서블을 사용해서 바꿔 줄 예정이다.
'TIL' 카테고리의 다른 글
25.04.28 TIL (0) | 2025.04.28 |
---|---|
25.04.25 TIL (0) | 2025.04.25 |
25.04.23 TIL (0) | 2025.04.23 |
25.04.22 TIL (0) | 2025.04.22 |
25.04.21 TIL (0) | 2025.04.21 |