난 지금까지 쭉 '잘 만들어진 알고리즘이면 문제없이 작동한다'고 믿었지만

결국 엔진의 물리환경 내에서 돌아가는 게임인 만큼, 내가 그 세계의 규칙까지 지배할 수는 없는거 같더라.


왜 리지드바디 싫어하는 사람이 있는지 알거같음.

편리하긴 하지만, 내가 통제하지 못하는 연산을 이용하는 느낌이라서.

지금 난 관성이나 캐릭터의 미끄러짐, 바닥 접촉등 지상에서의 움직임은 내 코드로 제어하고,

공중에 떠있을때의 움직임(중력, 날아감 등)이나 충돌시 서로 밀어내는 효과(지면과 겹칠시 캐릭터가 밀려나오는 등)만 리지드바디를 이용하고 있음



29b9d422e1d676b660b8f68b12d21a1d48bffff4fd


위 이미지를 보면 연두색 선이 콜라이더인데,

왼쪽 위가 캐릭터, 오른쪽 아래가 빗면-평지로 이어지는 지면 콜라이더임.


캐릭터가 빗면에서 평지로 올라가는 과정에서, 정확히 지금 위치에 끼어버리는 현상이 아~~~주 가끔 발생한다.

점프했다 착지하면서 바닥에 파고드는 정도에 따라 발생하는 문제.

여기서 y축 위치를 0.001만 올려도 문제없이 통과함.

잠깐 왼쪽으로 뺐다 다시 이동하면 올라가지는데, 난 이런 현상 자체가 없길 바랬음.


지금 상황에서 디버그용 코드로, 대각선 위로 LinearVelocity(5.3,5.3)을 강제로 주입했음.

이 수치는 이 기울기에서 오른쪽을 입력했을때 목표 속도임.


근데 움직이질 않아..

아마 엔진에서는 이 상태를 물리적으로 가로막고 있는 상태라고 판단하는거 같더라고.

내 계산상으로는 이 각도가 전환되는 프레임에 정확히 속도를 변환시키면 된다고 생각했는데.

이런 네모네모한 판정박스 사이에 내가 모르는 규칙이 있는거겠지..


그래서 어떻게 할거냐.

일단 캐릭터와 지면의 머티리얼이 Friction=1 / Bounciness=0 상태인데, Friction=0.95정도로 수정했다.


엄격한 코드는 원하는 움직임을 정확히 표현할 수 있겠지만, 약간의 틀어짐 만으로 가로막혀 버린다.

이제부터 0.05%정도는 유니티에게 움직임을 맡겨보려고 해..