(유니티3D)비동기 씬 로딩에 대해2
저번에 이어 해결하지 못 했던 문제를 계속 붙잡아 봤습니다.
결론부터 말하면 해결은 하나도 된게 없습니다. 대신 몇 가지 알아낸 것들이 있어서 그거에 대해 적고 그 다음엔 아마 최적화 관련해서 또 적을거 같습니다.
여기서 적는건 대부분 프로파일러를 참고한 추측과 다른 분들의 블로그를 참고하여 작성하는거라 100% 장담은 못합니다.
먼저 비동기 로딩 중 아예 멈춰있는 것에 관해서는
SceneManager.LoadSceneAsync을 이용하여 비동기 씬 로딩을 진행할 시 유니티는 불러오려는 씬의 오브젝트, 에셋, 스크립트 Awake 등을 로드합니다.
현재 Icicle Game의 로딩시간은 너무나도 짧고 쉽게 강제로 시간을 늘릴 수 있는 부분이 스크립트 부분이라 Awake에 무의미한 반복문을 왕창 돌려본 결과 스크립트의 Awake 로딩은 씬 로딩 과정 중 가장 마지막에 행해지는것 같습니다.
AsyncOperation.progress가 0.9가 되면 사실상 로딩 완료나 다름없는 경과 수치인데 이 상태에서 스크립트 로딩을 하는 것을 보니 생각된 추측입니다.
혹시나 싶어 여러 오브젝트에 더미 스크립트를 막 넣어놓고 해봤는데도 다르지 않습니다. 그냥 스크립트 Awake 로딩을 통째로 묶어 로딩을 하나봅니다.
그리고 컴퓨터에서 로딩을 확인하면 0%에서 99%로 바로 바뀌지만 모바일에서 확인 시 10~20% 사이의 숫자가 잠깐 보이는 것으로 보아, 그리고 위에서 스크립트 실험으로 보아 추측되는 것은 큼직큼직한게 끝날때마다 그 사이에 출력 프레임이 껴있으면 (보통 60프레임 간격) 그 틈새에 다른 동작이 실행되는거 같습니다. 여기서는 동전이 돈다던지
근데 그 큼직큼직의 기준도 잘 모르겠고 애초에 로딩이 스크립트 빼면 1초도 안 걸리니 스크립트 외엔 비동기가 잘 되는지 파악이 불가능해서 좀 더 이런저런 테스트를 더 해봐야 할거 같습니다.
tree-sha로 테스트 하면 딱인데 저 게임은 쉐이더랑 라이팅이랑 별게 다 되있어서 빌드가 너무 오래 걸리는지라...
이렇게 된거 tree-sha을 좀 분해해 보든지 이 겜의 스케일을 키우든지 다른 방법을 찾든지 해서라도 만족할만한 결과를 얻을때까지 삽질을 계속 해봐야겠네요.
이것과는 별개로 로딩때 프로파일러를 보니 가비지가 생각보다 꽤 높은 비율을 차지하더군요.
그리고 동시에 다른 프로그래머 분들 블로그를 돌아다니다보니 예전엔 잘 이해가 가지 않았던 각종 최적화 기법들이 이젠 눈에 들어오기 시작했구요.
그래서 사소한 곳 하나하나 가비지를 없애보려고 해봐야겠습니다.
'Icicle Game (2D) > 발전' 카테고리의 다른 글
1.02버전 업데이트 (0) | 2017.12.11 |
---|---|
패치 예정 (0) | 2017.12.11 |
(유니티3D)OnCollisionEnter/Stay/Exit 사용시 주의점 (0) | 2017.12.11 |
(유니티3D)비동기 씬 로딩에 대해3 (0) | 2017.12.09 |
(유니티3D)비동기 씬 로딩에 대해 (0) | 2017.12.08 |