안녕하세요!

이번에는 무기 회전 처리를 개선했던 일에 관해 써보려 합니다.


3ea9df28e0c12fa97cbbc5a504d83038460ef47b8bc63df5b62fa3c00574

저희 게임에는 다양한 종류의 무기가 등장하는데, 무기와 애니메이션에 따라서 회전 각도가 다르게 그려져 있습니다.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ce887fa1bd62531d0cd25cc589efd65fd762ec32a83e85899343fc0d8a1f586f4207683bc3f88b3fa3987ffea04b998a5b7889ee000ca509d03d2b325 viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ce887fa1bd62531d0cd25cc589efd65fd762ec32a83e85899343fc0d8a1f586f4207683bc3f88b3fa3987ffea04b998a5b78a99b5009b043230da2d8e

무기를 원하는 방향으로 들기 위해서는 스프라이트의 회전 각도와 flip등을 계산해야 했는데

별 다른 시스템이 없다보니 그때그때 하드코딩을 하면서 작업을 해왔습니다.

그러던 중, 투척 무기를 구현하다가 기존 코드가 너무 복잡하여 계산을 쉽게 도와주는 시스템을 만들기로 했습니다.



본 시스템

28b9d932f1d72bb220b8dfb336ef203e53a5838810986a21


먼저 무기 애니메이션마다 본을 심을 수 있게 했습니다.

회전 및 오프셋을 추적하는 용도이고, 시스템이 각도를 계산할 때 참고하게 됩니다.

덕분에 무기마다 존재하던 이미지와 관련된 회전값 필드들이 사라지고 코드가 전체적으로 더 단순해졌습니다.

아래의 기능들은 모두 본 시스템의 정보를 바탕으로 구현되었습니다.



모션 블랜딩 기능


29bcc32eeddb2ce87eb1d19528d52703f8bfddc6a940


원래는 회전값이 관리되지 않았기 때문에 대쉬나 피격으로 인해 공격 모션이 캔슬되는 상황에서 이미지가 튀는 현상이 발생했습니다.




2fb1d528e1db36a120b8dfb336ef203ecb25cd023914fb3db2c332ecd634a320afd8b236ef203e74a9efd2d3e6


하지만 모션 블랜딩 기능 구현으로, 서로 다른 각도의 이미지더라도 부드럽게 연결됩니다.


23b8c735f1dd36a37da8d9a7129f2334c836ae89ce067ab919933be427


튀는 현상이 사라졌습니다.





회전 관성 표현

22b1d419f6c637a86b80deb41bdc212f8c235a307aa1ca4831fe1c51da4d2ec2d723b8c735f1dd36a366bedbb813c36a3ab66f689966c428994b0c5afc650c

공격이 캔슬되었을 때, 회전 관성에 따른 회전 속도를 표현해주는 기능입니다.

본 시스템으로 코드가 단순해진 덕분에 구현하게 되었습니다.




절차적 애니메이션

3eadd534e4df39a83ff1d1bc10f11a39001325bbb527cb2e3eadd527f7df39a83cb2d9a11fde2a73b2410d1adc6be88afb1577b34c


저희 게임에 등장하는 창병의 경우, 찌르는 방향을 표현하기 위해 이미지가 캐릭터와 창으로 분리되어있습니다.

창을 들고 무언가를 찌른다면 일반적으로 양손을 사용할텐데, 창의 각도에 따라 반대쪽 팔의 모습이 바뀌지 않으면 보기에 어색합니다.

기존엔 반대쪽 팔을 그냥 슬쩍 생략했었는데, 본 시스템과 기존에 만들었던 동적인 픽셀 오브젝트 효과를 결합해 이를 표현할 수 있게 되었습니다.



읽어주셔서 감사합니다!


+
혹시 저희 게임에 관심이 있으시다면 스팀 페이지(링크)에 방문해주세요!
옛날 개발일지도 약간 다듬어서 올리고 있습니다.