난 지금까지 쭉 '잘 만들어진 알고리즘이면 문제없이 작동한다'고 믿었지만
결국 엔진의 물리환경 내에서 돌아가는 게임인 만큼, 내가 그 세계의 규칙까지 지배할 수는 없는거 같더라.
왜 리지드바디 싫어하는 사람이 있는지 알거같음.
편리하긴 하지만, 내가 통제하지 못하는 연산을 이용하는 느낌이라서.
지금 난 관성이나 캐릭터의 미끄러짐, 바닥 접촉등 지상에서의 움직임은 내 코드로 제어하고,공중에 떠있을때의 움직임(중력, 날아감 등)이나 충돌시 서로 밀어내는 효과(지면과 겹칠시 캐릭터가 밀려나오는 등)만 리지드바디를 이용하고 있음
위 이미지를 보면 연두색 선이 콜라이더인데,
왼쪽 위가 캐릭터, 오른쪽 아래가 빗면-평지로 이어지는 지면 콜라이더임.
캐릭터가 빗면에서 평지로 올라가는 과정에서, 정확히 지금 위치에 끼어버리는 현상이 아~~~주 가끔 발생한다.
점프했다 착지하면서 바닥에 파고드는 정도에 따라 발생하는 문제.
여기서 y축 위치를 0.001만 올려도 문제없이 통과함.
잠깐 왼쪽으로 뺐다 다시 이동하면 올라가지는데, 난 이런 현상 자체가 없길 바랬음.
지금 상황에서 디버그용 코드로, 대각선 위로 LinearVelocity(5.3,5.3)을 강제로 주입했음.
이 수치는 이 기울기에서 오른쪽을 입력했을때 목표 속도임.
근데 움직이질 않아..
아마 엔진에서는 이 상태를 물리적으로 가로막고 있는 상태라고 판단하는거 같더라고.
내 계산상으로는 이 각도가 전환되는 프레임에 정확히 속도를 변환시키면 된다고 생각했는데.
이런 네모네모한 판정박스 사이에 내가 모르는 규칙이 있는거겠지..
그래서 어떻게 할거냐.
일단 캐릭터와 지면의 머티리얼이 Friction=1 / Bounciness=0 상태인데, Friction=0.95정도로 수정했다.
엄격한 코드는 원하는 움직임을 정확히 표현할 수 있겠지만, 약간의 틀어짐 만으로 가로막혀 버린다.
이제부터 0.05%정도는 유니티에게 움직임을 맡겨보려고 해..
해당 댓글은 삭제되었습니다.
이걸 그렇게 부르는구나
근데 모서리에 섰을때 미끄러지는게 싫어서 그렇겐 안했음..
@ㅇㅇ 감사용~
결정론적 물리엔진을 사용하자
유니티 캐릭터컨트롤러도 이런 원리인가? ㄷㄷ
플랫포머가 쉬워보이는데 디테일 파기 시작하면 끝도 없음
맞습니다
프레임 사이 0.1x초 되는 사이에 지면 콜라이더 안쪽으로 캐릭터가 들어가 버려서 발생하는건가?
바닥에 도달할때 속도가 물리연산에 따라 미세하게 달라서 '바닥에 박힘-겹친만큼 위로 밀려올라옴' 과정의 결과 좌표값이 달라지니까 생긴 문제같은데, 트러블을 발생하게 하는 미세한 높이 구간이 존재하는거 같음.
괜히 플랫포머 게임을 자기가 만든 물리엔진 대입하는게 아니긴함
플랫포머 게임에서 리지드바디를 어떻게든 이용해볼려고 개 똥꼬쇼를 했는데 결론은 그냥 콜라이더만 가져다 쓰고 나머지 엔진은 직접 만드는걸로 결론이 났음
@Indie1(122.40) 지금처럼 키메라처럼 섞어쓰는게 좀 그래서 전에 직접 구현해보려고 했는데, 지형이랑 겹치면 알아서 밀어서 꺼내주는 기능이 편해서 아직은 포기 못하겠더라..
@글쓴 Indie(121.139) 나도 그런 약간의 편의성 기능때문에 억지로 못버렸는데 깊게 파면 팔수록 버릴수밖에 없게 될꺼임 궁금한게 지상에서의 움직임은 모두 코드로 제어하고있다고했으면 경사에서도 너가 원하는 모션이 나와야 정상일텐데 경사에서 움직임이 멈췄다면 어떤식으로 제어하고있는거임?