본문 바로가기

언리얼엔진

5. Construction Script / 이벤트 / 함수 / 매크로 / 와일드카드

소리가 안들리니까 너무....음.....예....


Tip!

B + 좌클릭 : branch 노드 추가 단축키

P + 좌클릭 : BeginPlay 이벤트 노드 추가 단축키

F + 좌클릭 : For Each Loop 노드 추가 단축키


에디터 개인설정 - 검책 창 : construction - 콘텐츠 에디터/블루프린트 에디터 - 워크플로우 - 디테일 보기

컨스트럭션 스크립트 숨김 : false


Construction Script

기본적으로 만들어져 있던 함수

Construction Script는 컴포넌트를 스폰하고 구정작업을 하는 곳이다.


BP_Practice에 Mesh를 추가해주려고 한다.

우선 Mesh에는 StaticMesh와 SkeletalMesh 두가지가 있는데, 특정 조건에 따라서 Mesh가 정해지도록 해볼 것이다.

 

먼저 변수에 DoesHaveSkeletalMesh변수를 만들어준다. 이 변수를 통해 true면 SkeletalMesh, false면 StaticMesh가

되도록 할 것이다. 이는 Branch를 통해 분기를 만들어 줄 것이다.

 

StaticMesh Component는 저번에 만들었던 Cube를 사용할 것이고,

SkeletalMesh Component는 콘텐츠 브라우저1에서 새로 추가해준다.

엔진 콘텐츠 - 필터(스켈레탈 메시 체크) -  TutorialTPP를 콘텐츠 폴더로 복사


각각의 Mesh에 맞춰서 넣어준다.


true와 false에 따라서 Mesh가 달라지는 것을 볼 수 있다.


함수 / 이벤트 / 매크로

- 함수 : 반환값 있음. 지역변수 사용가능. 입력값 출력값을 여러개 가질 수 있음

- 이벤트 : 반환값이 없음(출력이 없음). 지역변수 사용 못함.

Delay 노드 : 잠복성 노드(우측 상단에 시계가 있는 것), 특성 시간 후에 다음 작업을 하는 것

  • 실행핀이 들어오면 Duration값만큼 있다가 다음으로 넘어가는 것
  • 이벤트에서만 사용 가능(함수는 실행 시에 결과를 바로 반환해야 한다는 이유로 사용 불가능)

 

- 매크로 : C++에서의 #define. 치환해주는 것과 같은 기능이라 할 수 있음. 지역변수(로컬변수) 사용 가능.

       ※ # : 전처리기(#define, #include, #if, #ifdef 등등). 지정해둔 것으로 치환됨. 컴파일 전에 먼저 처리.

  • 실행핀(입력)과 출력핀(출력)을 여러개 가질 수, 만들 수 있다.
  • 입력에서 string의 기본값을 넣어줄 수 있다.
  • 매크로 내에서 작성해놓은 내용이 그대로 치환되는 것.
  • 입력 출력의 자료형 중에 와일드카드가 사용 가능.
  • 매크로의 문제는 매크로가 치환되고 나서 알 수 있음.
  • 와일드카드가 한번 결정되고 나면, 매크로 내부의 모든 와일드카드가 동일하게 바뀜.

 

매크로에만 있는 자료형 와일드카드

 

받는 자료형에 따라서 매크로의 와일드카드 전체가 자동으로 바뀜

※ 와일드카드

  • 입력받은 자료형 종류에 맞춰서 알아서 바뀜.
  • 받는 것은 어느 것이든 받아올 수 있지만, 매크로 내부에서 오류가 발생할 수 있음.

For Each Loop 노드도 매크로와 비슷하다고 할 수 있다.


매크로를 통해 이벤트에서 사용할 지역변수 만들기

이벤트에서는 지역변수(로컬)을 직접 만들어서 넣을 수 없다. 따라서 임의로 로컬변수를 따로 만들어 사용할 수 있다.

매크로를 지역변수처럼 사용하는 것인데,  앞서 배운 WildCard를 활용하여 만들 수 있다.

 

지역변수처럼 사용할 매크로를 하나 생성(LocalVar)한다. 그리고 로컬 와일드카드 노드를 추가하고 출력과 핀을 연결한다.

지역변수의 역할을 할 LocalVar매크로

이렇게 만든 LocalVar를 이벤트에서 Get형식으로 사용이 가능하다.

LocalVar노드가 변수처럼


노드로 접기 / 함수로 접기 / 매크로로 접기

우리가 만든 로직을 다른 곳에서 재사용을 해야한다고 하면 그 로직을 전체 선택한 뒤,  우클릭을 누르면

노드 / 함수 / 매크로로 접기를 통해 좀 더 깔끔하게 정리하여 재사용할 수도 있다.