TIL

25.04.24 TIL

gaon99 2025. 4. 24. 23:28

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