-
Unreal Engine 2d Base Dash BlueprintUnreal Engine/Math 2019. 1. 5. 11:13
설명에 앞서 이번 글은 Add Force 등과 같은 물리학 기반의 Dash가 아닌 수학 기반의 방법이다.
정확히는 RayTrace를 활용한 Dash 이다.
Physics 기반의 경우 플레이어가 A 에서 B 방향으로 Dash를 하게 되면
어떠한 콜리전과 부딪히게 되는 경우에 엔진의 물리 연산에 의해 자연스럽게 멈추게 된다. ( Result 의 위치 )
하지만, 너무 빠른 속도로 Dash를 하거나 텔레포트 등과 같은 행동을 취하게 되면
콜리전끼리 겹친 상태에서 플레이어를 콜리전 밖으로 밀쳐내게 되고,
극단적으로는 아래와 같이 어디로 튕겨져 나갈지 모르는 사태가 일어날 수도 있다.
이를 해결하기 위해 엔진의 기본 물리를 사용하기 보다는
RayTrace를 활용한 Dash 이다.
Ray를 통한 Dash와 기본적인 물리가 적용되어 있을 때 아래와 같은 일이 나타난다.
Type A :: 플레이어가 오브젝트와 겹쳐지고 일반적인 방법으로 탈출할 수 없다.
Type B :: 플레이어가 오브젝트와 겹친 이후부터 사진과 같이 흔들리게 된다.
이를 해결하기 위해 아래와 같은 방법을 사용했다.
Dash 장소로 Ray를 쏘아 hit 되는 지점의 Normal 기준으로 수직 법선을 그리며,
하늘색 점의 위치로 Dash하도록 해준다.
하지만, 이것으로는 완벽하고 모든 경우의 수를 포함하여 버그 없이 작동이 불가하다.
아래의 예시를 보게 되면 이해가 될 것이다.
A ::
LineTrace로 Dash 도착 지점 위치 정보를 구했다.
해당 위치로 이동 시 플레이어가 벽 사이에 끼이게 되고, 움직일 수 없게 될 것이다.
B ::
SphereTrace를 사용했으며 Radius를 사용자의 캐릭터 크기를 고려하여 입력하였다.
정상적인 Dash가 가능하다.
이러한 요소들을 미리 생각하고 코드를 작성하게 되면, Type A,B 예제의 오류는 일어나지 않을 것 이다.
1.
Dash 중에는 목적, 또는 게임 시스템에 따라 콜리전 일부를 꺼주는게 좋을 수 있다.
2.
계산식 중 Normal * float 가 있는데, float 는 캐릭터 크기에 따라 수치 조절이 필요하다.
3.
본문에서는 SphereTraceByChannel 을 사용했다. 사용 목적에 따라 LineTrace를 사용해도 되며,
또는 SphereTrace의 Radius를 조정해가며 사용하면 된다.
< 적용 결과 >
'Unreal Engine > Math' 카테고리의 다른 글
Unreal Engine 2d Base RayTrace Reflect Blueprint (0) 2019.01.05 Unreal Engine 2d Base Get Mouse Position Blueprint (0) 2019.01.05 댓글