프로그래밍 농장

Toggling a light with the Level BP [ Unreal Engine ] 본문

Unreal Engine

Toggling a light with the Level BP [ Unreal Engine ]

Tennessee201 2021. 8. 25.
728x90

 

지난 시간에는 아래와 같이 간단한 스크립트 작업을 통하여 게임을 Play시 Pointlight가 점등되는 작업을 하였다.

Pointlight에 대한 점등 스크립트 

 

이번에는 위 블루프린트들의 상호작용을 더 구체화하여 적용해보도록한다. 

 

- 게임이 시작과 동시에 점등이 되는것에서, 플레이어가 방에 들어가면 Pointlight가 점등되는 것으로 상호작용성을 높혀보겠다. 

 

기본적으로 방에 들어갔다는 것을 판단하는기준은 '볼륨'을 통해서 알수있다. 

볼륨이란 기본적으로 3차원 공간을 일컫는 것으로, 뭔가가 진입하거나 나가는 판정을 할수있는 레이어기능을 가진다. 

따라서,

플레이어가 볼륨에 들어간다 = 방에 들어간다. 

플레이어가 볼륨에서 나간다 = 방에서 나간다.

논리가 성립된다는 것을 알수있다.

 

이제 , 플레이어와의 상호작용을 위하여 사용할수있는 여러가지 볼륨중, Box Trigger를 사용하여 아래와 같이 배치시킨다.

좌측 볼륨에서 BoxTrigger를 선택한뒤, 만들어놓은 방안에 배치시켜주어 크기를 꽉채워준다. 

이떄, 원활한 작업을 위하여 앞측 Wall을 클릭후, 우측상단의 eye check를 해제하여줄수있다. 

 

이후, 다시 wall을 보이게 만든 후, triggerbox를 클릭한 후, 레벨 블루프린트를 열어준다.

그러면 아래와 같이 TriggerBox에 대한 레퍼런스 및 이벤트추가에 대한 내용이 나온다. 

위의 창에서 이벤트 추가 -> 콜리전 - > BeginOverlap 을 클릭하여 새로운 노드를 생성해준다. 

여기서 BeginPlay와 BeginOverlap 노드를 보게되면, 둘다 상단이 빨갛다. 이와 같이 상단이 빨간 노드 = 이벤트 노드 라는 사실을 알수있다. 

추가적으로, ToggleVisibillity 노드같은 경우, 파란색 상단에 f가 적혀있다. 이는 Function(함수 노드) 라는것도 알수있다. 

 

이후 더이상 게임시작과 동시에 점등이 아닌, 플레이어가 TriggerBox에 들어갈떄만 점등이 되야하기에, 아래와 같이 노드를 수정해준다. 

컴파일을 완료하였다면, 시작전, 아래와 같이 Player의 시작포인트를 방밖으로 꺼내준다. 

이후 플레이어가 방 안에 들어가면 액터가 ToggleVisibillity를 오버랩하여 불이 점등될것이다. 

이후 플레이를 하면, 아직 방에서 나오는 경우의 노드작업을 진행하지 않았기에, 들어갈떄마다 점등,소등이 작동하는것을 확인할수있을것이다. 

 

다시 블루프린트로 돌아와서, 콜리전 -> OnActorEndOverlap노드를 생성한후 Toggle Visibillity에 아래와 같이 연결한다.

 

여기서, 기존의 UE3 와 U4 의 차이점을 알수있다. 

UE3의 경우 아래와 같이 EVENT에 대한 Action의 순서가 보장되지 않았다. 

UE3

UE4의 경우 아래와 같이 EVENT에 대한 Function(=Action)의 명령 순서를 직관적이며 순차적으로 지정하였다. 이는 언리얼 엔진4의 블루프린트가 '순차적 발동'을 채택한것으로, 한 Event에 여러동작을 동시에 실행하지않는다는 뜻이다. 

UE4 [ 순차적 발동 ]

 

마지막으로, Delay를 주어보겠습니다. OnActorBeginOverlap의 스타터를 클릭후 놓으면, 블루프린트가 자동으로 사용할법한 리스트들을 추천해준다.

이중에서 Delay를 검색하여 노드를 생성하게 되면 아래와 같이 Toggle Visibillity까지 자동으로 감지하여 연결된 상태로 생성된다. 이와같이 End 노드에도 딜레이를 적용시켜 각 0.5초의 점등/소등 딜레이를 주었다.

 

이후 실행해보면 정상적으로 점등/소등이 0.5초 딜레이후 이루어지는것을 확인할수있다. 

 

레벨 블루프린트의 경우 해당 레벨에서만 효력을 발휘하기에, 다른 레벨에서도 사용하고싶다면 스크립트 부분까지 전부 복사해주어야합니다.

다음시간에는 클래스 블루프린트에서 생성해놓고 필요한 레벨마다 가져와 사용하는 방법을 공부해보겠습니다.

728x90