- 블루프린트 기초
- 이벤트
- Remote Control
- Transform
- 위치 이동 이벤트
- Branch
- light (꺼졌다 켜지는 노드)
- 레벨 이름 가져오는 노드
- 외부 프로퍼티 가져오기
<블루프린트 기초>
블루프린트란 무엇인가?
- 언리얼 엔진의 비주얼 스크립팅 시스템
- 언리얼 에디터 안에서 노드 기반 인터페이스를 사용하여 게임 플레이 요소를 만드는 개념을 토대로한 비주얼 스크립팅 시스템
- 다른 언어와 마찬가지로 엔진 내 객체 지향형(OO) 클래스 또는 오브젝트를 정의하는데 사용
- UE4를 사용하다보면 블루프린트를 사용하여 정의된 오브젝트를 일상적으로 "블루프린트"라고 하는 경우가 많음
레벨 블루프린트
- 레벨 블루프린트란 단위 글로벌 이벤트 그래프 역할을 하는 특수한 형태의 블루프린트
- 프로젝트 내 각 레벨에는 기본적으로 자체적인 레벨 블루프린트가 있어 언리얼 에디터 안에서 편집할 수 있으나, 에디터 인터페이스를 통해 새로운 레벨 블루프린트를 생성할 수는 없음
- 레벨 전체적으로 관련된 이벤트 또는 레밸 내 특정 액터 인스턴스가 함수 호출이나 흐름 제어 연산 형태로 일련의 동작을 발동시키는데 사용
블루프린트 클래스(액터)
- 종종 그냥 블루프린트는 콘텐츠 제작자가 기존의 클래스 위에 다른 함수성을 쉽게 추가할 수 있도록 해주는 에셋.
- 블루프린트는 언리얼 에디터 안에서 코드 작성 방식이 아닌 시각적 방식으로 생성, 콘텐츠 패키지에 에셋으로 저장
- 본질적으로 새로운 클래스 또는 액터 유형을 정의하는 것으로 나중이 이 블루프린트를 맵에 인스턴스로 배치하면 다른 액터 유형처럼 작동함
애니메이션 블루프린트(애님 블프)
- 스켈레탈 메시의 애니메이션을 제어하는 특수 블루프린트
- 그래프는 애니메이션 블루프린트 에디터에서 편집하며, 여기서 블렌딩, 스켈레톤의 본 직접 제어, 로직을 구성하여 각 프레임에 사용할 스켈레탈 메시ㅐ의 최종 애니메이션을 최종 결정
블루프린트의 기본 요소
- 이벤트
- 노드
- 변수
- Set
- Get
- 레퍼런스 등등...
<이벤트>
- 시작점. 어떨때 시작할지에 따라 이벤트 노드의 이름이 정해진다.
- 가장 대표적인 것은 Event Begin Play와 Event Tick이 있다.
- Event Begin Play는 플레이 버튼이 눌렸을 때 한번 작동하고, Event Tick은 매 프레임마다 작동한다.
Begin Play - 게임이 시작될 때
End Play - 게임이 끝날 때
Actor Begin Overlap - 충돌이 시작될때
Actor End overlap- 충돌이 끝날 때
왼쪽 마우스 버튼 - 버튼을 누르거나 놓을때
왼쪽 Ctrl - 키를 누르거나 놓을때
Tick - 매 프레임마다
Custom Event - 사용자 정의 이벤트
블루프린트 클래스
- 어떤 클래스를 기반으로 생성할 것인지 선택할 수 있음
* 모든 클래스를 누르면 다른 클래스도 나옴
* 컨텍스트에 따라를 켜면 주로 사용하는 기능들을 위주로 띄워줌
* 블루프린트 클래스 디폴트 선택 후 입력 자동 수신 설정
> 선택한 플레이어가 영향을 받음
A키를 누르면 위치가 뜨도록 하는 노드 연결
> 키를 누르는 노드는 입력 자동 수신을 Player 연결을 해줘야 함
= 이렇게 뜸
블루프린트가 작동하는 상태
- 언리얼 엔진은 크게 2가지 상태로 나누어진다
- 플레이 상태와 에디터 상태
- 플레이는 플레이버튼 (시뮬레이션 버튼)을 눌러서 게임이 실행한 상태이고, 에디터 상태는 정지되어있는 상태
- 블루프린트는 기본적으로 플레이 상태에서 작동. 하지만 일부 블프는 에디터 상태에서도 작동.
- 블프가 어떤 상황에서 작동하는지 아는것도 중요하다.
- 뷰포트 플레이와 시퀀서의 플레이는 다름 (시퀀서는 시퀀서만 플레이) 하지만 렌더링을 하면 뷰포트의 플레이가 되기 때문에 시퀀서에서는 작동하지 않는 블루프린트가 작동한다.
노드
- 그래프에서 사용할 수 있는 이벤트, 함수 호출, 흐름 제어 동작, 변수와 같은 오브젝트
- 특정 그래프의 함수성이나 그 함수성이 들어있는 블루프린트를 정의하는데 사용
- 동작할 수 있는 "하나의 기능"
- 컨텍스트 메뉴 > 새로운 노드를 추가할때 현재 상황에 맞는 노드를 제시해주는 기능
- 팔레트 윈도우 > 블루프린트에서 사용할 수 있는 노드를 모아놓은 기능
Mathew Wadstein Tutorials - YouTube
변수란?
- 월드에 있는 오브젝트나 액터에 대한 값이나 주소를 담는 프로퍼티
- 내부적으로는 그를 담고있는 블루프린트에서 접근할 수 있으며, 외부적으로 접근 가능하게 하여 레벨에 놓은 블루프린트 인스턴스 작업을 하는 디자이너가 그 값을 변경하도록 할 수도 있음
- 변수는 이름이 들어간 둥근 박스로 표시됨.
String - 자홍색 변수는 문자열 데이터, 또는 알파벳과 숫자로 된 글자 그룹을 나타냄
Vector - 금색 변수는 백터 데이터, 또는 XYZ나 RGB처럼 세개의 실수로 구성되는 요소나 축 정보
Boolean - 빨간 변수는 부울(진실/거짓) 데이터
Integer - 청록 변수는 0, 152, -226와 같은 정수 데이터, 또는 소수점이 없는 숫자
Object - 파랑 변수는 오브젝트, 즉 라이트, 액터, 스태틱 메시, 카메라, 사운드 큐를 나타냄
* 세팅된 값을 변수로 저장하고 싶을때
> Promote to variable
+ 변수를 이런식으로 연결 가능
블프의 실행 순서
- 블루프린트는 하얀색 선을 따라 왼쪽에서 오른쪽으로 실행됨
- 이때 노드 안에 있는 변수를 만났을대 아래 그림과 같이 노드 안에 변수 값이 지정되어 있으면 그걸 실행하고, 핀이 연결되어 있으면 뒤로 가서 변수를 확인하고 다시 돌아오게 됨
* 변수를 확인하고 돌아옴-
변수 응용
-뷰포트에 큐브 추가, 디테일>렌더링 > 표시 비활성화
- A를 눌렀을때 표시를 꺼둔 cube가 보이도록 하는 노드 연결
- B버튼을 눌렀을때 New Scale의 값만큼 크기가 변하는 노드
* 노드의 Component와 Actor를 구분해야함
* 값을 넣을 수 있는 변수는 인스턴스 편집 가능 활성화를 해줌
> 밖의 블루프린트 액터 - 디폴트에 추가됨
* 블루프린트 왼쪽 하단에서 +버튼을 눌러 함수 추가 가능
<Remote Control>
플러그인 > Remote Control API 활성화
> 따로 창을 띄워 필요한 설정만 넣어놓을 수 있는 기능
> 라이브 상황에서도 사용할 수 있다.
- 콘텐츠 브라우저 우클릭 > 원격제어 > 리모트 컨트롤 프리셋
- +를 눌러 그룹 추가 가능
- 디테일창에서 눈을 눌러 프로퍼티를 추가해줄 수 있음
- 아래 F를 눌러 함수를 추가해줄수도 있음
<Transform>
- 블루프린트 생성 > Set Actor Transform 생성
- 트랜스폼이 연결되어있지 않으면 오류가 남
> 변수에 현재 위치 기본값을 적어줌
- Relative > 자신의 위치에서 이동
> 위치를 따로 지정해주지 않아도 됨 (편리)
> Tick에 붙이면 매 초마다 움직이므로 이 경우엔 Add Actor Local Offset을 추천
Add Actor Local Rotation
- 해당 블루프린트가 계속 돌아감
- Target에 특정 변수를 연결하면 그 오브젝트만 돌아감.
타임라인
- 노드를 두번 클릭하면 창을 한번 더 들어갈 수 있음
- 트랙 > 플롯 트랙 추가
- 그래프 우클릭 > 커브플롯에 키 추가
- 시간과 값 설정
- 타임라인을 확인할땐 Print String을 사용하는 것을 추천
- 그래프에서 값을 1을 주었기에 외부에서 Multiply로 값을 넣어줄 수 있음
> Multiply의 B값을 변수로 바꾸어 인스턴스 편집 가능을 켜주면 외부에서도 손쉽게 수정할 수 있음
- Print String대신 Set Actor Relative Location 넣기
- 구조체 핀 분할하여 원하는 곳에 각각 노드를 연결 할 수 있음
Reverse From End > 타임라인을 되돌림
- 올라갔다가 제자리로 돌아와야하므로 기존 타임라인 노드의 Finished를 복사한 노드들의 Reverse from End와 연결해준다.
= 위로 올라갔다 내려옴
위치 이동 이벤트
- Add Custom Event 생성
- 타임라인과 연결한다
- 위치이동 실행중이라는 부울 변수를 만들어준다
- Set로 가져옴
- Set Actor Relative Location의 XYZ값을 분리해주고 이동과 연결
- 그 사이에 Multiply를 곱하고 곱하는 수를 변수로 승격시켜준다. (편하게 수치를 변경하기 위함)
- Flow Control 아래의 Sequence를 생성해서 Event Tick에 연결
> Sequence는 여러 이벤트를 동시에 실행시켜주는 노드
- Sequence에 Branch를 연결해준다.
- 위치 이동 실행중의 Condition변수를 생성해 연결
- Branch False에 위치이동시작 함수를 연결(위에 만든 위치이동시작 이벤트)
- 타임라인의 Finished에 위치이동시작 변수를 Set으로 가져오고 그 뒤에 확인을 위한 Print String을 붙임
- 확인 후 제자리로 돌아오는 오브젝트를 위해 타임라인을 복사해 올라가는 타임라인의 Finished에서 돌아오는 타임라인의 Reverse from End로 연결한다.
- 제자리로 돌아오는 타임라인의 Finished에서 Delay를 연결해 Print Spring 노드를 연결해준다.
* 총 노드 정리
Branch
- Event Tick에 Sequence생성
- Branch에 만든 Condition 변수를 연결한다.
- Branch의 각 끝에 Print String을 각각 연결해준다.
- Sequence의 다른 노드에 Delay노드를 연결하고 Flip Flop노드를 추가로 연결 후 Set condition을 각각 연결해준다.
> Flip Flop노드의 특성으로 번갈아가며 Branch노드의 결과값을 출력 > True False의 값이 번갈아가며 출력된다.
- 새로운 Custom Event를 생성하고 Print String을 연결한다
- 아까 생성한 Branch의 print string의 끝에 뭔가 실행중(생성한 커스텀 이벤트 함수)를 연결한다
- Custom Event에 Set Condition을 연결하고 Print String - Delay - Set Condition을 연결한다
> Set 노드들로 중간 이벤트가 시작되고 끝남을 표시해주는 역할
light
- 타임라인 생성 후 빛이 켜질 그래프 생성
- Custom Event를 생성 후 타임라인의 Play from Start에 연결한다
- Set Intensity를 타임라인의 Update에 연결
> 뷰포트에서 추가한 포인트 라이트의 변수를 Target에 연결
- 타임라인의 트랙에 Multiply를 연결하고 Set Intensity의 New Intensity에 연결한다.
> Multiply의 곱해주는 수를 변수로 승격해준다.
- 불 끄기 Custom Event를 만들땐 불켜기의 노드들을 복사해 Reverse from End에 이벤트를 연결해준다.
- point light의 변수에서 핀을 뽑아 Get Intensity를 검색해 연결한다.
- Intensity에서 핀을 뽑아 Promote to variable을 눌러 변수로 승격해준다.
> 플레이가 되자마자 라이트의 현재 밝기를 인식하기 위함
- Set intensity를 Begin Play와 연결 후 Print String과 연결
- Append 노드를 생성해 Print String과 Set intensity의 노드에 각각 연결
= ex) 현재 라이트의 밝기는 10입니다
Branch에 연결된 Condition에따라 불을 껐다켰다하기
- Custom Event 생성 후 Greater를 생성 후 위에서 만든 현재 라이트의 밝기 변수를 불러온다
> 현재 라이트의 밝기가 0보다 크면 True, 작으면 False로 작동
- 각각 위에 만들어둔 불이 켜지고 꺼지는 노드를 각각 복사해온다.
> 이때 불이 켜져있으면(True) 불이 꺼져야 함으로 불이 꺼지는 노드를 복사해온다.
> 불이 꺼져있으면 (False) 불이 켜져야 함으로 불이 켜지는 노드 복사
- New Var의 값을 0이상으로 설정해준다
- 각각의 Set intensity의 Target에서 핀을 뽑아 Get Intensity를 연결해주고 Set Intensity 노드를 생성
- 위에 생성된 Set Intensity의 노드를 타임라인의 Finished에 연결해준다.
> 다시 버튼을 눌렀을때 Begin play에 연결된 현재 라이트의 밝기를 파악하기 위함
* 불의 밝기가 잘 안보일땐 포인트 라이트의 강도 유닛을 Candelas로 변경
레벨이름가져오기
Construction Script
- 레벨에 놓이면 바로 실행
- Get Current Level Name 생성
> 레벨의 이름을 불러오는 노드
- Print String으로 출력로그에 레벨 이름이 뜰 수 있도록 함
> 창 - 출력로그
- Split 노드로 _ 오른쪽, 왼쪽의 단어를 각각 연결
> Switch on String에 인덱스 추가
- 해당 노드는 _의 Right에 있는 단어에 따라 출력되는 글이 달라짐
= 출력되는 로그
* Print Spring에 Set Visibility를 연결하여 실내, 실외에따라 도형이 사라지게 할 수 있음
외부 프로퍼티 가져오기
- Custom Event 생성
- Get Actor of class
> BP의 값을 가져오는 노드
- Get Component by class
> 레벨에 있는 액터를 가져오는 노드
- Return Value에서 핀을 뽑아 Get intensity (불러온 포인트 라이트의 Intensity값)를 생성
- Print String에 연결
= 이벤트 발생시 BP_light의 포인트라이트 Intensity값이 출력됨
'언리얼 > 블루프린트' 카테고리의 다른 글
2024 언리얼 엔진 실무 기반 교육 과정 37일차 (0) | 2024.05.28 |
---|