Mini_Project/Assets/Project/2D_3D_Collision(Complete)/README.MD at main · JeongTaeWoong99/Mini_Project
미니 프로젝트 및 유니티 스킬 학습. Contribute to JeongTaeWoong99/Mini_Project development by creating an account on GitHub.
github.com
프로젝트를 진행한 이유
데이브 더 다이버를 플레이해보고, 2D와 3D 충돌을 어떻게 구현했는지 궁금한 점이 생겼다.
예전에 한번 시도해 봤다가, 실패하고, 다시 한번 시도를 해봤다.
구현 방법을 찾아보다가, 예전에 유니티 'U Day Seoul'에서 민트 로켓(MINTROCKET)의 변순항 소프트웨어 엔지니어께서 강연을 한 것을 발견했다.
그런데, 아쉽게도 영상은 남아있지 않아서, 기사를 참고해서, 한번 프로젝트를 진행해 보았다.
기사 분석
'데이브 더 다이버'의 상어가 데이브를 물어뜯기까지 3단계 | 웹진 인벤
넥슨의 서브 브랜드 '민트로켓'에서 개발한 '데이브 더 다이버'는 작년부터 지금까지 국내 게임계에서 화제를 이어오고 있는 작품이다. 출시 이후 300만 장 이상 판매량을 기록했을 뿐만 아니라,
m.inven.co.kr
기사를 분석해서 2D와 3D 충돌 구현에서 어떤 문제가 있었는지?
어떻게 해결을 하였는지?
소스를 얻을 수 있었다.
요약하자면
1. 콜라이더 교차 배치
2. 3D 콜라이더를 2D 평면으로 이동
3. 스케일 보정
이렇게 요약이 가능할 것 같다.
(자세한 내용은 깃허브와 기사를 참고하길 바란다.)
구현
기사 소스를 기반으로 프로젝트 세팅을 하고, 스크립트 구현했다.
핵심 로직을 짜는데, 어려움이 있었지만 클로드의 도움을 받아서, 기본 틀을 만들고, 수정을 해 나가면서 구현할 수 있었다.
그 밖에도, 여러 가지 버그가 있었는데, 하나하나 해결해 나갔다.
그런데, 해결이 안 되는 버그가 있었는데, 오랜만에 유니티 포럼에 질문해서 해결할 수 있었다.
문제에 대해 간단하게 요약하자면, 유니티 2D 콜라이더의 경우 Z축으로만 회전해야 하는데, X축이나 Y축으로 회전하다가 90도가 되면, 콜라이더가 완전히 작아져서 사라진다.
이런 경우, 유니티에서는 콜라이더에 경고를 보내는데, 내부적으로는 ''NaN이나 0으로 나누기 또는 기타 바람직하지 않은 부작용을 방지 "를 위해서, 콜라이더의 위치와 크기를 초기화 시켜버린다.
그래서, 사진과 같이, 상어들이 회전을 하면서 이동하다가 X축이나 Y축의 회전값이 90이 될 때, 유니티 내부적으로 부작용 방지를 위해서, 콜라이더를 초기화 시켜버려, 중앙에 박스가 깜빡깜빡 켜졌다 사라졌다 하는 문제가 생기는 것이다.
이는 깃허브 주요 기능 4번을 통해, 해결하였다.
예전에는 유니티 포럼에 자주 질문했던 것 같은데... CHAT GPT 같은 게 많이 나오고 나서는 질문을 많이 하지 않은 것 같다. 그래도 역시 유니티 포럼 고수 형님들의 실력이 최고인 것 같다.
마무리
간단하게 미니 프로젝트를 진행해 보니 재미있다.
물론 데이브 더 다이버의 구현처럼 완벽한 구현이 아니지만.... 간단하게나마 느낌은 내볼 수 있었다.
역시 게임 만드는 게 제일 재미있다....
다음에도 어떻게 구현했나 궁금한 게 생기면, 또 미니 프로젝트로 구현해 볼까 한다.