이번 포스팅에서는 플레이어나 물체를 이용하여 스위치 버튼을 누르는 기능과 키보드 입력 'O'와 'C'를 입력하여 열고 닫고 마지막으로 스위치를 눌렀을 때 문이 열리고 스위치가 눌리지 않았을 때 문이 닫히는 과정을 정리 하였습니다
스위치 버튼
버튼 생성
BP_Switch라는 블루프린트 클래스를 생성하고
버튼의 틀로 BaseMesh와 누르는 버튼 역할을 하는 ButtonMesh를 컴포넌트로 추가해줍니다.
그리고 Box Collision을 ButtonMesh에 상속하여 생성하고 이름을 Box에서 Trigger로 지정하겠습니다.
삼인칭 캐릭터 생성
이전에는 시작 콘텐츠 팩으로 임포트 되어있는 삼인칭 캐릭터를 블루프린트에서 끌어와서 배치하는 방법을 사용했습니다.
이번에는 [월드 세팅] - [Game Mode] - [게임모드 오버라이드] - [ThirdPersonGameMode]를 선택합니다.
플레이하면 자동으로 삼인칭 캐릭터가 생성됩니다.
만약 월드 세팅탭이 보이지 않는다면, 왼쪽 상단에서 [창] - [월드 세팅]을 체크해서 표시해주어야 합니다.
태그 추가 주의사항
플레이어 또는 물체만 스위치 버튼에 트리거를 작동하기 위해 태그를 추가합니다.
위의 방법으로 플레이어 캐릭터를 추가했기때문에 실행하기 전에는 삼인칭 캐릭터를 편집할 수 없습니다.
실행하고 삼인칭 캐릭터를 선택하고 tag를 검색하여 tag에 TPC라는 태그를 추가해주어야합니다.
하지만 실행 중에 이런 방식으로 편집하게 된다면 플레이를 종료했을 때 편집한 부분이 되돌려져 있기 때문에 클래스에 직접 들어가서 편집을 해야합니다. (유니티처럼 실행했을 때 편집하면 편집한 부분이 실행전 상태로 돌아간다)
실행 중에 월드 아웃라이너에서 삼인칭 캐릭터 오른쪽에 편집을 클릭합니다. (파란색 글씨)
해당 삼인칭 클래서에서 ThirdPErsonCharacter(셀프)를 선택하고 우측 디테일에서 tag를 검색하고 TPC라는 태그를 추가해줍니다.
스위치 버튼에 닿았을 때 이벤트 액션
다시 스위치 버튼의 블루프린트로 돌아가서 Trigger(Box Collision)을 우클릭하여 Begin Overlap과 End Overlap 이벤트를 추가합니다. 그리고 Begin Overlap의 Other Actor에는 'TPC'태그 또는 'Box'태그를 가진 물체만 닿았을 때 활성화 되도록합니다.
다음으로 Branch가 True일 때 타임라인(TimeLine)을 생성하여 편집합니다.
타임라인에서 벡터 트랙을 추가하고 0초일때 0, 1초일때 1이라는 값을 주었고 2.2초동안 진행하도록 하였습니다.
TimeLine의 Height에 Lerp (Vector)를 추가하여 버튼이 눌렸을 때와 되돌아 올 때의 위치를 조절해줍니다. 그리고 이 값을 SetRelativeLocation으로 리턴합니다.
스위치 버튼에서 멀어져서 닿지 않을 때 이벤트 액션
버튼이 되돌아 오는 이벤트는 간단합니다. End OverLap에 똑같이 해당 태그를 가진 타깃만 Branch로 연결하고 True일 때,
TimeLine의 Reverse에 연결하면 EndOverlap 이벤트 액션인 '닿지않을 때' 는 닿았을 때와 반대로 액션이 실행됩니다.
문 열고 닫기 [미닫이 문]
BP_Gate라는 블루프린트 클래스를 생성하고
Scene대신 Arrow 컴포넌트를 추가하여 DefaultSceneRoot에 덮어줍니다. Arrow로 문의 방향을 직관적으로 확인할 수 있습니다.
문이 앞으로 나와서 양 옆으로 열리는 역할을 하는 InnerGate(Static Mesh) 두개를 생성합니다.
문이 열리고 닫힐 이벤트로 커스텀 이벤트를 추가합니다.
Open Gate와 Close Gate 두개의 커스텀 이벤트를 추가해줍니다.
스위치에 연결하기 전에 키를 입력받고는 방식을 사용하여 문의 이벤트를 발생시키겠습니다.
O키는 문이 열리고, C키는 문이 닫히는 이벤트입니다.
타임라인(TimeLine)을 생성하여 Play에는 OpenGate를 Reverse는 반대로 CloseGate 이벤트를 연결합니다.
타임라인을 더블클릭하여 편집해줍니다.
벡터 트랙을 생성하고 Shift를 누르면서 시작점과 끝점을 생성합니다.
XYZ축이 겹쳐서 보이는데, 트랙의 왼쪽 상단에 축마다 눈모양과 자물쇠 모양의 기능이있는데 눈을 클릭하면 해당 축을 숨기거나 표시할 수 있고, 자물쇠를 클릭하면 해당 축의 편집을 잠글 수 있습니다.
X축을 제외하고 전부 잠궈줍니다. 그리고 X축의 시작은 0, 값 0으로 하고 끝은 1, 20으로 지정합니다
X축으로 20만큼 전진합니다. ( 문의 Static Mesh X축 크기가 20가량됩니다)
Y축의 시작 시간은 1이며 값은 약 60으로 지정합니다. 끝의 점은 1.5, 180으로 지정합니다.
시작시간이 1인 이유는 위에서 X축으로 20만큼 이동한 후에 Y축의 이동이 시작되기 때문입니다.
타임라인의 업데이트에 위치를 조절해줄 SetRelativeLocation를 추가합니다.
그리고 왼쪽 문의 반대 방향인 오른쪽 문은 벡터 x, y, z(1, -1, 1)을 곱해야 합니다. Y축의 반대 방향으로 이동시키기 위해서입니다.
O키를 입력했을 때 문이 열리고 바로 C키를 입력하여 문이 닫히는 것을 볼 수 있습니다.
문과 스위치 버튼 연결하기
스위치 버튼 블루프린트 (BP_Switch )
스위치 버튼 블루프린트로 돌아가서 왼쪽 탭에서 이벤트 디스패처로 OnTurnedOn과 OnTurnedOff를 추가합니다.
만들어진 이벤트 디스패처를 드래그하여 호출로 선택하여 추가합니다.
스위치의 타임라인 이벤트에서 Direction에 줄을 연결한 상태에서 switch를 검색하여 스위치에 대한 이벤트 액션을 추가합니다.
스위치 이벤트에 Forward에는 On Turned On을 호출하고 BackWard에는 On Turned Off를 호출합니다.
마지막으로 레벨 블루프린트 열고 이벤트를 연결하는 것만 남았습니다.
레벨 블루프린트
레벨 블루프린트에서 위에서 호출된 이벤트를 사용하기 위해
월드 아웃라이너의 스위치에서 [우클릭] - [이벤트 추가] - [OnTurnedOn]과 [OnTurnedOff]를 추가합니다.
레벨 블루프린트에서 OnTurnedOn과 OnTurnedOff 이벤트가 실행되었을 때 타깃인 문이 열리고 닫히는 Open Gate, Close Gate 이벤트를 추가하면 문과 스위치 버튼이 연결됩니다.
스위치 버튼의 기능과 문 열고 닫히는 기능에 대해 정리하고 서로를 연결하는 기능에 대해 정리해보았습니다.
잘못된 점이 있으면 알려주시면 저도 배움에 도움이 됩니다. 감사합니다.