2021-06-29~02 개발일지
스테이지 관리
맵 에디터 구상
이전에 맵 에디터를 잠깐 건드렸었는데
실제로 맵을 찍을 사람을 생각하지 않고 그냥 내가 제작 해보고싶던 맵 에디터를 만들려고만 했던 것 같다
그래서 맵 에디터의 제작 목표를 확실히 하고 제작에 들어가기로 한다.
들어갈 기능
1. 씬로드가 아닌 더블클릭이나 드롭다운 클릭으로 바로 맵을 불러올 수 있으면 좋겠음
2. 게임 실행 도중에도 오브젝트를 추가하고 맵을 저장하는 기능
맵 파일 목록 나열
Application.persistentDataPath + "/savedGames.gd"
게임 실행 도중에도 오브젝트를 추가하고 맵을 저장하는 기능
이 기능을 만들기 전에 결정해야 할 것이 또 있다
1. 화면 안에 기능을 넣을 것인지
2. 유니티 UI로 기능을 제작할 것인지
뭐가 나을까??
일단 1번이 됐든 2번이 됐든 Json기반으로 Save, Load 기능은 필요하므로 먼저 레퍼런스를 찾아보았다
https://github.com/Unity-Technologies/giles
Unity-Technologies/giles
GILES: A Runtime Level Editor for Unity3D. Contribute to Unity-Technologies/giles development by creating an account on GitHub.
github.com
유니티에서 배포한 런타임 레벨 에디터이다.
내부 스크립트들을 보니 메타데이터까지 저장하여 pb_SceneNode 스크립트에서 메타데이터 정보를 기반으로 오브젝트들을 로드한다.
AssetType.Resource의 경우는 lookup 딕셔너리에서 값을 가져오게되는데
왜 Resources.UnloadUnusedAssets를 하는지 궁금해서 구글링해보니
Resources폴더에 들어있는 오브젝트들은 게임 실행시 메모리에 오브젝트들을 올려두고 가져오는 개념이라
빌드 시간이나 게임 시작 시간이 길어질 수 있고 사용하지 않는 리소스들도 계속 메모리에 올라가있어 성능상 좋지 않다고 한다. +파일 크기가 커진다
그래서 처음에 딕셔너리에 저장해둔 뒤 꺼내오나보다
아니 근데 지금 굳이 인게임에서 스테이지 수정할 필요가 있나?
원래 하던거에서 좀 벗어난 느낌인데 또..
맵 목록에 따라 클릭시 맵 로드하는 기능
Json을 활용해서 맵을 저장하고 로드하는 기능을 만들고 싶었다.
유니티의 Tilemap이 타일을 따로 만들어서 배치하는 것보다 성능상 좋다고 유니티 글에서 본 기억이있다.
따라서 Tilemap도 사용하고 Json도 사용하고 싶지만 아직 능력이 부족한 나..
다른 자료들을 찾아봐도 Tile을 따로 제작하여 배치하는 것 말고는 딱히 방법이 없어보인다..
(따로 타일 클래스를 제작하는건 어렵지 않지만 이왕이면 유니티의 Tilemap을 가져가고싶어..!!)
그래서 게임에 쓰이는 TileBase들을 Dictionary로 저장해둔 뒤
타일맵을 왼쪽에서 오른쪽으로 검사하여 타일의 이름을 Json으로 저장하고
저장된 스테이지를 로드
=> 타일의 이름을 통해 Tilemap.SetTile로 맵을 깔아주는 형식을 생각했는데..
스테이지를 타일맵으로 깔고 프리팹화
=> 해당 프리팹 불러오기랑 저거랑 뭐.. 많은 차이가 있을까??
이런게 얼마나 차이가 나는지 확인하려면 10만번정도 실행해서 걸린 시간을 측정하여 비교해봐야하나..
아직 알고싶은 것도 배워야할 것도 넘쳐난다 화이팅
어쨌든 지금은 타일의 이름을 통해 새로 깔아주는 형식을 사용하게 되었다
그런데 저장기능을 처음 만들어보다보니 경로를 어디로 어떻게 지정해야하지? 라는 생각이 들더라
오브젝트를 추가한다 라는 기능에 필요한 것은
1. 해당 오브젝트 아이콘 버튼
2. 버튼을 누르면 해당 오브젝트의 약간 투명한버전이 마우스 위치를 따라다님
3. 맵 클릭시 해당 위치에 '프리팹 생성'
이런걸 구현하다보면 플레이어가 생성되고 제대로 동작하기 위해 필요한 오브젝트(오브젝트 풀 매니저, 사운드매니저 등)은 어떻게 관리하지? 와 같은 여러가지 생각들이 꼬리를 물고
궁금하니까 구글링을 하면서 점점 원래 구현하던 기능이 아니라 다른걸 찾아보고 있게되는 불상사가 일어난다
오늘은 정신차리고 해당 기능만 바로바로 찾아서 해결해보자.
=> 에디터, 에셋 로드 기능 너무 많다...!! 알고싶은게 너무 많아서 여러 글을 타고 타고 들어가다보니 정신이 또.. 다른곳에.. 그래도 많은걸 배웠다
https://learn.unity.com/tutorial/assets-resources-and-assetbundles#5c7f8528edbc2a002053b5a6
Assets, Resources and AssetBundles - Unity Learn
This is a series of articles that provides an in-depth discussion of Assets and resource management in the Unity engine. It seeks to provide expert developers with deep, source-level knowledge of Unity's Asset and serialization systems. PLEASE NOTE: this t
learn.unity.com
에셋과 리소스에 관한 유니티 글