해당 링크의 글에 작업한 내용을 추가로 정리하고자 글을 작성했다.
1. StartScene 작업
2. 세이브 데이터 UI 작업
3. 설정 UI 작업
1. StartScene 작업
1) 해상도 작업
작업하던 StartBtnGroup의 해상도 조절이 되어 있지 않아서 배경 Canvas에 Canvas Scaler에서 UI Scale Mode를 Scale With Screen Size로 맞춰놓고 다시 작업했다.
2) Btn 생성 후 버튼 컴포넌트에 함수 붙이기
UIManager에 생성한 ToggleUI함수를 버튼 컴포넌트에 이벤트 형식으로 적용하기 위해 람다 함수를 이용했다.
btnComponent.onClick.AddListener(() => uIManager.ToggleUI("Setting"));
++ ToggleUI(String string) : UI를 Instantiate하는 함수로, 해당 UI가 현재 씬에 렌더링된 uiInstances에 존재할 경우 uiInstances에 존재하는 다른 UI들은 비활성화하고 원하는 UI만 생성 및 활성화한다.
++ uiInstances는 해당 씬에서 플레이어의 키 입력으로 활성화되는 UI들의 집합이다.
3) 추후 작업해야 할 부분
* SceneManager
= 씬별로 Instantiate해야 하는 오브젝트들이 다르기 때문에 해당 경우를 설정해야 한다.
= 현재 씬이 어떤 씬인지 파악하는 함수가 존재한다.
= 씬을 이동하게 될 경우, 오브젝트를 Destroy한다.
* BaseScene
= 현재 씬에 대한 정보를 담고 있다.
(정보 예시 : 현재 씬 이름)
2. SaveDataUI 작업
1) ScrollView 작업
세이브 데이터를 확인하기 위해 유니티의 ScrollView를 사용했다.
= Vercial Scrollbar만 사용해 Horizontal Scrollbar 관련된 옵션들을 삭제한다.
++ 스크롤링된 DataSlot을 동적 처리할 경우, Content 데이터 사이즈 인식을 정확히 할 수 없어 스크롤바가 활성화되지 않았다. 그래서 Content의 Vertical Layout Group에서 Child Force Expand, Content Size Filter를 설정했지만 그대로였다.
그래서 Content Size Filter를 삭제하고 정적 사이즈를 적용한 결과 문제가 해결되었고, 최적화 측면에서 좀 더 효율적으로 구현했다.
2) DataSlot 작업
DataSlot은 위와 같은 구조로 이루어져 있다.

여기서 해당 텍스트, 이미지들을 동적으로 처리할지 정적으로 처리할지 고민했는데 일단 세이브데이터UI를 불러올 때 로딩시간을 짧게 설정하고, 데이터 양이 적어서 프리로딩으로 정적으로 처리했다.
그리고 세이브 데이터 형식대로 값을 가져와야 하는 부분을 추가해야 한다.(SaveDataManager 작업 후 적용)
내부에서 컴포넌트를 자체적으로 할당하기 위해 자식 컴포넌트의 리스트를 만들어서 할당했다.
void SetComponent()
{
titleSplitNum = 7;
btn = gameObject.GetComponent<Button>();
btn.onClick.AddListener(ClickDataSlotFunc);
saveImg = gameObject.GetComponentsInChildren<Image>(true).FirstOrDefault(img => img.name == "SaveImg");
TextMeshProUGUI[] textMeshProUGUIs = gameObject.GetComponentsInChildren<TextMeshProUGUI>(true);
foreach(var comp in textMeshProUGUIs)
{
switch(comp.gameObject.name)
{
case "SaveTypeTxt":
saveTypeTxt = comp;
break;
case "SaveChapterTxt":
saveChapterTxt = comp;
break;
case "SavePosTxt":
savePosTxt = comp;
break;
case "SaveTimeTxt":
saveTimeTxt = comp;
break;
}
}
}
3) 추후 작업해야 할 부분
* ScrollView에서 ObjectPool 적용
ScrollView은 스크롤되는 데이터가 많아질수록 느려지고 메모리 사용량이 발생한다.
그래서 해당 스크롤뷰에 모든 데이터를 생성하는 것이 아닌, 일부 아이템을 가지고 데이터만 교체하는 방식으로 수정해야 한다.
* DataSlot에 비동기 처리
현재는 로딩 시간이 짧게 걸려야 하기 때문에 프리로딩 방식을 적용했는데, 비동기로 처리하는게 괜찮을까라는 생각이 들어서 성능 차이를 비교해서 적용할지 그대로 사용할지 결정해야 한다.
* SaveDataManager 작업
세이브데이터 관련한 매니저를 작업해서 해당 UI에 연결해야 한다.