본문 바로가기

유니티 게임 개발하기/2D 게임 개발일지

유니티 - 탄막 슈팅 게임을 만들자 (6), 충돌, 그 불필요한 연산을 삭제하기. 연출을 사용하자!

안녕하세요! 윈디입니다.

지난 시간에는 프레임 드랍을 해결하기 위해 프로파일러를 확인하고 문제점을 찾아서 해결하는 법을 공부해 보았는데요,


며칠 더 코드를 다듬다 보니, 이런 방법도 있다! 라는 것을 생각해 내서 새로이 포스트를 작성하게 되었습니다!


이 방법은 생각보다는 적용범위가 제한적인 방법이기에,  일반적인 방법이라기 보다는, 게임을 만드시다가 사용할 수 있는 꿀팁 정도로 생각하시면 될 거 같아요!


지난번에 사용했던  아이템 흡수를 예로 들어 볼게요.


충돌시간을 분산시킴으로서 어느정도 문제를 해결하는 듯 했으나..  

몇몇 상황에서는 (플레이어의 위치에 따라)

아이템끼리 많이 겹칠 경우에 렉이 나게 되더라구요. 그래서 새로운 해결책을 생각해 보는 와중에 생각이 떠올랐습니다.

일단 유저들이 게임 안에서 보는 것은 흡수가 된다는 이펙트일 뿐, 실제로 게임 내에서 그 연산을 여러번 수행할 필요가 없다는 것이죠.


수정하기 전의 연산 순서입니다.


아이템 흡수 콜라이더 <CircleColider2D()>

-> 아이템과 충돌 -> 아이템은 absorbing 상태(흡수 되는 상태) 로 전환 

-> 플레이어에게로 이동 (이 과정에서 아이템들이 많을 경우 아이템끼리의 충돌이 많이 발생합니다. 불필요한 연산이죠.)

->아이템의  <CircleColider2D()> 가 플레이어와 충돌 -> 플레이어는 아이템의 정보를 받아 해당 아이템의 효과를 얻음 


그러나 사실, 유저들에게는 이런 과정이 실제로 있는지 없는지는 크게 중요하지 않습니다. 아이템 흡수 콜라이더가 아이템을 흡수만 하면 되는 것이기 때문에, 저는 이 과정을 다음과 같이 수정하게 됩니다.


아이템 흡수 콜라이더 <CircleColider2D()> 

-> 아이템과 충돌 

-> 플레이어는 아이템의 정보를 받아 해당 아이템의 효과를 얻고, 

아이템은  <CircleColider2D()> 를 enable= false; 로 조정.

(추가적인 충돌연산을 방지하기 위함입니다. 

사실 아이템들이 플레이어에게로 모이면서 자기들끼리 충돌하는 것이 가장 렉이 심하니까요.) 

충돌할 수 없는 상태로 전환 후 플레이어 쪽으로 점점 투명해지면서 이동하다가 자연스럽게 삭제.




이렇게 조정하면, 아이템은 아이템흡수 콜라이더와 부딛히면 추가적인 충돌 없이 자연스럽게 흡수되는것처럼 보이게 됩니다.



어떠신가요? 딱히 달라진 것이 없죠?

그렇지만 프로파일러를 돌려 연산을 확인해 보면...

이전 :



현재: (파란색이 가장 높은 지점이 흡수할 때입니다)



특히 Physics, 그러니까 물리 연산 쪽에서

엄청난 퍼포먼스 차이를 보이고 있습니다! 실제 충돌이 엄청나게 줄어들었기 때문이죠!

 정말 만족스럽네요~!

다음부터는 이제 드디어 실제 스테이지와 UI를 꾸며야 할 거 같습니다.

모두 즐거운 하루 되세요!