일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 티스토리챌린지
- exception
- lua
- Smart Pointer
- 영화
- 언리얼
- 상속
- 루아
- 예외
- Effective c++
- 오블완
- 영화 리뷰
- effective stl
- more effective c++
- reference
- 다형성
- implicit conversion
- virtual function
- UE4
- 참조자
- 비교 함수 객체
- resource management class
- Vector
- 메타테이블
- 암시적 변환
- c++
- 스마트 포인터
- 반복자
- 게임
- operator new
- Today
- Total
스토리텔링 개발자
[UE4] 블루프린트의 매크로와 함수 본문
개요
블루프린트에서는 로직을 한 덩어리로 묶을 수 있도록 하는 두 가지 방법을 제공합니다.
네, 매크로와 함수 입니다.
이 둘의 차이점은 어떻게 될까요?
매크로 vs 함수
이 매크로라는 단어에서는 친숙함에 물씬 느껴집니다.
네.
C++에서 수없이 언급되는 개념이죠.
그저 아무 이유 없이 이름이 같을 리는 없을테고,
역시나 이 둘은 같은 개념입니다.
즉,
BP의 매크로와 함수 는 C++의 매크로와 함수 대응 관계와 흡사합니다.
먼저 C++의 매크로와 함수를 비교해 보도록 합시다.
C++ 함수
코드를 사용 단위로 구분하자면,
함수는 코드 뭉치의 최소 단위라고 할 수 있습니다.
C++ 매크로
C++의 매크로는 컴파일 시 특정 코드(들)로 치환해줍니다.
코드 뭉치에 별명을 붙인다고 볼 수 있습니다.
단지 치환해줄 뿐이므로 매크로로 이름 붙인 코드 뭉치에는 여러 함수들이 포함될 수도 있습니다.
이를 BP 개념으로 파악해보면 이렇게 정리할 수 있습니다.
매크로 : 여러 노드들로 이루어진 로직의 흐름에 별명을 붙인 것
함수 : 일반적으로 사용할 단일 노드를 정의하는 것
차이점
그렇다면 각각은 언제 사용하는 게 좋을까요?
BP에서의 매크로와 함수의 명확한 차이점을 짚어보면 알 수 있을 것 같습니다.
실행핀
함수는 입출력 실행핀을 하나씩만 가질 수 있고,
매크로는 실행핀을 원하는 만큼 추가하여 사용할 수 있습니다.
매크로는 왜 자유롭게 입출력 실행핀을 추가할 수 있을까요?
앞서 말했듯 매크로는 코드 뭉치들의 별명을 붙일 뿐이기 때문입니다.
즉, 다양한 구조의 코드 뭉치들에 모두 대응하려면 입출력 갯수 역시 자유로워야 합니다.
예컨대 아래와 같은 방식으로 매크로를 만든다면, 함수처럼 출력이 하나여서는 불가능하겠죠.
하지만 함수는 최소 단위여야 하기 때문에 실행 흐름을 임의로 추가할 수 없습니다.
C++에 노출
함수는 인터페이스를 C++로 노출할 수 있습니다.
선언과 정의를 나누어서 선언부를 C++에, 정의부를 블루프린트에서 처리할 수 있습니다.
이렇게 구성하면 C++에서도 해당 함수를 사용할 수 있습니다.
하지만 매크로는 블루프린트 내부 로직의 별명일 뿐이므로 C++에서는 접근할 방법이 없습니다.
리플리케이션
만약 서버-클라이언트 구성의 멀티 플레이 게임이라면 리플리케이션 기능이 필요합니다.
함수는 리플리케이션 함수 처리가 가능합니다.
하지만 매크로는 블루프린트 내부 로직의 별명일 뿐이므로 리플리케이션 처리가 불가능합니다.
'개발 > 언리얼 엔진' 카테고리의 다른 글
[UE4] 애니메이션 노티파이 브랜칭 포인트(Animation Notify Branching Point) (0) | 2022.01.20 |
---|---|
[UE4] 애니메이션 노티파이(Animation Notify) (0) | 2022.01.10 |
[UE4] 모프 타겟(Morph Target) (0) | 2021.11.16 |
[UE4] 사운드 에셋(Sound Asset) (0) | 2021.11.04 |
[UE4] 렌더 하드웨어 인터페이스(RHI, Render Hardware Interface) (0) | 2021.11.02 |