Unreal Engine

Unreal Blueprint - 02

Rapids. 2024. 5. 28. 11:33

액터 블루프린트를 제작하여 여러 개체로 복제해서 배치할 경우, 

레벨에 올라간 액터 블루프린트들은 원본 블루프린트에 레퍼런스 되어있는 상태이므로

원본을 바꾸면 같이 바뀌는 상태이다.

단, 레벨에 배치한 액터를 디테일창에서 추가적으로 조절해준다면 그 조절 값이 우선이 되게 된다. 

 

이러한 특성을 이용하여 액터를 특정 구역별로 또는 묶음별로 블루프린트를 짜서 조절해줄 수 있다. (레벨로 구별되어있는 경우, Tag로 구별되어 있는 경우 등) 'get actor of class' - * 지난 주 블루프린트 글 참고

 

배열 변수

변수를 생성하고 디테일창에서 Variable Type을 Array로 바꿔주면 값을 받는 형태가 Index로 원하는 만큼 추가할 수 있도록 바뀐다. 


가로등 액터 블루프린트 제어 실습 (배열)

먼저 Spotlight가 들어있는 가로등 형태의 액터 블루프린트를 만들어준 후 컴파일 저장. BP_가로등

레벨에 여러 BP_가로등을 배치해준다.

 

새로운 액터 블루프린트 생성. BP_가로등제어

Event Graph로 들어가 Custom Event노드를 만들어준다. '라이트랜덤 밝기'

커스텀 이벤트 노드의 디테일 창에서 Call in editor를 체크하면 블루프린트 밖에서도 실행가능하도록 노출 가능.

 

레벨에 올라간 액터 블루프린트를 가져오기 위해 Get All Actors of Class라는 노드를 사용.

저번주 실습한 Get Actor of Class와의 차이점은 출력값이 단일이 아니라 배열이라는 점이다. 

이번 실습에서는 Get All Actors of Class 노드를 사용한다.

 

Get All Actors of Class에서 가져온 배열을 For Each Loop 노드를 이용해서 액터 블루프린트 하나씩 루프를 돌면서 세팅해줄 수 있다. (디테일창에서 프로퍼티를 하나씩 바꾸던 것을 자동화하는 것)

 

For Each Loop 노드에는 앞서 만든 가로등의 spotlight를 추출하여 밝기를 조절하기 위해 Get Component by Class로 각 액터 블루프린트마다 spotlight를 찾아주고 Set Intensity를 달아 라이트 밝기를 조절할 수 있다.

 

다음으로 Set Intensity에 들어갈 New Intensity값을 변수로 받아오기 위해 변수 Float를 하나 생성하고 배열로 바꾸어준다.

Default Value에 여러 인덱스값을 추가해준다.

 

인덱스 목록이 세팅된 랜덤 가로등밝기 변수를 Get으로 가져와주고 핀을 빼서 Get(a ref)를 연결해준다.

Get노드가 생기면서 숫자를 넣을 수 있는 input 핀이 생기는데 이 곳에 변수에서 세팅한 인덱스 번호를 넣어주면 해당 인덱스에 적용되어있는 값이 추출된다.

 

Get 랜덤 가로등 밝기를 New Intensity에 연결하여 확인해보기.

 

더 나아가서 Get(a ref) 노드에 들어갈 인덱스 번호를 랜덤하게 가져와주면 매번 인덱스를 바꾸지 않아도 로직 실행만으로 매번 라이트밝기가 바뀌는 가로등을 만들 수 있다.

Get(a ref) 노드 인덱스 번호 핀에 Random Integer in Range 노드를 추가로 달아주면 

인덱스를 랜덤하게 꺼내줄 수 있다. 

Min과 Max에는 '랜덤 가로등 밝기'의 인덱스 범위를 적어주면된다.

 

랜덤 라이트 밝기가 적용된 결과. 버튼을 누를 때 마다 계속해서 랜덤하게 바뀌는 것을 알 수 있다.


가로등 액터 블루프린트 제어 응용 (Tag를 활용한)

모든 액터에는 디테일창에서 Tag를 달 수 있는데, Tag를 이용해서도 액터를 묶어서 작업할 수 있다.

3가지의 가로등 액터블루프린트를 준비한다.

1>Tag가 없는 것, 2>'가로등' Tag를 가지는 것, 3>'가로등'과 '1길' Tag를 가지는 것. 

Tag는 여러개를 한 액터에 달아줄 수 있다.

 

다시 BP_가로등 제어로 돌아와서 추가 Custom Event 노드를 2개 만들어준다.  

'가로등밝기조절'과 '1길가로등밝기조절' 이벤트를 생성하고 이번에는 Get All Actors of Class with Tag를 연결해준다. 

이후 노드는 위와 동일.

Get All Actors of Class with Tag노드의 Tag 핀에 '가로등'과 '1길'을 각각 넣어주면 해당 Tag로 구분되어 작동하는 로직을 만들 수 있다.

 

결과

맨 처음에 만든 Tag 없이 레벨에 올라간 모든 BP_가로등의 라이트 밝기를 조절했던 '라이트밝기조절' 이벤트는 모든 가로등이 반응하고, '가로등밝기조절' 이벤트는 가로등이 Tag로 달려있는 블루프린트 액터만, '1길가로등밝기조절' 이벤트는 1길이 Tag로 달려있는 블루프린트 액터만 반응하게 된다.

 

*추가 - 랜덤 라이트 컬러

라이트 컬러를 바꾸기 위해서는 Set Light Color 노드를 이용한다.

Set Light Color의 New Light Color 핀은 LinearColor인데 이는

Random Float in Range 값을 결합시켜주어 만들 수 있다. (*해당 핀의 종류가 헷갈리면 변수로 승격해보기)

Random Float in Range 노드를 RGB용으로 3개 만들어주고 Make LinearColor 노드의 RGB핀에 각각 연결해준다.

이를 Set Light Color 의 New Light Color 핀에 연결해주면 완성.

 

특정 로직을 반복해서 실행시키려면, Event Tick에 연결시켜준다. 속도조절을 위해 Delay를 달아주고 제작해놓은 커스텀 이벤트 노드 연결해주면 완성.

Sequence는 혹시 다른 로직을 동시에 실행 할 수도 있기 때문에 예비용으로 달아놓았다.

 

*추가 - 액터 블루프린트의 랜덤 위치 

Set Actor Location의 경우 Target이 액터이기 때문에 해당 로직에서 For Each Loop에서 나오는 Element를 연결해주어야한다. (* Component와 Actor 혼동 주의) 


가로등 액터 블루프린트 랜덤 배치

Spawn Actor from class노드를 이용하면 생성 위치를 지정해줄 수 있다. 

Custom Event 노드 생성. '가로등스폰하기'

Spawn Actor from class노드생성하고 Class에 원하는 블루프린트 클래스 넣어주기

 

Spawn Actor from class노드는 처음에 Spawn Tansform 노드가 있는데 핀을 2번정도 분리하면 Random Float Range 노드를 연결 할 수 있다.

해당 Spawn Actor from class노드를 원하는만큼 반복하기 위해서는 For Loop 노드를 연결해줄 수 있다. 

For Loop 노드는 내가 지정해준 인덱스의 처음과 끝까지 1씩 증가하면서 실행해주는 노드이다.


가로등 액터 블루프린트 정렬 (4*3배열)

For Loop 노드와 Branch 노드를 이용해 규칙을 만들면 규칙적인 배열을 위한 자동 로직을 짤 수 있다. 

 


변수 전환 및 외부 노출

입력값을 변수로 전환하여 노출해주면 향후 다양한 액터와 사용할 수 있어 활용도를 올릴 수 있다.

변수의 순서는 블루프린트에서 변수 목록에서 수정해주면 외부에 노출될 때 이 순서로 노출이 된다.


다중 액터 제어

사용할 액터가 정해져있지 않을 때, 액터를 받아들일 수 있는 변수를 밖에 노출해주면 편리하게 사용할 수 있다.

단, 액터가 없는 상태로 이벤트를 실행하면 에러가 날 수 있음.

 

'Unreal Engine' 카테고리의 다른 글

Unreal Blueprint (3인칭게임모드) - 01  (0) 2024.05.29
언리얼 제작 사례  (0) 2024.05.28
Unreal Lighting - 06  (0) 2024.05.27
Unreal VFX - 02  (0) 2024.05.24
Unreal Material - 07  (0) 2024.05.23