카테고리 없음

본캠프_TIL_80일차 (스테이지 팝업 리팩토링)

티-히히 2025. 1. 7. 21:20
  • 오전
    • 오전회의
    • 스테이지 팝업
      • 리팩토링
      • DoTween
  • 오후
    • 게임결과 UI DoTween
    • 코드리뷰

 

스테이지 팝업 리팩토링

 

스테이지 팝업 - 코드 분리

StagePopup 에서 MonsterSelectedSlot 부분을 분리했습니다.

StagePopup

...
private void UpdateSelectedSlot(Sprite listSlotSprite)
    {
        var slotImg = monsterSelectedSlots[_crrSlotIdx].slotImg;
        slotImg.sprite = listSlotSprite;
        slotImg.color = new Color(1, 1, 1, 1);
    }
    
...

 

MonsterSelectedSlot 

public class MonsterSelectedSlot : MonoBehaviour
{
    public Image slotImg;
    public Image arrowImg;

    public void UpdateSelectedSlot(Sprite listSlotSprite)
    {
        slotImg.sprite = listSlotSprite;
        slotImg.color = new Color(1, 1, 1, 1);
    }
}

 

 

스테이지 팝업 - GetComponent제거

private void LoadGameScene()
{
    if (_selectedListData.Count != 4) 
    {
        _warningTxt = "몬스터를 모두 선택하세요";

       	UIBase warningBox = PoolManager.Instance.SpawnFromPool<WarningBox>("WarningBox");
    	warningBox.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = _warningTxt;

        return; 
    }
    DataManager.Instance.selectedStageIdx = _stageIdx;              //선택된 스테이지
    DataManager.Instance.selectedMonsterData = _selectedListData;    //선택된 몬스터
    
    MySceneManager.Instance.ChangeScene("MainScene");
}

 

private void LoadGameScene()
{
    if (_selectedListData.Count != 4) 
    {
        _warningTxt = "몬스터를 모두 선택하세요";

        WarningBox warningBox = PoolManager.Instance.SpawnFromPool<WarningBox>("WarningBox");
        warningBox.SetText(_warningTxt);

        return; 
    }
    DataManager.Instance.selectedStageIdx = _stageIdx;              //선택된 스테이지
    DataManager.Instance.selectedMonsterData = _selectedListData;    //선택된 몬스터
    
    MySceneManager.Instance.ChangeScene("MainScene");
}

 

public class WarningBox : UIBase
{
    ...
    [SerializeField] private TextMeshProUGUI _text;

    ...
    public void SetText(string text)
    {
        _text.text = text;
    }
}

 

 

Dotween오류

 

경고창을 다다다다 여러번 띄우면 나는 에러.

warning박스가 띄워지면서 콜백함수도 도달하기 전에 다시 창을 띄우려고할 때 이런 에러가뜬다.

 

만약 warningBox가 남아있는 시간이 길어진다면 그만큼 풀을 더 가져와주면 오류는 뜨지 않는다.

지금 페이드 인 페이드아웃까지 총 2f시간이 걸린다. 

20개의 풀을 받아두면 오류는 뜨지않는다.

 

 

코드리뷰

MySceneManager
   -클래스 이름 바꿔줄 것
   - 코루틴 문자열말고 함수로 받을 것.,

WarningBox 
   -오브젝트 풀 말고 그냥 하나만 써도 될 것같다.
   -canvasorder 또는 풀링되는 오브젝트위치를

UIManager
   -UI오브젝트안에 Canvas넣어줄 것
   -각각의 UI마다 canvas를 만들어주는 것이 아닌 UIManger을 넣어둔

monsterUI
   -UIBase상속 안받아져있음.
   -몬스터 스폰UI위치가 잘릴 수 있으니 화면크기에 따라 조절하도록...  스폰 위치를 조정하도록할지 의견 조율할 것.