안녕하세요!
오늘은 저희 게임에 거미줄에 대해서 써볼까 합니다.
거미줄은 레벨에서 길을 막는 용도로 쓰고 있습니다.
초기버전
개선한 버전
그런데 기획적으로 필요해서 게임에 넣었지만 비주얼이 상당히 끔찍했습니다.
그래서 다른 물건으로 대체하려고 했는데 딱히 아이디어가 떠오르지가 않았습니다.
그러던 중에 아는 후배가 예전에 Webbed라는 게임을 역공학해서 만들었던 거미줄이 기억났습니다.
Webbed
후배가 만든 버전
그래서 거미줄 소스 코드를 얻어와서 저희 게임에 맞게 수정하고 배치하는 툴도 같이 만들었습니다.
처음에는 안정적인 거미줄을 만드는데 실패했지만 여러번의 시도 끝에 튼튼한 구조를 만드는 요령이 생기게 됐습니다.
우선 가장 긴 실을 배치해 위치를 대강 잡고 중앙점에서 퍼져나가는식으로 실을 배치합니다.
그리고 퍼뜨린 실을 이어서 안정성을 확보하는 것입니다.
그 다음으로는 공격에 의해 거미줄이 끊어지는 걸 구현했습니다.
처음 버전입니다. 뭔가 잘게 파편화되는 느낌이 좀 어색합니다.
수정한 버전입니다. 파편화 되는 걸 막을 수 없다는 걸 깨닫고, 그냥 제자리에서 스케일을 줄여서 눈에 덜 띄게 했습니다.
그 다음으로는 오브젝트가 거미줄에 붙게 하는 작업을 했습니다.
그런데 보시다시피 플레이어가 힘을 줬을 때 불안정하게 흔들렸습니다.
그래서 유니티 스프링 조인트로 바꿔봤습니다.
그런데 뭔가 더 불안정해졌습니다.
damp값을 잘못 세팅한 건지 무슨 문제인지 잘 모르겠지만, 거미줄에 물리 엔진을 쓰는 건 좋지 않은 방법같았습니다.
버그도 많이 생기고 해서 결국 기존 방법으로 다시 바꾸게 됐습니다.
몇번의 테스트 끝에 물체에게 힘을 주는 방식에 근본적인 문제가 있다는 것을 깨달았습니다.
거미줄 네트워크에서 연산된 힘을 물체에게 줘야하는데, 단순히 장력에 의한 힘을 주는 것이 문제였던 것입니다.
그래서 아래처럼 거미줄이 오브젝트에 부정확하게 힘을 줬었습니다.
그리고 이 문제를 해결하기 위해 여러 아이디어들이 있었지만, 결국 거미줄 계산 알고리즘 자체를 수정하기로 결정했습니다.
이 복잡한 코드를 분석하기는 정말 싫었지만, 정밀성이 떨어지면 거미줄이 걷잡을 수 없이 튀어버리기 때문에 어쩔 수 없는 선택이였습니다.
처음에는 긴가민가했지만 예전에 비하면 상당히 안정된 상태가 됐습니다.
봐주셔서 감사합니다!
-------------이전글---------------
9편 대화 시스템
해당 댓글은 삭제되었습니다.
멋지긴한데 구리다, 알고리즘 안쓰는게 더 나은 것 같다
그렇게 생각할 수도 있군요. 의견 감사합니다.
크!! 최고입니다!
크... 감사합니다.
오.. 어떻게 거미줄 그리고 계산하는지 간단하게라도 알려주실 수 있으신가요??
거미줄은 버텍스와 라인으로 구성됩니다. 버텍스의 경우 damped string 공식으로 매 프레임 위치와 속도를 갱신하고, 라인은 유니티 라인렌더러로 그렸습니다. 사실 안정화시키기 위해서 룽케 쿠타방법같은 계산을 정확하게 해주는 알고리즘을 도입하면 좋은데, 거기까지는 못하고 그냥 iteration을 늘리는 방향으로 했습니다.
오 감사합니다 - dc App
iteration을 돌리면 계산이 꽤 무거워지지않나요?? 모바일버전으로도 준비중이신걸로 아는데 문제 없을 정도로 연산하려면 몇번정도돌리시는건가요?
네 저희도 퍼포먼스에 대해서는 처음부터 걱정이 좀 있었습니다. 그래도 캐시미스를 고려해서 iteration 코드를 작성하니 생각보다 빨라서 그 점은 다행이였는데, 그래도 카메라 바깥으로 벗어나면 계산을 멈춘다던가 물체가 붙어있지 않는 거미줄은 iterartion을 줄인다던가 해서 최대한 줄이고 있습니다. 보통 iteration을 2로 해도 괜찮았는데 물체가 붙을 때는 10정도로 늘리고 있습니다.
개고수
거미줄같지가 않고 뭔가 고무줄같음. 그리고 플레이어 피로도도 많이 쌓일거같은데 이대로 괜찮은건가 ??
거미줄은 원래 힘없이 끊어져야 정상인데 게임적 허용으로 세게 잡아당기도록 만들게 됐습니다. 그래도 무기로 한방에 벨 수 있으니 플레이어가 멋지게 베어넘기며 지나가는 플레이를 의도했습니다.
구덩이에서 거미줄에 걸린 모습이 사실적이어서 플레이할 때 짜릿할 거 같음 거미 보스 같은걸로 괴롭혀 주면 좋겠다 ㅋㅋ 사실적인 모양새가 나와서 성공적인거 같은데 ? ㅊㅊ
ㅋㅋ감사합니다. 저희도 거미줄을 만들다보니 왠지 거미 보스가 나와야할 것 같다는 생각을 하게 됐네요.
rornth
tkark!
오 데모 방금 해봤는데 느낌이 좋네요. 기대됩니다!
플레이 해주셔서 감사합니다! 재밌게 하신 것 같아 다행이네요. 기대에 부응할 수 있도록 노력하겠습니다ㅋㅋ
경기 오디션때 잠깐 뵈었는데 성과 내면서 꾸준히 이어가는 모습 멋집니다. 우리 팀은 비록 잘 안되었지만 프로스토리 팀은 좋은 결과 내시길 응원하겠습니다.
응원 감사합니다... 예전부터 로그리아 일지를 보면서 기대했었는데, 잘 안돼서 저도 좀 아쉬웠네요... 같이 화이팅해봅시다
개쩐다 - dc App