TIL_240201

Z_제트·2024년 2월 1일
0

TODAY I LEARNED

목록 보기
67/88
post-thumbnail

to do_오늘 할 일

  • 최종프로젝트 ing

retro_오늘 한 일(회고)

최종프로젝트 진행상황

오늘의 작업 :

  • 인벤토리 UI 예외처리 DONE (제발 에러 그만....!)

해결하자s :
#4 ✅
인벤토리에서 보유하고 있는 룸A 클릭하고 옆에 룸B 를 누르면 룸A의 장착 표시가 남아있는 이슈

상황에 맞게 선택 표시 활성화/비활성화 설정하자

InventRoom_ContentsBtnUI.cs

private void ClickRoomContentBtn(PointerEventData data)
{
    if (Owner.inventRoomDescri_PopupUI == null) // 설명 팝업이 안 떠 있다면
    {
        Owner.inventRoomDescri_PopupUI = Main.Get<UIManager>().OpenPopup<InventRoomDescri_PopupUI>(); // 설명창 열어주고
        Owner.inventRoomDescri_PopupUI.RoomData = RoomData; // 데이터 넘겨주고
        Owner.inventRoomDescri_PopupUI.Owner = this; // owner 설정해주고

        _selectCheckImg.gameObject.SetActive(true); 

        //if (_selectCheckImg == null)
        //{
        //    _selectCheckImg.gameObject.SetActive(true); // 선택 표시 활성화 -> 이게 null 이 아니라는 의미인가 ?
        //}
        //Owner._roomSelectCheckImg = _selectCheckImg; 

    }

    //if (_selectCheckImg.gameObject.activeSelf) // 선택표시 활성화되어있다면
    //{
    //    _selectCheckImg.gameObject.SetActive(false); // 일단 선택표시 활성화되어있는거 꺼준다.
    //}

    //else if (Owner.inventRoomDescri_PopupUI != null && _selectCheckImg.gameObject.activeSelf) // 설명 팝업이 떠있고, 선택표시가 활성화 되어있다 ?
    //{
    //    _selectCheckImg.gameObject.SetActive(false); // 일단 선택표시 활성화되어있는거 꺼준다.
    //    Main.Get<UIManager>().ClosePopup();
    //}

    //else if (Owner.inventRoomDescri_PopupUI != null && _selectCheckImg.gameObject.activeSelf) // 설명 팝업이 떠있고, 선택표시가 활성화 안 되어있다 ?
    //{
    //    _selectCheckImg.gameObject.SetActive(true); // 일단 선택표시 활성화되어있는거 꺼준다.
    //}


    else // 설명 팝업이 이미 떠 있다면
    {
        // // 선택표시가 어딘가에서 활성화되어있다면 일단 꺼준다.
        // 그리고 다시 active 해.

        Owner.inventRoomDescri_PopupUI.Owner._selectCheckImg.gameObject.SetActive(false);

        Owner.inventRoomDescri_PopupUI.RoomData = RoomData; // 데이터 넘겨주고
        Owner.inventRoomDescri_PopupUI.SetInfo(); // 데이터 갱신
        Owner.inventRoomDescri_PopupUI.Owner = this; // owner 업데이트

        _selectCheckImg.gameObject.SetActive(true);

    }
}

// 3시간의 고민이 5분만에 해결되는 magic 만능해결사 갓.굿.동.님.


갓굿동님의 손길


else // 설명 팝업이 이미 떠 있다면
    {
        Owner.inventRoomDescri_PopupUI.Owner._selectCheckImg.gameObject.SetActive(false);

        //Owner.inventRoomDescri_PopupUI.RoomData = RoomData; // 데이터 넘겨주고
        //Owner.inventRoomDescri_PopupUI.SetInfo(); // 데이터 갱신
        Owner.inventRoomDescri_PopupUI.Owner = this; // owner 업데이트

        _selectCheckImg.gameObject.SetActive(true);
    }

// Owner.inventRoomDescri_PopupUI.Owner._selectCheckImg.gameObject.SetActive(false);
// Owner.inventRoomDescri_PopupUI.Owner = this; // owner 업데이트


🔥 에러 하나 고치니 새로운 곳에서 또 에러 또 발견 !!!!!!!!!! 지쟈스....
잘 해결된 줄 알았는데 Room 에서 아이템 하나 클릭하고 Unit 갔다가 다시 Room 와있으면 체크표시 남아있음 !!!!!!!!

다행히 이번 에러는 혼자서 스스로 해결 !

  • 우선 InventRoom_ContentsBtnUI.cs 에서 설명창을 Inventory_PopupUI.cs 의 inventRoomDescri_PopupUI 에 넣어주고 있으니까
  • Room 버튼 클릭할 때 ‘Unit Description 창이 켜져있다면’ 조건문 안에서 inventUnitDescri_PopupUI 의 owner (= 선택표시가 있는 InventUnit_ContentsBtnUI) 를 통해 선택표시이미지를 불러와서 SetActive false 해준다 !

InventRoom_ContentsBtnUI.cs

public Inventory_PopupUI Owner { get; set; }

private void ClickRoomContentBtn(PointerEventData data)
{
    if (Owner.inventRoomDescri_PopupUI == null) // 설명 팝업이 안 떠 있다면
    {
        Owner.inventRoomDescri_PopupUI = Main.Get<UIManager>().OpenPopup<InventRoomDescri_PopupUI>(); // 설명창 열어주고
        Owner.inventRoomDescri_PopupUI.RoomData = RoomData; // 데이터 넘겨주고
        Owner.inventRoomDescri_PopupUI.Owner = this; // owner 설정해주고

        _selectCheckImg.gameObject.SetActive(true);
    }

Inventory_PopupUI.cs.cs

private void ClickRoomBtn(PointerEventData EventData)
{
    _inventRoomScrollView.gameObject.SetActive(true);
    _inventUnitScrollView.gameObject.SetActive(false);

    if (inventUnitDescri_PopupUI != null) // unit description 창이 켜져있다면
    {
        inventUnitDescri_PopupUI.Owner._selectCheckImg.gameObject.SetActive(false);
        Main.Get<UIManager>().ClosePopup(); // stack 으로 popup 이 쌓임. -> 후입선출 되는 흐름 ! 그래서 ClosePopup 하게 되면 제일 최근에 생성된 UnitDescri_PopupUI 가 닫히는 것이다 !
        inventUnitDescri_PopupUI = null;
    }
}

#5 ✅
인벤토리에서 Room 누르고 보유 룸 아이템 누른 다음에 Unit 버튼을 누르면 떠있는 룸의 설명 팝업창이 꺼지게 하자
(인벤토리에서 카테고리 Room 이나 Unit 버튼 누르면 켜져있던 Description 관련 팝업 싹다 꺼 ~)

  1. 일단 Inventory_PopupUI.cs 에서 inventUnitDescri_PopupUI 를 들고있죠.

  2. InventUnit_ContentsBtnUI.cs 에서

    public Inventory_PopupUI Owner { get; set; }

Owner (즉, Inventory_PopupUI) 의 inventUnitDescri_PopupUI 에 InventUnitDescri_PopupUI 를 넣어주고

InventUnit_ContentsBtnUI.cs

    private void ClickUnitContentBtn(PointerEventData data)
    {
        if (Owner.inventUnitDescri_PopupUI == null) // 설명창이 안 열려 있다면
        {
            Owner.inventUnitDescri_PopupUI = Main.Get<UIManager>().OpenPopup<InventUnitDescri_PopupUI>("InventUnitDescri_PopupUI"); // 설명창 열어주고
            Owner.inventUnitDescri_PopupUI.UnitData = UnitData; // 데이터 넘겨주고
            Owner.inventUnitDescri_PopupUI.Owner = this; // owner 설정해주고           
        }
        else // 설명창이 이미 열려 있다면
        {
            Owner.inventUnitDescri_PopupUI.UnitData = UnitData; // 데이터 넘겨주고
            Owner.inventUnitDescri_PopupUI.SetInfo(); // 데이터 갱신 !

            //_equipCheckImg.gameObject.SetActive(true);
        }

    }

  1. 그럼 Inventory_PopupUI.cs 에 inventUnitDescri_PopupUI 에 뭔가가 들어있고,
    Room 버튼을 눌렀을 때 유닛설명창이 떠있다면(null 이 아니라면) ClosePopup 을 한다.
    ClosePopup 을 했을 때 InventUnitDescri_PopupUI 가 가능한 이유는, stack 으로 popup 이 쌓이고, 제일 최근에 생성되었던 UnitDescri_PopupUI 가 닫히는 것 !
    그리고 닫혔으니까 null 값도 챙겨주기 ~

Stack 으로 Popup 이 쌓이게끔 UIManager 만든 굿동.....갓.굿.동.⭐🌟

Inventory_PopupUI.cs

private void ClickRoomBtn(PointerEventData EventData)
{
    _inventRoomScrollView.gameObject.SetActive(true);
    _inventUnitScrollView.gameObject.SetActive(false);

    // unit description 창이 켜져있는 걸 꺼줘야하는데 열려있다는 정보를 어디서 어떻게 가져와야하는 것인가
    if (inventUnitDescri_PopupUI != null) // unit 창이 켜져있다면
    {
        Main.Get<UIManager>().ClosePopup(); // stack 으로 popup 이 쌓임. -> 후입선출 되는 흐름 ! 그래서 ClosePopup 하게 되면 제일 최근에 생성된 UnitDescri_PopupUI 가 닫히는 것이다 !
        inventUnitDescri_PopupUI = null;

    }

}

profile
trying to make the world a better place with a cool head and warm heart

0개의 댓글