TIL

240319 최종프로젝트 데이터와 오브젝트의 최적화 작업

배동건 2024. 3. 22. 20:36

덱 정보를 다른 씬과 다른 UI에 전달하기에는 지금 구조로는 너무 비효율적이라 생각됨(덱 정보에 UI프리팹과 모든 정보를 넣어놨기 때문) -> 효율적인 구조를 생각해봤는데 마땅히 생각되는 부분이 없음 -> 튜터님께 질문 후 현업에서 작업하는 방식에 대해 배움

 

씬간 카드 정보 교환 및 최적화를 위해

기존의 딕셔너리에 프리팹을 포함한 모든 정보를 덱 리스트로 가지고 있는 방식보다

현업에서 사용하는 방식인 덱 리스트에는 포함된 정보의 최소값(어떤 카드인지 확인할 수 있는 인덱스 및 중복 수량 정도만)만을 저장해 데이터 전송에 이점을 보고,

UI적인 부분(프리팹)은 따로 관리하여 게임 실행에서도 프리팹 생성 파괴를 최소화해 최적화하는 방식으로 변경

 

**씬 간에 데이터 전환은 돈디스트로이온로드 -> 이거 하려면 덱 최적화 해놓는게 편함

**saveandload 에서 메인으로 넘어올 때 collectionUI 프리팹 생성하는데 

**저장
데이터베이스(Json)에는 구분할 수 있는 id만
게임 키면 id에 따라 덱에 정보 생성해줌
현업에서도 대부분의 정보 교환은 이런식으로bb

**덱 최적화
오브젝트나 프리팹과 데이터 1대1 매칭 ㄴㄴ
오브젝트나 프리팹에는 데이터에 따라 디스플레이만 하니까 매칭보다는 
오브젝트나 프리팹 관리와 데이터 관리를 따로 해서
오브젝트나 프리팹 << 얘네는 active true false에 따라 원하는 데이터를 넣어서 보여주는 쇼윈도라고 생각하면 편함
이렇게 하면 덱 내의 카드 최대 개수가 10개라고 하면 10개의 프리팹 클론으로 여러 개의 덱에 어떤 카드가 들어있는지 모두 보여줄 수 있음
1 덱 - 1 2 3 4 5 1 2 3 4 5 있고 2 덱 - 6 7 8 9 10 6 7 8 9 10 있으면
1 덱 액티브 시 각 프리팹에 1 2 3 4 5 1 2 3 4 5 카드 정보 넣어서 보여주고
2 덱 액티브 시 각 프리팹에 6 7 8 9 10 6 7 8 9 10 카드 정보 넣어주면 됨 
이렇게 하는게 최적화에도 많은 도움이 됨

**생성된 애의 인덱스랑 중복수량만 덱리스트에 저장
프리팹은 ui가 들고 있고(리스트로 들고 잇든 뭐하든 암튼)
1번덱 active false하면 미니카드(A)ui도 active false 해놨다가 다른 덱(2번) active되면 2번덱의 덱리스트 정보만 미니카드(A)에 받아서 active true
또 덱 완료 누르면 미니카드 프리팹은 active false


**덱 매니저와 collectionUI 서로의 역할하도록 수정

 

해야하는 작업

 

1. 해당 부분 작업 위해 DeckManager.cs와 collectionUI.cs에 각각 deckList(dictionary)에 관한 매서드만, deckList에 추가되거나 빠진 UI(프리팹)에 관한 매서드만 작성하여 역할을 구분 및 코드 가시성 증대

 

2. 덱리스트에 포함된 정보를 덱이름, 포함된 카드의 인덱스, 인덱스에 해당하는 카드의 프리팹, 포함된 카드의 중복 수량 정보 에서 덱이름, 포함된 카드의 인덱스, 포함된 카드의 중복 수량 정보 3개만 저장하도록 변경

 

3. 덱 리스트에 추가된 카드 인덱스에 따라 collectionUI.cs에서 프리팹 생성 및 정보 저장

 

4. 프리팹에 굳이 카드의 모든 정보가 들어갈 필요성이 없음을 깨닫고, 카드의 인덱스 UI에 보여지는 모습에 따른 필요 정보만 추가(이전엔 카드, 미니카드 등의 구분 없이 모든 정보를 넣었다면 카드의 경우, 스탯과 이미지 인덱스만 넣고, 미니카드의 경우, 카드 인덱스와 중복 수량만 넣음)

 

 

https://github.com/baedonggeun/Defence_Game