안녕하세요!


오늘은 저희 게임에 거미줄에 대해서 써볼까 합니다.


거미줄은 레벨에서 길을 막는 용도로 쓰고 있습니다.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa956483e09a687c12cf72deaca193

초기버전



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564d3e2cf3220439274deaca193

개선한 버전


그런데 기획적으로 필요해서 게임에 넣었지만 비주얼이 상당히 끔찍했습니다.

그래서 다른 물건으로 대체하려고 했는데 딱히 아이디어가 떠오르지가 않았습니다.

그러던 중에 아는 후배가 예전에 Webbed라는 게임을 역공학해서 만들었던 거미줄이 기억났습니다.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564d0bcce662115c025deaca193

Webbed



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564d0e19d342515967cdeaca193

후배가 만든 버전


그래서 거미줄 소스 코드를 얻어와서 저희 게임에 맞게 수정하고 배치하는 툴도 같이 만들었습니다.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa956482b4cf3576439270deaca193

처음에는 안정적인 거미줄을 만드는데 실패했지만 여러번의 시도 끝에 튼튼한 구조를 만드는 요령이 생기게 됐습니다.

우선 가장 긴 실을 배치해 위치를 대강 잡고 중앙점에서 퍼져나가는식으로 실을 배치합니다.

그리고 퍼뜨린 실을 이어서 안정성을 확보하는 것입니다.


그 다음으로는 공격에 의해 거미줄이 끊어지는 걸 구현했습니다.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564d2b09a6377409626deaca193

처음 버전입니다. 뭔가 잘게 파편화되는 느낌이 좀 어색합니다.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564d7b0c8692141cf76deaca193

수정한 버전입니다. 파편화 되는 걸 막을 수 없다는 걸 깨닫고, 그냥 제자리에서 스케일을 줄여서 눈에 덜 띄게 했습니다.


그 다음으로는 오브젝트가 거미줄에 붙게 하는 작업을 했습니다.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564deb1cc317617c673deaca193

그런데 보시다시피 플레이어가 힘을 줬을 때 불안정하게 흔들렸습니다.

그래서 유니티 스프링 조인트로 바꿔봤습니다.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa956482b1c0607c13ce20deaca193

그런데 뭔가 더 불안정해졌습니다.

damp값을 잘못 세팅한 건지 무슨 문제인지 잘 모르겠지만, 거미줄에 물리 엔진을 쓰는 건 좋지 않은 방법같았습니다.

버그도 많이 생기고 해서 결국 기존 방법으로 다시 바꾸게 됐습니다.


몇번의 테스트 끝에 물체에게 힘을 주는 방식에 근본적인 문제가 있다는 것을 깨달았습니다.

거미줄 네트워크에서 연산된 힘을 물체에게 줘야하는데, 단순히 장력에 의한 힘을 주는 것이 문제였던 것입니다.

그래서 아래처럼 거미줄이 오브젝트에 부정확하게 힘을 줬었습니다.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564d5b69b317544917cdeaca193

그리고 이 문제를 해결하기 위해 여러 아이디어들이 있었지만, 결국 거미줄 계산 알고리즘 자체를 수정하기로 결정했습니다.

이 복잡한 코드를 분석하기는 정말 싫었지만, 정밀성이 떨어지면 거미줄이 걷잡을 수 없이 튀어버리기 때문에 어쩔 수 없는 선택이였습니다.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa956480e5ca697d49c07cdeaca193

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564dee298657448c072deaca193

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa9564d2e598652243c420deaca193

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec81fa11d02831ce3cef1b9542c00ceb084620f9a2823a99e9d4c87bd7f2587bb342e75bc32894fa956483b19b3525429177deaca193


처음에는 긴가민가했지만 예전에 비하면 상당히 안정된 상태가 됐습니다.


봐주셔서 감사합니다!



-------------이전글---------------

1편 소개

2편 괴물

3편 약탈자

4편 파편시스템

5편 대쉬퍼즐

6편 브금소개

7편 스프라이트 순서 처리

9편 대화 시스템