TIL_240131

Z_제트·2024년 1월 31일
0

TODAY I LEARNED

목록 보기
66/88
post-thumbnail

to do_오늘 할 일

  • 최종프로젝트 ing

retro_오늘 한 일(회고)

최종프로젝트 진행상황

오늘의 작업 :

  • 인벤토리 UI 예외처리 ing..🔥

해결하자s :

#4 🛠
인벤토리에서 보유하고 있는 룸A 클릭하고 옆에 룸B 를 누르면 룸A의 팝업과 장착 표시가 남아있는 이슈

-> 시도방법 :

  1. Inventory_PopupUI.cs 에서 inventRoomDescri_PopupUI 을 들고 있게 한다. (ContentsBtn Owner 를 this 로 연결해주기)
  2. InventRoom_ContentsBtnUI.cs 에서 Inventory_PopupUI Owner 로 갖고 있게 하고,
  • 버튼 눌렀을 때 inventRoomDescri_PopupUI 안 열려있을 때 / 열려있을 때 조건을 나누어서 설정.
    • 설명창이 안 열려있었다면 설명창 열어주고, 데이터 넘기고, owner 설정하고 !
    • 설명창이 기존에 열려있었다면 설명창 열어주고, 데이터 갱신하고 !
      • 이때 데이터 갱신 함수는 inventRoomDescri_PopupUI 안에 있는 SetInfo() 함수 !

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 설정해주고
    }
    else // 설명 팝업이 이미 떠 있다면,
    {
        Owner.inventRoomDescri_PopupUI.RoomData = RoomData; // 데이터 넘겨주고
        Owner.inventRoomDescri_PopupUI.SetInfo(); // 데이터 갱신
        
    }
}
  1. InventRoomDescri_PopupUI.cs 에서
private void OnDestroy()
{
    Owner.Owner.inventUnitDescri_PopupUI = null; // null 처리 !
}

-> 팝업은 이제 중복이 안 되는데, 아직 장착 표시는 not yet...!

#5
인벤토리에서 Room 누르고 보유 룸 아이템 누른 다음에 Unit 버튼을 누르면 떠있는 룸의 팝업창이 꺼져야하지 않을까
인벤토리에서 main Room 이나 Unit 버튼 누르면 켜져있던 Description 관련 팝업 싹다 꺼 ~

#6 ✅
인벤토리에서 유닛이나 룸을 삭제하면, 인벤토리에서 바로 없어지는 것이 아니라 인벤토리를 껐다가 다시 켜야 없어진다.
try -> InventRoomDescri_PopupUI 에 인벤토리 새로고침하는 함수 SetUnitInventory() 를 불러오기 위해
Inventory_PopupUI.cs 부터 스크립트 너머너머 Owner ~ Owner ~~ 이런식으로 작업해서 함수 불러오기 !
-> Owner 의 owner 를 타고가서 인벤토리 새로고침하는 함수 불러와서 해결 !

InventRoomDescri_PopupUI.cs

public InventRoom_ContentsBtnUI Owner { get; set; }

private void ClickDeleteBtn(PointerEventData EventData)
{
    // 인벤토리를 껐다가 다시 키면 없어져있긴 하는데 삭제되는 순간에 바로 인벤토리 업데이트까지는 안 됨..
    Main.Get<GameManager>().PlayerRooms.Remove(RoomData);
    Main.Get<UIManager>().ClosePopup(); // 설명창 닫아주고
    Owner.Owner.SetRoomInventory(); // 인벤토리 초기화
}

InventRoom_ContentsBtnUI.cs

public Inventory_PopupUI Owner { get; set; }

Inventory_PopupUI.cs

public void SetRoomInventory()
{
    // room
    List<ThisRoom> playerRooms = Main.Get<GameManager>().PlayerRooms;
    foreach (Transform item in _inventRoomContent.transform)
    {
        Destroy(item.gameObject);
    }
    for (int i = 0; i < playerRooms.Count; i++)
    {
        InventRoom_ContentsBtnUI inventRoomItems = Main.Get<UIManager>().CreateSubitem<InventRoom_ContentsBtnUI>("InventRoom_ContentsBtnUI", _inventRoomContent);
        inventRoomItems.RoomData = playerRooms[i];
        inventRoomItems.Owner = this;
    }
}

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

0개의 댓글