아이템이나 몬스터 데이터등 데이터를 파일에서 읽어서 플레이에 사용하려는데
이 읽은 데이터를 어떻게 관리해야 잘 관리하는지 모르겠어요 ㅠㅠ
1. Scriptableobject를 데이터 베이스로 잡고 읽은 데이터 저장하라는 방법을 GPT에게 추천받아서
인게임에서 Scriptableobject에서 파일 데이터를 읽고 Scriptableobject에 포함되어있는 자료구조에 메모리 저장을 동시 할려고하는데,
씬 간 이동(비전투씬이 포함될 수 있음)에 메모리가 해제 될 것 같아서 메모리 해제 여부를 확인을 계속하는 이 방식이 맞는지 모르겠어요
Scriptableobject에 bool 멤버변수를 생성하고 메모리 등록 or 해제(OnDisable, OnEnable)에 bool값을 건들어서 메모리 해제 여부를 확인하는게 좋을까요?
아니면 메모리를 항상 유지하도록 싱글톤으로 gameobject를 만들고 거기에 Scriptableobject를 넣어놔야할까요??
2. 그리고 데이터 식별자는 보통 어떤 자료형으로 하나요?
지금은 ID를 파일에서 string으로 되어있는 변수를 바탕으로 사용하는데 인게임에서는 string으로 ID를 찾는건 성능상 안좋겠죠...?
만약 string이 아닌 int나 별도의 자료형을 사용하는게 더 효율적이라고하면,
파일에서 받아온 식별자 string를 키값해서 string 1: Type 1으로 대응시켜 자료구조에 저장해놓고 찾을것 같은데 더 좋은 방법이 있나요?
3. 파일에서 데이터를 class 형식으로 파싱해서 사용하는데 맞게 하는건가요?
또, 해당 데이터 저장 class를 상속 구조로 만들어서 사용해도 괜찮나요?
1. DBManager를 생성해서 관리하세용. 2. 데이터의 ID는 코드(int)방식으로 관리하세요. ex-몬스터테이블 (300xxxx), 아이템테이블(700xxxxx).등 3. 둘다 괜찮습니다.
선생님 Scriptableobject는 잘 사용 안하시나요? 보통 Scriptableobject는 어디에 사용하시나요?
ScriptableObject는 정적 데이터(수정 불가능)로 취급하고, 메모리 해체 여부는 UnityEngine.Object가 bool 타입 캐스팅 오버로드에 내부 구현을 제공하고 있어서 bool 검사로 해도 됨 그리고 ID는 인덱싱 방식으로 하면 그걸 관리할 에디터 인터페이스도 거기에 의존하니까 나중에 순서 바꾸거나 자유롭게 관리하고 싶으면 GUID 추천
ㄷㄷ GUID 쓸까..
1. 저 같은 경우는 provider 클래스 만들어서 so 쓸 애들만 들고 있게 만들었음 2. 전 string씀 규모가 크지 않아서 딕셔너리로 커버 ㄱㄴ 3. 저도 전자처럼 함
so 큰 장점은 에셋번들로 패치가 쉽다는거지 별필요없으면 그냥 대강 프리팹으로 뺴고 매니저같은거 만들어서 메모리 올릴거 올리고 뺄거 뺄고 하믄댐.. key값같은경우도 게임규모따라다름 string 쓴다고 그거 몇자나된다고 오버헤드 심할정도면 데이터 관리 코드를 잘못짠것 3번은 뭘로해도 돌아가면 상관없다고봄
몬스터 데이터나 아이템 데이터들은 한번 올려두면 왠만하면 싱글톤으로 쭉 유지시키십니까? 아니면 씬마다 정리하십니까?
씬의 레벨디자인이나 게임방식이 어떻게 되냐 따라 다르겟지.. 그씬에서 지속적으로 등장하는애들이면 쭉들고있다가 씬전환 할때 날려버리든가. 근데 어자피 반복적으로 넘나드는 경우가 많아서 한번 올려두면 잘안건듬. GC가 기본적으로 참조카운팅해서 이런역할들 하고있기도하고. 대신 그 레벨에서 휘발적인게 아닌걸 스태틱으로 올려놓는건 좀생각해봐야할 문제임. 케이스가 많아서 뭔가 단 하나의 솔루션을 제시하기 어려워 이런건
게임에 따라 다르지 않남 저는 상점씬 아니면 아이템 바꾸는게 불가능해서 갤러들 조언에 따라 싱글톤에서 DI로 바꿈 몬스터 데이터도 DI로 관리하고.. 같이 엮여있는 파티클, 스킬, 프리팹 등 다 씬마다 정리하는듯
다들 감사합니다