ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024.4.17
    TIL 2024. 4. 17. 21:35

    오랜만에 쓰는 TIL입니다.

    지금까지는 사실 어떤 것을 추가해야할지 모르겠어서 지금까지 만든거 조금 다듬고 스토리 라인 정리하면서 대화 내용을 작성을 했습니다.

     

    최종발표까지 2주 밖에 남지 않아서 어느 정도 기술적인 부분이 완료된 거 같습니다.

     

    오늘 모의 면접하면서 흠.. 그냥 내 맘대로 만들기는 했구나 라고 생각이 듭니다.

    어떤 기술적 요소를 사용했다라고 하기 뭣해서 이번에 다시 정리하려고 합니다.

     


     

    가장 많이 사용한 부분은 PopupUIManager입니다.

    계속 화면에 떠 있는 부분이 GUI이고, GUI 중에서 버튼을 누르면 새로운 UI가 나오는데 그것을 PopupUI로 통칭했습니다.

     

    PopupUI마다 UI script를 넣어줍니다. 이 때, PopupUI와 UI script 이름을 같게 해줍니다.

    이유는 PopupUIManager에서 UI script의 이름을 이용해서 PopupUI object를 생성해줄 것이기 때문입니다.

    버튼을 누를 때 마다 PopupUI object를 불러와줘야하므로 PopupUIManager에는 싱글턴 패턴을 사용해주었습니다.

     

    싱글턴 패턴을 이용하므로써 쉽게 Button에서 PopupUI를 불러올 수 있으며, 이러한 기능은 PopupUIManager 한개만 있어도 충분하므로 더 만들어 줄 필요가 없습니다.

     

    또한, 제네릭을 이용해서 UI script 이름으로 PopupUI object를 생성할 수 있도록 했습니다. 대신에 where을 이용해서 특정 조건을 만족하는 것만 사용할 수 있도록 했습니다. 그렇기 때문에 특정 조건을 만족하는 UI script를 만들어서 불러오는 PopupUI object의 컴포넌트에 넣어주었습니다.

     


     

    도감UI 입니다.

    원래는 스크롤을 이용해서 도감에 있는 아이템들을 확인하려고 했는데 스크롤이 아니라 페이지를 넘기는 식으로 변경되어서 object들의 설정을 다시 해줘야합니다.

    인벤토리UI도 마찬가지로 다시 수정해줘야합니다.

     

    버튼을 클릭해서 정보를 얻거나 정보를 확인하는 게임이므로 버튼 설정이 중요합니다.

    기본적으로 x나 뒤로가기 같이 오브젝트를 끄는 경우에는 정적으로 버튼 기능을 설정해주었습니다.

     

    하지만 인벤토리나 도감에서 아이템의 정보를 확인하기 위해서 버튼을 누르는 경우에는 계속해서 데이터가 바껴야하기 때문에 AddListener을 이용해서 동적으로 기능을 설정해주었습니다.

    itemSlots[i].GetComponent<Button>().onClick.AddListener(() => DogamSlotButton(n));
    
    public void DogamSlotButton(int index)
    {
        nameText.text = DataManager.Instance.dogamItemData[index].item_name;
        descriptionText.text = DataManager.Instance.dogamItemData[index].default_description;
    }

     

    도감에 경우에는 게임시작 전에만 확인이 가능하므로 Start를 이용해주었지만 인벤토리의 경우 게임을 진행하면서 얻은 아이템을 계속 확인해야하므로 OnEnable를 이용해주었습니다.

    OnEnable은 Start보다 빠르게 실행되기 때문에 OnEnable에서 필요한 정보를 세팅해야한다면 Awake에서 필요한 정보를 세팅해줘야합니다.

     


     

    인적사항 조사, CCTV, 휴대폰 조사의 경우에는 추가적으로 필요한 부분이 다른 분께서 이미지 작업을 해서 주셔야하는데... 진행이 늦어짐에 따라 폐기 되었습니다

     


     

    핸드폰은 전화번호부와 캘린더, 여태까지 대화한 내용을 볼 수 있는 메시지 부분으로 나누었습니다.

    전화번호부는 미리 만들어두었지만 이미지를 주심에 따라서 수정되었습니다.

     

    특정 아이템을 얻는 경우에는 전화번호를 얻어 통화가 가능합니다.

     

    이 경우에는 아이템에서 얻을 수 있는 정보가 itemID 밖에 없기 때문에 switch를 이용해서 itemID에 따라 수동으로 수정되도록 만들었습니다.

     

    또한 통화버튼을 누르게 되면 대화 기능을 만들어주신 분이 생성해주신 script component를 GetComonentInChildren을 이용해서 가져와 필요한 내용을 수정해주었습니다.

     

    전화를 누르게 되면 전화 내용과 함께 핸드폰 이미지가 바뀌게 됩니다. 새로운 PopupUI를 불러온 것입니다.

    이미지랑 이름 text만 바뀌도록 script 설정해주었습니다.

     

    대화를 마치면 약속을 잡을 수 있도록 캘린더가 나오게 됩니다. 원하는 날짜를 누르면 UI는 사라집니다.

     

    11일을 선택했네요. 선택한 날짜에는 노랑색 동그라미가 생깁니다. 

    현재 날짜는 빨간색 동그라미가 있습니다.

     

    대화 이후 등장하는 UI와 핸드폰에서 볼 수 있는 UI가 다르므로 GameManager를 통해서 선택한 날짜와 통화한 대상의 이름을 받아와서 설정해주었습니다.

    event를 이용해서 구독을 통해서 정보를 받아올까 했으나

    1. 캘린더가 한번도 실행되지 않았으면 구독을 통한 정보 전달 불가

    2. 캘린더가 실행되었더라해도 setActive 가 false이면 정보 전달 불가

    로 인하여 GameManager를 징검다리로 이용해서 정보를 가져왔습니다.

     

    +노랑색 동그라미쪽을 누르면 아래 약속없음 부분이 약속잡은 사람 이름으로 바껴야하는데 현재 대화 시스템과 대화 내용에 오류가 있어서 제대로 바뀌지 못하는 상황입니다.

     

    날짜가 변함에 따라 선택한 날짜가 되면 대화가 나올 수 있도록 설정해주었습니다.

    추후에 캘린더가 등장해서 확인할 수 있도록 바꿀 예정입니다.

     


     

    인물들과 대화를 했을 때 반복되지 않는 대화의 경우에는 저장할 수 있도록 설정했습니다.

     

    특정 인물과 대화할 경우에 메세지 부분에서 화면이 나오게 됩니다.

     

    메세지를 누르게 되면 대화한 내용이 나옵니다.

     

    대화 내용이 확인되지 않았어서 수정을 못했었는데 대화하는 부분을 고치면서 생성되었습니다.

     

    추가적으로 해야할 부분은 스크롤을 만들고 선택지들이 대화창에 나오지 않도록 설정해줘야합니다.

    또한 위에 대화 내역 대상을 바꿔줘야하는데 이는 전화 걸었을 때와 마찬가지로 바꾸면 되기 때문에 어렵지 않을 것이라 생각됩니다.

     


     

    그리고 오늘 이미지 변경을 위해서 수정을 진행했었는데 sprite를 변경이 잘 안되는 현상이 생겼습니다.

     

    var obj = Resources.Load(str) as Sprite;

    vs

    var obj = Resources.Load<Sprite>(str);

     

    as를 이용해서 Sprite를 가져오는 경우에는 Sprite로 바뀔 수 있으면 가져오는 것이고 아니면 마는 것이므로

    제네릭을 통해서 가져오는 것이 확실하게 가져올 수 있습니다.

     

    'TIL' 카테고리의 다른 글

    2024.5.13 - 최적화  (0) 2024.05.13
    2024.04.25  (1) 2024.04.25
    2024.4.1  (1) 2024.04.01
    2024.3.28  (0) 2024.03.28
    2024.3.27  (1) 2024.03.27
Designed by Tistory.