티스토리 뷰
한동안 이런저런 기능만 계속 추가하다보니 게임 시뮬레이션이 많이 느려져서, 오늘은 한 번 최적화 작업을 진행했다. 최적화 작업 전 시점에서 시뮬레이션 한번에 약 3~4초 정도의 시간이 걸렸다.
길찾기 변경
사실 크게 길찾기가 필요한 게임은 아니나, 처음 기획 시점에서는 맵에 장애물 등의 요소가 좀 들어갈 수도 있다고 생각해서 2D 도형 기반의 길찾기를 구현해뒀었다. 그런데 개발하다보니 장애물은 딱히 들어갈 일이 없을 것 같고, AI와 인게임 시뮬레이션이 복잡해지면서 길찾기를 수행하는 횟수도 늘어나서 길찾기에 걸리는 부하가 심각한 수준이 됐다.
그래서 그냥 길찾기 안 하고 직선으로 이동하되, 서로 다른 캐릭터들이 같은 위치에 겹쳐 있으면 이상해 보이니 겹쳐 있을 때 서로 밀어내는 로직만 추가했다(물리 시스템 등에서 겹쳐 있으면 자연스럽게 밀려나듯이 밀어내는 방식). 이렇게 바꾸니 성능도 성능인데 동작도 더 자연스러워보인다. 이상하게 와리가리하는 빈도도 많이 줄어들었고..
이 최적화를 적용한 시점에서 한 경기 시뮬레이션에 걸리는 시간이 0.9 ~ 1.5초 정도로 줄었다.
Agent 최적화
이번 프레임에서 어떤 행동을 할지 결정하는 로직에서 쓸데없이 많은 연산을 하는 부분들이 꽤 있어서 이 부분들을 최적화했다. 최적화하니 0.7 ~ 1초 정도로 시간이 줄어들었다.
Event 최적화
시스템상 백그라운드에서 동작한 시뮬레이션의 결과를 이벤트의 형태로 전달하고, 이 이벤트를 기반으로 유니티에서 게임을 재생하게 된다. 그런데 플레이어가 실제로 보는 경기를 제외한 경기(다른 팀들의 경기 시뮬레이션)의 경우에는 이런 이벤트가 전혀 필요가 없다. 화면에 보이는 경기가 아니니까.. 그래서 이런 event를 생성하는 부분을 모두 백그라운드 실행의 경우엔 이벤트를 생성하지 않게 했다. 그 외에도 불필요한 메모리 할당 등이 일어나는 부분들을 전체적으로 손봤다. 이렇게 하니 0.6 ~ 0.8초 정도로 시간 감소.
LINQ 최적화
빠르게 / 쉽게 구현할 때 LINQ가 워낙 좋다보니 LINQ를 꽤 많이 사용했는데, 이게 성능 저하를 많이 가져와서 LINQ를 쓰던 부분을 수정했다. 수정하고 나니 게임 당 0.3 ~ 0.5초 정도로 감소. LINQ 쓰는 부분이 아직 좀 더 많이 남아있는데, 이런 쪽 고치면 0.1~0.2초 선까지 줄일 수 있을 것 같다. 이제 LINQ 안 써야지..
'개발 일지 > Programming' 카테고리의 다른 글
2020-07-24 유령 (0) | 2020.07.24 |
---|---|
2020-07-23 역병의사 (0) | 2020.07.23 |
2020-07-21 독침술사 마무리 (0) | 2020.07.21 |
2020-07-20 번개술사 마무리, 독침술사 공격/스킬 (0) | 2020.07.20 |
2020-07-17 번개술사 기본 공격, 스킬 (0) | 2020.07.17 |