- 오늘은 챌린지반 특강 중 동적생성에 대해 정리!
<출처 : 챌린지반 강의노트>
동적생성
동적생성이란?
- 프로그램이 시작될 때 객체를 미리 생성해두는 것이 아니라 객체를 필요로 하는 순간에 바로 생성한는것을 의미한다.
장점
- 씬이 가벼워진다 -> 로딩속도가 빨라지게 된다.
- 씬에 작업하는 것이 아닌 prefab단위 관리라 Git충돌이 거의 없다.
- 추후 리소스와 UI를 Addressable로 보내 빌드용량을 낮추기 쉽다.
- 와이어 프레임상 변경이 일어 났을때 간단하게 바꿀 수 있다.
단점
- 실행 시키기 전까지 확인이 안된다.
- 배치 변경시 해당 프리팹을 찾아 일일이 수정해야된다.
목표
- 대부분의 정보와 좌표까지 데이터로 넘기게 되면 변경사양은 기획파트가 직접 하게 할 수 있음
- 어드레서블, 에셋번들을 사용하기 위한 필수 조건
- 깃의 충돌 최소화
동적생성의 활용
- 랜덤생성로직 : 가장 대표적으로 로그라이크류 게임이 있음 (절차적생성) 맵에 오브젝트를 배치할때 데이터를 캐싱하여 같은 위치에 다시 배치하도록 작업할 수 있다.
- 지정된 위치 생성 : 지정된 장소에 아이템이 스폰되게 만들 수 있음 데이터 테이블을 수정하기만 한다면 위치를 재 조정할 수 있다.
SceneManager - LoadSceneMode
- 동적생성에필요한 LoadSceneMode모드 중 Additive가 있다. 이 방식은 씬을 유지하면서 현재 씬에 새롭게 불러올 수 있는데 보통 시나리오류 혹은 케릭터의 극적인 상황을 보여주는 컷신작업에 많이 사용한다고 한다.
- 즉 지형만 있는 씬을 additive로 로드하게 된다면 씬에 지형만 얹을 수 있으므로 일종의 동적생성이 가능하다.
동적생성의 개선
- UI역시 동적생성이 가능! 이 내용은 인프런 루키즈 강의 들으면서 정리해 놨는데.. 개선점이 존재한다.
- 내가 쓰는 코드에선 Resources.Load를 사용해서 불러오는데 리소스 전체를 순회하는 코드이고 load에서 탐색과 메모리 할당이 일어나게 되어 가비지 컬렉터가 생겨 성능이슈가 생긴다.
- 그래서 최소한의 호출로 오브젝트풀링이라던가 dictionary에 저장하는 방식으로 개선이 필요
- 이번주 특강 내용 어드레서블 방식과 결합하면 훨씬 좋은 성능의 동적 생성이 가능하다. 루키즈에서 배운 프레임워크 개선을 할 수 있을듯.
오늘의 회고
- 오늘은 개인과제를 좀 했다. 클릭커 게임 만들었는데 생각보다 금방만들어서 제출 잘 할 수 있을듯? 내일 마무리 ui작업하고 제출해야겠다.
- 일정이 끝나고 팀프로젝트 관해서 조원분들과 모여서 얘기좀 나눴는데 기획안도 공부나 작업안될때 틈틈히 기록해 놔야겠다. 사실 리소스적인 문제도 있어서 작업이나 코딩 안되면 틈틈히 찾아봐야될듯! 벌써 다음주면 개발 시작해야해서 바쁠것같다.
- 캘린더보고 일정정리하고... 지난 프로젝트엔 PM분들과 기획분들이 있어서 안했지만 이번엔 팀장인 만큼 더 책임감 있게 해야겠다.
안녕하세요 오영님! 잘 보고 갑니당ㅎㅎ! 챌린지 특강은 아직 엄두가 안 나는데 바로바로 흡수 하시는게 역시 선생님 출신..,! 같이 팀프로젝트 했으면 너무 좋았겠지만, 아무튼 이번 팀프로젝트도 파이팅이고 최종도 기대 하고 있겠습니다! 캠프 끝까지 힘내세요!ㅎㅎ