본문 바로가기

언리얼러닝/Your First Hour in Unreal Engine 5.2

문열기2

문모양을 만들고 Left마우스버튼+휠버튼을 눌러 기즈모를 이동시키고 우클릭후 Pivot 옵셋을 설정한다.

 

또는 모델링모드에서 Transform PivotAct를 설정한다. 좀더 쉽게 설정할 수 있다.

BP_Door를 블루프린트를 만든다 부모는 Actor로 하자

컴포넌트에 StaticMesh를 2개 추가해 방금만든 Left Right door를 배치하고 문이 열리기 Pivot을 양쪽에 배치되게 잘 배치한다.

문 앞뒤로 트리거할 Collision Box를 2개 배치한다. 콜리전 세팅에서 캐릭터Pawn만 오버랩 되게 한다. 안그러면 문이 열리면서 건드려서 새로운 트리거를 발생할수 있다. 아니면 Door Mesh는 콜리전을 꺼 놓으면 된다.

Frontbox콜리전 박스의 Begin Overlap을 추가하고 Add TimeLine을 추가한후 Set Relative  Rotation 2개추가해서  문2개가 동시에 열리게 해준다. 양쪽문은 회전방향을 다르게 해줘야 앞으로 열린다. 그래서 -1를 곱해준다

TimeLine을 클릭해 편집해준다. 문의 회전은 0도에서 90로변화하므로 time0,0 time1,90으로 2개 키를 추가해준다. Length는 1초로 해준다.

현재는 문앞에 다가가면 열리긴하지만 닫히지 않는다 문앞을 떠나면 문이 닫힐수 있게 End Overlap이벤트를 추가해주고 Reverse에 연결해주면 신기하게 문이 닫힌다. 처음에는 문을 열고 닫는 타임라인을 각각 만들었지만 그러면 타임라인의 상태가 관리가 안되었다. 문이 열리는 타임라인과 닫히는 타임라인이 각각 관리되어 곤란한 경우가 생긴다. 심지어 왼쪽오른쪽문의 타임라인까지 만들면 타임라인이4개가 되어 엄청복잡하게 된다. 이번 로직의 핵심은 타임라인 한개로 관리한다는 거다.

Variable dir을 만들어 컴파일후 default로1 을 해준다. 문 받대편에 콜리전 박스의 트리거를 만들어 줄건데 반대쪽에서는 방향이 반대로 열려야 하기 때문에 이걸 관리할 변수이다.

반대방향 트리거가 실행되면 dir을 -1로 설정하고

회전값 yaw에 곱해주면 잘 작동한다.

마지막으로 풀어야할 문제가 있다 앞으로 들어가서 문을 통과하기도 전에 Front Box End OverLay가 발생되어 동작이 겹치게 된다 따라서 적당히 지연을 두어 두과정을 분리하고 만일 문이 열리는 중이라면 문을 닫지 말아야 한다.

이런 체크과정은 매크로를 만들어 간단히 해보겠다. isOpen이라는 변수와 CheckDirection이름으로 매크로를 만든다

매크로 디테일에서 +를 눌러 Inputs Outputs는 다음과 같이 설정한다. 

로직은 4개의 오버랩이벤트를 다 처리할 수 있게 만들었다. 기본적으로 Start는 1 End는-1이지만 1초 지연후 혹시 inOpen이 참이면 End Event는 무시하는 방식이다.

이벤트그래프에서 매크로를 추가하고 앞과 뒤를 다음과 같이 정리한다.

복잡해 보이지만 4개의 이벤트에 대해 하나의 로직을 수행해서 2개의 문짝의 애니메이션을 실행하고 있다.

플레이해서 체크해보면 문 앞뒤로 갈때 문이 열리는 방향이 플레이어의 반대쪽으로 열리고 문을 지나칠때 문이 닫히지 않고 반대쪽을 지나갈때 닫히는걸 볼 수 있다. 총이 길어 오동작하는건 콜리전설정에서 잘 하면 될지 모르겠다.

 

 

'언리얼러닝 > Your First Hour in Unreal Engine 5.2' 카테고리의 다른 글

ThirdPersonPlayer 분석하기  (1) 2023.11.25
문열기  (0) 2023.11.10
뷰포트조작방법 - 단축키  (0) 2023.09.13
Working with Blueprints  (0) 2023.07.11
Working with Visuals  (0) 2023.07.11