1.3 - 변수

Blueprints 예제 레벨에 대한 개요로, 예제 1.3: Variables 입니다.

Windows
MacOS
Linux

BPVariablesExample.png

이 예제에는 두 개의 스포트 라이트가 셋업된 블루프린트 액터가 있습니다. 각 스포트 라이트의 컬러는 변수 로 제어됩니다. 프로그래밍에서 변수 란 일정량의 데이터를 저장하는 컴퓨터 메모리상의 위치로 정의됩니다. 블루프린트 스크립트에서도 변수는 정확히 같은 방식, 즉 일정 유형의 정보를 넣어두고 찾아쓸 수 있는 가상의 컨테이너로 사용됩니다. 우리 예제에서 각 라이트는 Linear Color 변수를 사용하는데, 여기에는 특정한 색의 RGB 값이 저장됩니다. 이 색의 기본 값을 넣을 수도, 다양한 곳에서 쓰기 위해 꺼내쓸 수도, 새로운 색을 설정할 수도 있습니다. 모두 블루프린트 스크립트의 일부로써 말입니다.

이 예제에서 주로 Linear Color 변수를 사용하고 있기는 하지만, 블루프린트 스크립트에서 사용할 수 있는 변수 유형은 여러가지입니다. 각 변수형마다 각기 다른 유형의 데이터를 담으며, 기본적인 데이터 유형에는 어떤 것들이 있는지 최소한 기본적인 이해는 해 두는 것이 좋습니다. 그 종류에 대한 목록과 변수 사용법에 대한 상세 정보는 블루프린트 변수 관련 문서 를 참고해 주시기 바랍니다.

왼쪽 스포트 라이트에서 이 변수는 public (퍼블릭) 설정이 되어 있어, 에디터에서 블루프린트 액터를 선택한 상태에서 디테일 패널을 통해 편집 가능합니다. 오른쪽에도 구성은 비슷한데, Linear Color 변수가 private (프라이빗)으로 남아있습니다. 즉 컬러 값을 변경하기 위해서는, 액터에 대한 블루프린트 스크립트를 열어 프라이빗 변수에 대한 기본 세팅을 변경하거나 다른 방식, 이를테면 스크립트 함수성의 일환으로 변경해 줘야 합니다.

변수를 퍼블릭 설정하려면 Editable (편집가능) 프로퍼티를 체크하거나, 내 블루프린트 창에서 변수 이름 옆에 눈 아이콘을 클릭해야 합니다. 변수가 편집가능해 지면, 그 옆의 눈 아이콘이 노랑으로 강조됩니다. 변수를 공개적으로 편집할 수는 있으나, 툴팁이 없어 사용자들이 헛갈릴 수가 있다는 것을 나타냅니다. 그런 문제 해결을 위해 변수의 Tooltip 프로퍼티에 설명을 입력해 줍니다. 그러면 눈 모양 버튼이 초록으로 나타납니다.

초보자들에게 중요한 참고사항이라면, 변수를 항상 퍼블릭 설정하는 것은 좋지 않습니다. 핵심적인 변수를 사용자가 쉽게 바꿀 수 있도록 해 버리면 중요한 기능이 깨지거나 변형되어 버릴 수가 있는 것입니다. 아티스트나 레벨 디자이너가 접근할 필요성이 있는 것들만 퍼블릭 변수로, 건드리지 말았으면 하는 나머지 변수는 프라이빗으로 설정되었는지 항상 확인하시기 바랍니다.

퍼블릭 변수에는 어디에 사용된 것인지 반드시 툴팁을 잊지마세요!

컴포넌트

이 블루프린트 액터에서는 컴포넌트를 꽤나 많이 활용하는데, 완전히 별개로 작동하는 라이트가 둘 있기 때문입니다. 대부분의 컴포넌트는 스태틱 메시 컴포넌트이며, 약간의 텍스트 렌더 컴포넌트가 라벨에 사용되었습니다. 물론 이펙트의 완성에는 약간의 스포트 라이트 컴포넌트도 필요합니다.

LightComponentList.png LightComponentPreview.png

별개의 셋업이 둘 있는데, 본질적으로 둘 다 같기는 합니다. 각 라이트의 컴포넌트 셋업은 다음과 같습니다:

참고로 Public, Private 이란 단어는 각각의 라이트 셋업 앞에 접두사로 붙습니다! 또한 들여쓰기 역시 컴포넌트 리스트 안에서와 마찬가지로, 한 컴포넌트와 다른 컴포넌트 사이의 모자관계를 나타낸다는 점 유의하시기 바랍니다.

  • Wall Mount 벽 고정대 - 벽에 고정된 것처럼 보이는 스태틱 메시 컴포넌트입니다.

    • Bracket 죔쇠 - 벽 고정대에 부착되어 조명 기구를 붙들고 있는 것처럼 보이는 스태틱 메시 컴포넌트입니다.

      • Light Fixture 조명 기구 - 조명 기구 자체에 대한 스태틱 메시 컴포넌트입니다. 플레이어에게는 스포트 라이트로 나타납니다. 두 번째 머티리얼 엘리먼트(Element 1)에는 라이트의 색에 일치되도록 컬러가 업데이트되는 특수한 머티리얼이 적용되어 있습니다.

        • Spot Light 스포트 라이트 - 이펙트의 실제 조명을 나타내는 스포트 라이트 컴포넌트입니다.

    • Text 텍스트 - 퍼블릭이냐 프라이빗이냐 라벨로 사용되는 텍스트 렌더 컴포넌트입니다.

      • Description 설명 - 이펙트에 대해 자세한 설명을 돕는 설명 문구입니다.

변수 셋업

블루프린트 액터에 컴포넌트를 추가하면, (그래프 모드에서 보이는) 내 블루프린트 패널에 각 컴포넌트의 값이 자동으로 채워지는 것을 볼 수 있습니다. 이로써 컴포넌트에서 데이터를 구해오거나 컴포넌트의 데이터를 설정할 필요가 있을 때 컴포넌트 각각에 접근할 수 있게 됩니다. 거기에 추가로, 딱 이 예제만을 위해서 특별 구성된 변수가 몇 가지 있습니다.

LightVariables.png

이 이펙트를 위해 특별히 생성된 커스텀 변수는 다음과 같습니다:

  • PublicColor 퍼블릭 컬러 - 왼쪽에 있는 퍼블릭 라이트에 적용된 컬러를 보관하는 Linear Color 변수입니다. 프로퍼티에서 기본으로 초록 값을 설정했습니다.

  • PrivateColor 프라이빗 컬러 - 마찬가지로 오른쪽에 있는 프라이빗 라이트에 적용된 컬러를 보관하는 Linear Color 변수입니다. 프로퍼티에서 기본으로 빨강 값을 설정했습니다.

조명 기구의 렌즈에 적용된 다이내믹 머티리얼 인스턴스의 저장을 위해 두 개의 변수가 추가로 생성되었습니다. 위의 변수에서 그리로 컬러 값을 전송한 다음, 차례로 라이트의 렌즈 색을 스포트 라이트 컴포넌트의 색에 맞춰 변화시키도록 구성된 것입니다.

  • PublicLightLensMaterial 퍼블릭 라이트 렌즈 머티리얼 - 퍼블릭 라이트 조명 렌즈의 다이내믹 머티리얼 인스턴스를 저장합니다.

  • PrivateLightLensMaterial 프라이빗 라이트 렌즈 머티리얼 - 프라이빗 라이트 조명 렌즈의 다이내믹 머티리얼 인스턴스를 저장합니다.

변수 생성

모든 변수를 내 블루프린트 패널에서 수동 생성해 줘야 하는 것은 아닙니다. 노드의 입력이나 출력 중 변수에 저장해야겠다 알고있는 값이 있다면, 해당 데이터 핀에 우클릭한 다음 컨텍스트 메뉴에서 변수로 승격 을 선택하면 됩니다. 그러면 다음과 같은 작업을 합니다:

  • (변수 왼쪽에 있는) 데이터 입력에 우클릭한 경우

    • 적합한 유형의 변수가 새로 생성됩니다.

    • 새 변수의 이름을 바로 입력해도 됩니다.

  • (변수 오른쪽에 있는) 데이터 출력에 우클릭한 경우

    • 적합한 유형의 변수가 새로 생성됩니다.

    • 새로운 변수에 대한 Set 노드도 같이 생성되어, 새로운 변수의 초기값이 핀의 출력 값과 동일하게 설정됩니다.

컨스트럭션 스크립트

이 이펙트 내 대부분의 작업은 사실상 컨스트럭션 스크립트 안에서 이루어집니다. 게임이 시작되면 라이트를 업데이트할 필요가 없어지기 때문에, 이벤트 그래프는 사용하지 않습니다.

이 예제의 컨스트럭션 스크립트에 대한 이해를 돕기 위해, 아래와 같이 일련의 코멘트 블록으로 나누어 두었습니다:

클릭하면 원래 크기로 볼 수 있습니다.

이 예제의 컨스트럭션 스크립트를 블루프린트 에디터에서 직접 열어보시면 더욱 쉽게 시각화시켜 보실 수 있습니다!

수행되는 작업은:

  • 라이트 컬러 설정

  • 다이내믹 머티리얼 인스턴스 생성 및 변수에 저장

  • 새 다이내믹 머티리얼 인스턴스를 조명 기구 메시에 할당

  • 다이내믹 머티리얼 인스턴스의 컬러 설정

라이트 컬러 설정하기

SetLightColor.png

스크립트의 이 부분에서는 적용된 기본값을 받아다가 각 라이트의 Light Color 에 물려주기만 합니다. 스크립트에서 처음 이뤄지는 작업이기에, 프라이빗 변수에는 빨강, 퍼블릭 변수에는 초록이었던 기본값을 적용하는 것으로 시작합니다. 가장 쉬운 노드 구성 방법은:

  1. 그래프에 각 스포트 라이트 컴포넌트를 Ctrl-드래그하여 Get 레퍼런스를 만듭니다.

  2. 그 각각에서 선을 드래그한 다음 검색줄에 "Light Color" 를 입력합니다. 목록에서 Set Light Color 노드를 찾을 수 있습니다.

SetLightColor_node.png

다이내믹 머티리얼 인스턴스 생성 및 저장

CreateStoreDMI.png

망의 다음 부분에서는 각각의 Light Fixture (조명 기구) 스태틱 메시에 대한 다이내믹 머티리얼 인스턴스를 생성합니다. 다이내믹 머티리얼 인스턴스란 게임플레이 도중 어떠한 방식으로 업데이트시킬 수 있는 인스턴싱된 머티리얼 사본입니다. 여기서는 스포트 라이트 컴포넌트에 사용된 색에 일치하도록 머티리얼의 이미시브 컬러를 변경하면 됩니다.별개의 다이내믹 머티리얼 인스턴스를 두 개 만든 것을 확인할 수 있습니다. 왜냐면 두 가지 색에 대해 각기 다른 인스턴스가 필요하기 때문입니다.

각각의 Create Dynamic Material Instance 노드 이후, 새로 생성된 머티리얼을 변수에 저장하는 것도 보입니다. 이를 통해 나중에 색을 조정했으면 하는 경우 머티리얼에 접근할 수 있게 됩니다. 그냥 Return Value 출력을 망 후반부의 다른 곳에 연결할 수도 있었으나, 변수에 저장함으로써 블루프린트 스크립트가 더욱 깔끔해 보일 뿐만 아니라 이벤트 그래프에서 머티리얼이 필요할 경우 접근도 쉬워집니다.

새 다이내믹 머티리얼 인스턴스 할당하기

AssigningDMIs.png

다이내믹 머티리얼 인스턴스를 생성하는 것만으론 충분치 않습니다. 그렇게 새로 만든 머티리얼을 메시의 표면에 할당해 주기도 해야 합니다. 스크립트의 이 부분에서는 새 다이내믹 머티리얼 인스턴스를 조명 기구 스태틱 메시에 적용합니다. 여기서 중요한 점은, 스태틱 메시에서 렌즈에 놓기 위해 구성해 두었던 머티리얼 엘리먼트 인덱스 1 을 사용한다는 점입니다. 즉 라이트 렌즈의 색을 바꾸는 데 머티리얼이 사용된다는 뜻입니다.

다이내믹 머티리얼 인스턴스에 대한 컬러 설정

SetLensColor.png

다이내믹 머티리얼 인스턴스가 표면에 적용되었으니, 이제 최종 단계는 그 머티리얼에 색을 할당하는 것입니다. 우리의 경우 이 작업은 두 개의 변수를 통해 이루어 졌습니다. 하나는 퍼블릭으로, 다른 하나는 프라이빗으로 만들었습니다. 그러나 이 예는 교육용 목적이 강해서 그렇지, 실전적으로는 두 변수 다 퍼블릭인 것이 좀 더 유용할 지도 모릅니다.

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼