🎮Unreal4/Blueprint

[UE4] 순간이동 구현 시 나타나는 문제점 (Get Scaled Capsule Half Height, 블로킹 볼륨)

공대 컴린이 2023. 2. 6. 17:00
728x90

💥 순간이동 구현 시 나타나는 문제점 - 1

🔹플레이어의 몸통이 땅에 박힌다

마법사의 순간이동 기능을 구현하고 나서 가끔씩 순간이동 시 플레이어의 몸통 절반이 땅에 박힐때가 있다.

이는 플레이어의 중심점이 허리에 위치했는데, 순간이동하려는 땅의 z좌표가 플레이어의 중심점 z좌표보다 아래로 내려가는 순간 중심점이 땅의 z좌표에 맞춰져 허리가 박힌것처럼 보인다.

 

일반적으로 중심점이 땅보다 살짝 위에있으면 충돌체가 자동으로 땅위에 올려서 크기를 맞춰 배치하여 정상적인 출력이 가능한데, 어쩌다 중심점이 땅보다 밑에 한번 찍히는 경우 버그가 발생하게 된다.

 

이를 해결하는 방법은, 단순히 중심점 만큼 플레이어의 위치를 땅위로 올려주면 된다.

 

X, Y 좌표는 그대로 사용하면 되고 높낮이 조절인 Z값만 다시 조절해주면 되는데, 플레이어의 중심점 위치를 가져오는 방법은 Get Scaled Capsule Half Height 함수를 이용하면 된다.

🚩Get Scaled/Unscaled Capsule ~

  • Scaled : 캡슐 콜리전에 Scale 값까지 곱해진 상태로 반환
  • Unscaled : 캡슐 콜리전의 원본값이 반환
  • Half Height : 캡슐의 절반 높이를 반환
  • Half Height Without Hemisphere : 캡슐 절반 높이에서 반지름를 뺀 값을 반환
  • Radius : 캡슐의 반지름을 반환
  • Size : 캡슐의 반지름과 높이를 둘다 반환
  • Size Without Hemisphere : 캡슐 절반 높이에서 반지름를 뺀 값과 반지름을 둘다 반환

작성한 블루프린트에서는 캐릭터의 크기가 커지거나 작아질 수 있으므로 Scaled Capsule Half Height 함수를 사용하였다.

따라서 플레이어를 위치시킬 Location에 Z축을 캡슐의 절반크기만큼 더한 벡터를 지정해주어 문제를 해결했다.

💥 순간이동 구현 시 나타나는 문제점 - 2

🔹맵 테두리에 순간이동 시 맵 밖으로 떨어진다

Blocking Volume

플레이어가 맵 밖으로 이탈되는 문제는 블로킹 볼륨(Blocking Volume)이라는 액터를 배치하여 해결할 수 있다.

블로킹 볼륨을 배치할 때 주의할 것은 벽의 크기보다 더 크게 트랜스폼을 설정해 배치해야 한다는 점이다.

맵의 벽보다는 벽 앞쪽에 배치해야 플레이어의 이탈을 확실하게 막을 수 있다.

 

블로킹 볼륨을 통해 벽을 막아두고 나면 위 사진과 같이 플레이어가 벽과 거리가 좀 떨어져있지만 더이상 벽쪽으로 이동하지 못하게 된다.

728x90