odyssey

#19 odyssey 개발일지 : 캐릭터 컨트롤러 버그 수정

san10 2024. 1. 14. 00:22

지금까지 5달 동안 글을쓰지 않았는데..

정글 게임랩에서 게임만들고 있었다..

그래서 에픽 프로젝트에서 BoardLand라는 게임을 만들어서 출시했다...

https://store.steampowered.com/app/2735620/BoardLand/

 

BoardLand on Steam

BoardLand is a turn-based strategy board game where you use the numbers rolled by dice to grow your own board and battle monsters.

store.steampowered.com

BoardLand에서 프로그래밍&아트를 했었는데,

자꾸 사람들이 오리키우기 같다고 한다..

 

어쨌든 출시하고 나서 좀 여유가 생겼고

정글 게임랩이 거의 끝나서 odyssey를 계속 개발하기로 했다.

정글 게임랩 하면서 느낀게, 코어 플레이를 빨리 만들어서 테스트를 해봐야 겠다는 생각이 들어서

캐릭터 컨트롤러를 좀 수정했다.

 

기존의 버그

https://san10.tistory.com/43

 

#17 odyssey 개발일지 : 캐릭터 움직임 수정

맨 처음에 게임을 기획했을땐 알토의 모험처럼 곡선의 지형을 따라 움직이는 거였는데.. 생각해보니 그럼 너무 알토의 모험과 비슷해지는 것 같아서.. 캐릭터 조작 방식을 바꿨다. 지형을 따라

san10.tistory.com

 

여기서 캐릭터 컨트롤러에 문제가 있다고 했는데,

정확히 무슨 문제냐면 갑자기 멈칫하거나 아예 멈추는 문제가 있었다..

 

움짤에서는 멈칫하는 정도지만 심하면 아예 멈추기도 하고

이런 현상이 많이 일어났다..

콜라이더 관련 문제라고 생각했고, 아예 멈췄을 때 콜라이더를 보면 약간 낑겨있었다..

그래서 관련해서 검색을 좀 해봤는데 생각보다 자주 있는 현상인 것 같다.

특히 이 프로젝트처럼 콜라이더가 여러게 나란히 있을때 (예를 들어 타일맵 콜라이더..)

이런 현상이 많이 일어나는 듯 했다

 

이것과 관련해서 충돌 체크에 대한 글 하나를 찾았는데..

https://www.iforce2d.net/b2dtut/collision-anatomy#cornervscorner

 

Anatomy of a collision - Box2D tutorials - iforce2d

Box2D C++ tutorials - Anatomy of a collision Last edited: May 07 2014 Chinese version -> 中文 Russian version -> русская версия What's in a collision? In Box2D it's common to think of bodies colliding with each other, but it's really the fix

www.iforce2d.net

요약하자면 충돌이 발생해서 겹치게 되면

서로 (아마) 노말벡터 방향으로 밀어내게 되고 그렇기에 서로 겹치지 않는 건데..

 

이것과 관련해서 왜 낑기는지에 대한 글도 있다.

https://www.iforce2d.net/b2dtut/ghost-vertices

 

Ghost vertices - Box2D tutorials - iforce2d

Box2D C++ tutorials - Ghost vertices Last edited: July 14 2013 Chinese version -> 中文 (Note: This topic doesn't really fit in too well with the rest of the tutorial topics because they are based on Box2D v2.1.2 which does not have edge shapes. I kinda f

www.iforce2d.net

콜라이더가 충돌 체크하는 과정에 따르면 원래 땅과 플레이어가 서로 밀어내기 때문에

직선으로 가는 것 처럼 보이지만 사실은 약간씩 위아래로 흔들린다.

이렇게..

따라서 이렇게 가다가 새로운 콜라이더 박스를 만나면 다음과 같이 겹치는 상황이 생길 수도 있다.

왼쪽처럼 수평 방향으로 많이 겹치면 위아래 방향으로 밀어내니깐 크게 문제되지 않지만,

오른쪽처럼 수직 방향으로 많이 겹쳐서 수평방향으로 서로 밀어내면.. 

낑기게 된다..

 

그래서 저자가 이 문제를 해결하기 위한 여러 방안을 제안하는데..

하나는 둥그런 콜라이더를 쓰는 것이다

동그란 콜라이더를 쓰면 확실히 수평방향으로 밀어내는 현상은 적어지니깐

덜낑기기는 하던데..

이전에 글 썼던 것과 같이 요상한 방향으로 튕기는 버그가 있다.

 

그래서 저자 포함 많은 사람들이 edge collider를 쓰라고 하던데..

edge collider를 쓰면 낑기거나 튕기는 현상이 현저히 줄어든다!

 

사실 저 글의 저자도 정확한 이유는 모르겠다고 했는데

추측하건데 edge collider를 쓰면 box collider나 polygon collider와 달리 노말 벡터 방향이 하나라서

(odyssey에서는 point를 2개만 쓴다)

이런식으로..

 

애초에 오른쪽과 같이 수평방향으로 밀어내는 현상이 잘 안생기는 것 같다.

그리고 edge collider를 위 그림처럼 직선으로 안만들고 동그랗게 만들면

요상한 방향으로 튕기는 버그가 또 생기는 걸로 봐서는 맞는것 같기도 하다

(라고 정글게임랩 동료분이 말해주셨습니다..)

 

어쨌든 전과 비교해서 더 안정적인 플레이가 가능해졌다

 

 

결론 : 켑슐 콜라이더 -> 박스 콜라이더 -> 엣지 콜라이더