1. UI Prefab 미리 로딩하기



UI구조를 꽤 많이 뜯어고쳐야할 줄 알았는데 기존에 의외로 인스턴시에이트해야하는 UI프리팹을 담을 Parent의 Start()에서 인스턴시에이트를 하고 있었기 때문에


그냥 그 Parent객체를 UI로딩 이전에 SetActive(true)해주는 것만으로 되는 것 같네요


그래서 큰 코드 변경없이 간단히 처리한 것 까진 좋았는데 대신에 로딩창이 껌뻑거리고 난리가 난 ㅋㅋㅋㅋ


지금은 로딩 스크린은 3D화면 사용중인데 2D로 바꾸는걸 검토해봐야겠어요


AFK journey같은 갬성적인 로딩화면 만들고 싶었는데...


11



2.쉐이더 성능?


아직은 많이 생소한 프로파일러를 켜서 여러가지 프로파일링 테스트를 해보았는데 새로 사용 중인 유니티 툰 쉐이더가 병아리들 Batching 처리를 못해주는걸 알게되었습니다


옵션에 배칭 설정이 있었던것 같은데 왜??....  3D는 같은 매터리얼 써도 배칭이 안되는건가? 흠...


아래 보면 병아리를 하나하나 다 그리고 있죠. 그림자는 ㄹㅇ fake shadow로 바꿔야할듯요


7dec9000f7d335a32e9bd3b703d623385ac09b4785dd511b0255b9b5beb26620dc71240662aabe57da112d1d2f684cb0


혹시 몰라서 다른 가벼운 툰 쉐이더를 몇개 깔아보았는데 전부 렌더링이 안되서 투명 병아리를 만들어버리더라는...


아마 URP 에셋 설정이 뭔가 꼬인 것 아닌가 싶은데 이걸로 또 몇 주 날리겠네요 ㅎ....


13



3. URP 옵션 조정


Depth Priming Mode를 Forced로 바꾸는 것은 로우폴리 툰쉐이딩에서 그래픽에 영향을 거의 주지 않으면서 FPS 3~5정도의 개선 효과를 주는 것 같아요


FPS가 3~5면 별거 아닌걸로 보일 수 있지만 현재 FPS 15~25 수준인 보닌쟝 께임에서는 무려 15%이상의 어마어마한 개선이네요 ㅋㅋㅋㅋ 알려주셔서 ㄳㄳ 


21


이것도 그렇지면 URP에 워낙 설정값들이 다양해서 쉐이더 바꿔가며 어떻게 바뀌는지 테스트를 해봐야할 것 같습니다



4. Deep Profiling 성능감소가 의외로 적었다


NHN의 Game Packagae Manager를 깔고 돌려보았는데 에디터 연결해서 Deep Profiling을 할 때와 안할때 FPS차이가 5~10정도 나왔네요


아마 워낙에 사용중인 폰이 허접해서 많이 개선되지는 못하는게 아닐까 추측 해봅니다


어쨌거나 생각보다 FPS개선이 없어서 희망이 다시 없어져버렸어요 ㅋㅋㅋㅋㅋㅋㅋ


루22



5. 유니티 최적화 영상 보는 중


프로파일러 사용법을 잘 몰라서 유니티 강좌를 듣는 중입니다 의외로 기능이 다양하게 많네요


https://www.youtube.com/watch?v=d_0uDfNEOk8&list=PLO5TRuOM6cK0jbY7UqSP8cVbrhUR-Vf7c


제대로 만든 첫 게임이다보니 UI쪽이 엉망진창일거라고 생각하고 있었는데 프로파일러나 오버드로우를 확인해봤는데 의외로 나쁘지 않게 보였습니다


하지만 제가 까막눈이라 뭘 몰라서 그럴 수도 있어서 계속 지켜봐야할 것 같아요 ㅋㅋㅋㅋ 


루11



6. 화면에 안보이는 객체 Update()연산 줄이기


지난주던가 갤에서 안보이는 객체 Update()도 줄이는것도 팁이라고 해서 챗GPT에게 물어봤더니 모노비헤비어에 OnBecameVisible()과 OnBecameInvisible()이라는 이벤트함수가 있으니 그걸 활용하면 된다길래 해봤는데 전혀~~ 호출이 되지 않았어요 ㅋㅋㅋㅋㅋㅋ

다른 방법으로는 렌더러에 isVisible이란 변수가 있으니 그걸 활용하라는데 LOD를 사용하다보니 한 동물당 렌더러가 4개씩 붙어있어서 매번 렌더러를 4개씩 확인해야 하는데 루프를 돌리기는 싫으니 그냥 무식하게 isVisible 변수를 다음과 같이 하나 만들어 주었습니다


bool isVisible => renderers[0].isVisible || renderers[1].isVisible || renderers[2].isVisible || renderers[3].isVisible; // ㅋㅋㅋㅋㅋㅋㅋㅋㅋ


void Update() {

    if(isVisible) return;

}


이게 얼마나 성능에 기여를 할지는 모르겠지만 어쨌거나 마음이 편하긴 하네요 ㅋㅋㅋㅋ


13


7. 다음 작업계획


일단 현재로서는 렌더링 쪽이 가장 부하를 많이 먹고 있어서 예쁘게 보이면서 성능도 덜 먹는 툰쉐이더를 찾는 것을 가장 우선적으로 검토해봐야할 것 같습니다


병아리들 배칭이 잘 안되면 병아리나 닭, 오리같이 작은 동물은 GPU 인스턴싱적용하는 것을 고려해봐야겠어요. 예전 기억으로는 동물 하나당 게임 용량이 10메가 정도 늘어났던걸로 기억하는데 LOD를 줄이면 좀 나아지려나... 어차피 이미 350메가 넘었으니 350메가나 400메가나 그게그거 아닌가?!! 라는 마인드로 ㅋㅋㅋ


그 외에 캔버스를 용도별로 4개인가 5개씩이나 쓰고 있는데 이것도 좀 구조조정해봐야할 것 같네요


병아리 그림자를 Fake Shadow로 바꾸고 캐릭터 얼굴 이미지 같은건 아틀라스로 바꾸는 작업도 약간의 개선이 가능할 것 같은데 이건 나중에 해야겠어요

이미지를 언제 또 바꿀지 모르는 상황이라.... 유니티 최적화 강좌를 좀 더 보면서 어느 부분을 좀 더 최적화 할지 고민해볼 생각입니다 


23