플랫폼과 플레이어가 충돌할 때
플레이어의 좌표가 플랫폼보다 위에 있으면 착지 아니면 충돌해서 떨어지는 처리를 하려고 하는데요
델타타임이 길어지면 착지를 할 때도 플레이어의 좌표가 중력 영향을 받으면서 플랫폼의 좌표보다 낮아져서 문제가 생기지 않을까요?
플랫폼과 플레이어가 충돌할 때
플레이어의 좌표가 플랫폼보다 위에 있으면 착지 아니면 충돌해서 떨어지는 처리를 하려고 하는데요
델타타임이 길어지면 착지를 할 때도 플레이어의 좌표가 중력 영향을 받으면서 플랫폼의 좌표보다 낮아져서 문제가 생기지 않을까요?
유니티면 fixed update 횟수가 보장 안될정도로 게임이 심각하게 무거워지거나 말도 안되게 초당 반복횟수를 높이는 바보짓만 안하면 발생할일 없음 만약 그런 증상이 나타나면 다른 방법 찾던지 게임 잘못만든거니 갈아엎어야지
유니티가 아니고 winapi긴 한데 fixed update 구현했으면 문제가 안생길까요?
winapi 로 뭐 해본적 없어서 모르겠는데 직접 만드는거면 만들어보고 테스트하면서 예상했던 일이 발생하는지 확인 후 수정하는게 좋아보임
fixed update를 구현하는법부터 알아야겠네요 감사합니다
collider를 쓰지 않고 커스텀 스크립트로 충돌처리를 하겠다는거임?
collider를 구현해서 collider의 높낮이로 충돌처리를 하려고 하는데 잘못된건가요?
유니티가 아니면 ㅁ?ㄹ 알아서 구현해야지
박스 위에 바닥부분에 콜라이더를 만들어서 그 위면 착지 아니면 떨어짐 하면되는거아니냐
그 부분은 플랫폼.y - 플랫폼크기.y/2 하면 될거같아요
fixed update를 구현했으면 프레임 타임은 상관없지
틱 간격 벌어지면 그냥 넘어갈지 지연된 시간에 고정 시간 나눠서 횟수 만큼 호출 해주는지 차이인데 유니티에서도 데이터 처리에 픽스드 써야하는 이유임
유니티에서 리지드바디나 콜라이더 같은건 픽스드 업데이트에서 해주는건가요?
개발자가 어디서 처리 할지는 자기 맘이긴 한데 유니티 내장 컴포넌트 중에 물리 관련된 건 픽스드 따라감 리지드 바디로 이동되는 거나 콜리전 콜백 같은 거
오브젝트가 매우 빨라서 플랫폼을 뚫어버리는 케이스가 아니라면 아무 문제도 생기지 않습니다 왜냐면 좌표갱신이 입력 다음 프레임에 이뤄지거든요 아주 단순한 예로 움직이는 오브젝트를 벽에 비벼보면 아예 꼼짝도 안합니다
프레임마다 물리 충돌 검출이후에 플레이어의 트랜스폼의 좌표값을 수정하거든요
그럼 다음 프레임에서는 갱신된 프랜스폼의 좌표값 기반으로 먼저 물리충돌 검출이후에 동작하고요 만약 겹쳐진다면 물리검출단계에서 좌표값을 적절히 정상적으로 수정합니다 저도 물리엔진 메커니즘에 대해 정확히 알진 않습니다만
근데 이거는 일반적인 케이스는 아닐거 같네요 fixedUPdate()의 주기와 프레임이 아예 같을때 이야기라
프레임 지연으로 인해 델타타임값에 따라서 오브젝트의 좌표 갱신이 비정상적으로 되는 문제
이로 인해 오브젝트가 아예 벽을 뚫는 문제가 생길수 있습니다
1.RigidBody 컴포넌트의 충돌보간 속성을 적절히 조정한다
2.위 댓글들대로 fixedDeltaTime(유니티 시간 기준 픽스드업데이트 호출주기)값을 적절히 준다