WinAPI RigidBody(8)

CJB_ny·2022년 10월 13일
0

WinAPI

목록 보기
74/79
post-thumbnail

오늘 배운거 👍👍👍

  • 축 별로 속도 제한 검사 => 절대값

    방향을 모르니까 음수 방향이든 양수방향이든 상관없게 하기 위해서 absolute 사용.

  • Normalize 정규화 대신에 (_velocity._x / abs(_velocity._x))

  • Enter/Stay/Exit에 문제점이 많다 현재


중력 관련 제한 속도 부터 구현

중력을 받는 오브젝트들은 좌우는 속도제한을 받고

아래로는 속도 제한을 받으면 안될듯.

근데 또 생각해보니까 떨어질때 무한히 가속 붙어서 떨어질 것은 아니다.

최대 '속력'을 제한 해놨는데

이거 실수 즉, 스칼라 값 => 방향성 정보가 없다.

이 말은 Player의 속도가 어느 방향을 가르키던 간에

길이 즉, 곧, 크기를 200으로 제한하겠다라는 말이다.

지금 x축으로의 속도 제한과 y축으로 의 속도 제한이 있고

제한 값이 각기 다르다면은

이런식으로 밑으로 아래 7시 방향으로 가는 속도의 최대 크기가

딱 한 요정도는 나와야한다.

그래서 maxVelocity를 스칼라 값이 아니라 벡터로 봐주어야한다.

x축으로는 최대 제한 속도를 200, y는 600정도.

축 별로 최대 속도 검사

를 이렇게 해주어야한다.

코드 오류 조금 수정하고 이렇게 y축도 검사를 해준다.

이제 뭐 점프만 구현을 하면 된다.

점프 다시 구현 ❗❗

점프를 누르는 순간 즉시 속도를 셋팅 해주어야한다.

힘을 주는 방식으로는 일정시간 이후부터 속도가 증가하기 때문에

점프할 때 순간적인 속도가 있어야 게임 스러운 동작이 나온다.

=> SetVelocity함수는 지금 속도 자체를 아예 셋팅을 해버리는 것이다.

그런데 이동 하는 도중에 점프 키 누르면은

X축으로의 속도값은 그대로 있고 Y축으로의 속도값이 더해져야한다.

즉, x축 유지를 하고 y로 추가가 되어야한다.

그래서 속도를 더하는 방식으로 가주어야한다.

가속도

중력 가속도를 아래 방향으로 800을 준다.

근데 이것은 가속도이지 속도가 아니다.

1초뒤에 800을 빼겠다라는 말이다.

점프를 했을 때 1000의 속도로 위로 올린다면은

1초가 지났을 때 나의 속도는 200이라는 말이다.

finalUpdate 순서

처음에 collider의 update를 먼저 도는 방식으로 구현을 해놓았는데

이렇게하면은 점프를 했었을 때 분명히

땅에 있다가 점프를 하는순간 속도를 위로 받아서 Exit가 발생을 하기는 하는데 그다음 곧바로

Enter가 발생하여 y축으로의 속도가 0으로 셋팅이 된다.

왜냐하면

gravity,rigidBody에서 움직인대로 위치를 옮겨놔도

최종위치는 아직 둘이 붙어있을때를 기준으로 충돌체크를 받은 것이다.

그러니까 collider먼저 업데이트를 돌면 여전히 충돌체크를 받는 것이다.

CollsionEnter문제점

지금 Enter/Stay/Exit에서 문제가 있는데

다음시간에 해결하도록 하겠다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글