전체 과정은 세이브파일 동기화
1번 인게임 맵 스크롤링이랑 씬, 게임, 스테이지 매니저 동기화 클리어
2번 캐릭터 컨트롤러로 플레이어 구현 클리어
3번 UI에서 타이틀에서부터 스테이지 1-1 고르면 진입 진행중
4번 스테이지 클리어 시 판정
5번 파티구성
6번 장비(인벤토리)
7번 뽑기
전체 스테이지 목록 <- SSO: 스테이지데이타 스크립터블 오브젝트
SSO를 한번에 다 불러오는 애가 StageDataManager;
StageInfo : 스크립터블 오브젝트 갯수(월드,스테이지 구분) 만큼 배열
StageInfo 배열크기 정하기 (고정)
1. 스크립터블 오브젝트 정보들을 불러와서 구현
2. 수동으로 하나하나 계속 생성해주기 (이거하면 혼남)
변동사항 저장하는 것은 세이브파일(현재)의 StageInfo[]의 인덱스로 들어가서 변경.
현재 선택한 스테이지의 정보는 스테이지데이터매니저, 게임매니저(둘중 하나는 들고 있어야 함)
스테이지 정보 로드할때도 마찬가지로 게임매니저에 세이브 파일 객체 참조
게임 클리어를 했을 때
1. 저장 : 현재 스코어 , (게임매니저에서 스코어 저장 중 -> 세이브데이터 객체의 StageInfo로 들어가서 스코어를 저장) 언락 정보(클리어 판정 - 게임매니저)
게임 데이터들 어짜피 한번에 저장됨
2. 팝업이 떴을 때, 맵 무한스크롤(마지막)
클리어 조건 판정 -> 스테이지 매니저
클리어 시 수행 내용 -> 게임 매니저
에너미 스포너가 어짜피 씬에서 고정되어있음
스테이지 매니저도 스테이지 씬에 고정되어 있음
시퀀스(웨이브)
1. 시간 지나면 넘어감 (기본 슈팅게임)
2. 시퀀스에 잇는 모든 적 처치 (엘리트)
3. 점수 달성 시 넘어감 (계속나옴)
스테이지 클리어 조건
1. 스포너에 있는 에너미 카운트 == 0 && 스테이지 매니저가 시리얼라이즈 필드로 에너미 리스트(카운트 추가) == 0
시퀀스 1 스포너 - 시퀀스 2 스포너 카운트 기준 계산 == 0 && 에너미 리스트 카운트 == 0
스테이지 매니저를 좀 변형
시퀀스 1~2 -> bool
map scroll 함수에서
시퀀스 bool 체크해서 false면 현재 돌던 맵 계속 다시 나오게 해야함
시퀀스 마다 movingMaps 배열에 저장해서, 해당 배열을 꺼내오는 식으로 구현
스테이지 데이터 매니저가 스테이지 데이터를 불러옴. -> 현재 스테이지의 정보를 들고 잇음. 이 불러온 데이터를 에너미 스포너 스크립트에서 읽어옴. -> 읽어온 정보들을 바탕으로 에너미를 프리팹 추가 참조.
StageData -> StageDataManager
{
에너미 스포너 정보[3] = 적 타입, 마릿수 , 스폰타이머, 스폰좌표, 시퀀스
0번 인덱스 = 일반
1번 인덱스 = 엘리트
2번 인덱스 = 보스
}
EnemySpawnData - > EnemySpanwer (스테이지 데이터매니저에서 현재 스테이지 정보(인덱스) 가져와야함)
{
에너미 스포너 정보[3] = 적 타입, 마릿수 , 스폰타이머, 스폰좌표, 시퀀스
0번 인덱스 = 일반
1번 인덱스 = 엘리트
2번 인덱스 = 보스
}
에너미 스포너 스크립트에서는 에너미 스포너 정보를 가지고옴. 시퀀스 기준으로 코루틴 분할 필요.
시퀀스 기준으로 내보낼지 안내보낼지 결정 가능
포기
게임 시작 -> 새로 생성 (StageInfo들 기본값으로 배열 저장이 필요) -> SO 갯수 필요함. 이 정보 가져와야함.
스테이지 데이터 매니저가 Init하는 과정
1. So기준으로 runtimeData를 초기값으로 전부 설정.(1-1만 언락)
2. runtimeData 동적데이터 "현재 세이브 파일"의 스테이지 정보들을 가져야 함. 선택된 세이브파일의 StageInfo 기준으로 값들을 다시 덮어쓰기
3. SDM이 필드 정보를 사용할 때, 그냥 StageInfo쓰면 되는거 아님?
4.
처음 게임 시작 -> StageInfo에 데이터들을 넣어야 함(세이브과정 =세이브파일 생성)
세이브 파일 생성 단계에서, SDM의 runtimeData들을 StageInfo에 집어 넣어서 생성
SO의 갯수만 파악, 서브스테이지 숫자 집어넣어서 갯수만큼 초기값을 가진 StageInfo 배열을 생성.
세이브 생성 단계
0. SDM 초기화 (세이브 생성 전에)
1. SDM의 정보들을 기준으로 StageInfo 생성
2. runtimeData를 StageInfo에 덮어씀
world runtimeData.Count => i
stage 지정숫자 => j
안됨. 다른 방안으로 리스트<배열>. 또는 딕셔너리처럼 배열 만들기 해야됨
리스트<배열> 안됨. 그냥 무조건 1차원 배열만 가능함
Init에서 참조가 전부 풀림. 함수들 리팩터링 해야함. 2차원배열, 배열안의 배열, 리스트<배열> 될 수도 있음. 나중에 테스트 해봐야함