Rigidbody의 Gravity가 수평 이동 속도를 따라잡지 못해 내리막길에서 튕겨지는 현상
Capsule Collider로 인한 턱 있는 경사로 진입 불가
경사면을 해결하기 위한 방법
경사면을 해결하기 위한 방법
Floating Capsule and Normal
"Floating Capsule"
플로팅 캡슐은 플레이어에게 어떠한 방식으로 힘을 줘서, 캡슐이 지속적으로 떠 있게 하는 방식입니다. 즉, 캡슐의 중심이 지면에서 일정 거리를 유지하는 것입니다.
이를 크기 조정이 가능한 Capsule Collider와 혼합하여 플레이어가 특정 높이까지 계단을 오를 수 있도록 할 수 있습니다.
"Normal"
플레이어 아래에 있는 지면의 법선을 가져오고, 해당 법선을 기준으로 플레이어 방향을 설정하는 작업입니다. 단순하게 Normal은 개체가 향하는 방식이므로, 계단 오르기 등의 문제 해결이 되지는 않습니다.
그렇다면 우리는 "Floating Capsule"에 Slider 기능을 통해 아래쪽에 높이를 제거하고, 플레이어가 중력으로 떨어지지않도록 할것입니다.
이 "0 ~ 1"로 이동하는 슬라이더가 Inspector에서 업데이트 될 때마다 충돌체 높이를 계산하게 할 것입니다.
이를 위해서 우리는
Capsule Collider Uitility (Ref) => 참조
Capsule Colider Data => 캡슐 데이터
Default Collider Data => 기본 데이터 (플레이어에 대한 데이터)
Slop Data => 슬라이더: 아래쪽에 높이를 제거하는 백분율 코드.
전부 스크립트 파일로 직렬화해 만들어 코드를 작성해준다.
Capsule Collider 높이를 플레이어의 머리쪽으로 붙여준다.
캡슐콜라이더의 높이를 조절하기위해 기본 높이에서 slop data로 조정한 값만큼 곱해준다.
기본 높이 차이와 현재 높이 차이를 구한뒤
차이의 절반만큼을 더해 중앙에 넣으면 됩니다.
차이의 절반만큼을 더해 중앙에 넣고 플레이를 해보자.
Collider는 Slop 백분율로 조절한만큼 작동이 되고는 있지만, 중력으로인해
콜라이더가 안 닿는 부분은 떨어지고 있다.
해결 방법
이를 해결하기위해 Player의 Cpasule Collider Center에서 지면(레이어로 지정한 Ground까지의 길이를 구해야한다.
현재 CapsuleColliderUtility.cs에 CapculateCapsuleColliderDimensions()에서 구한
Center값이 높이에따라 다르지만 1.8기준 1.125가 됐으므로,
그 길이만큼 Capsule Collider Local Space Center에서 해당 거리를 제거하면된다.
이러면 3가지의 예상 가능한 결과가 생긴다.
양수 값 Positive, Null값 Netural, 음수 값 Negative.
Postive => Collider가 있어야할 위치에 있지 못해 조금 더 올라가야하는 상황
Netural => 지면에 붙어있는 완벽한 상태
Negative => Collider가 위에 있어 내려와야하는 상황
Postive에 대한 문제는 양의 수직힘을 추가하면 해결될 것이고, 반대로 Negative는 음의 수직력을 추가하면 해결될 일이다.