언어:
페이지 정보
태그:
엔진 버전:
언리얼 엔진

블루프린트 통신 방법

언리얼 엔진

다수의 블루프린트 작업시, 그 사이에 정보를 전달하거나 공유하기 위해서는, 일정한 형태의 블루프린트 통신 을 사용해야 합니다. 필요에 따라 여러가지 다양한 유형의 통신 방식을 사용할 수 있는데, 여기서는 가장 흔히 쓰이는 방법에 대한 개괄적인 소개와 아울러, 자세한 사용 예제와 링크를 제공해 드리겠습니다.

직접 블루프린트 통신

2_9.png

직접 블루프린트 통신 (또는 블루프린트 통신) 은 가장 흔한 통신 방법으로, 특정 시점에서 서로 대화를 하고자 하는 것으로 알고있는 블루프린트 액터 가 두 개 있을 때 좋습니다. 이러한 통신 유형은 항상 1:1, 즉 한 블루프린트 (작업 블루프린트) 가 다른 블루프린트 (타깃 블루프린트) 로의 접근을 요청하는 것입니다. 블루프린트 통신 을 이용하는 가장 단순한 방법은, 공개적으로 노출된 오브젝트 변수 를 통해 타깃 블루프린트 로의 레퍼런스를 구한 다음 접근하고자 하는 블루프린트의 인스턴스를 지정하는 것입니다.

자세한 정보는 블루프린트 직접 통신 문서를 참고하세요.

사용 시점

블루프린트 통신 을 사용하기 좋은 예는 아래와 같습니다:

  • 레벨의 한 액터가 다른 액터와 통신하도록 하고자 할 때.

    • 레벨에 있는 스위치를 조작하면 특정 문을 열거나 라이트를 켭니다 (이들 각각은 별도의 블루프린트입니다).

직접 블루프린트 통신 셋업 길잡이는 직접 블루프린트 통신 문서를 참고하세요.

이벤트 디스패처

OpenDoorEventDispatch.png

Event Dispatcher (이벤트 디스패처)는 이벤트 발생 여부를 리스닝(listen, 대기)하는 다른 블루프린트에 알리기에 적합합니다. 이벤트가 발생하면, 리스닝중이던 블루프린트는 그에 반응하여 서로간에 독립적으로 하고자 하는 작업을 하도록 할 수 있습니다.

예를 들어 게임에 죽으면 "OnDied" (사망시) 이벤트 디스패처를 호출하는 보스가 있다고 칩시다. 그 OnDied 이벤트를 다른 블루프린트에 Bind (바인딩) 하면 여러가지 작업을 할 수 있습니다. 예를 들어 캐릭터에 하면 축하 동작을 하고, 문에 하면 열리고, HUD 에 하면 어떤 UI 메시지가 반짝이는 것입니다. 이 모두 보스가 죽었다는 OnDied 노티파이를 받을 때 실행되는 것입니다.

자세한 정보는 이벤트 디스패처 문서를 참고하세요.

사용 시점

이벤트 디스패처 를 사용할 수 있는 경우는 아래 예와 같습니다:

  • 캐릭터 블루프린트에서 레벨 블루프린트로 통신하고자 합니다.

    • 플레이어 캐릭터가 레벨 업 하여 기존에 잠긴 영역을 열고자 합니다.

    • 플레이어 캐릭터가 레벨에 무언가가 벌어지는 액션 버튼을 눌렀습니다.

  • 스폰된 액터에 무언가 실행되면 이벤트가 발동되도록 하고 싶습니다.

    • 보스를 스폰하고, 보스가 죽으면 월드에 보상이 스폰되는 이벤트가 발동됩니다.

    • 레벨에 (웨폰, 헬쓰 등의) 아이템을 스폰하고, 픽업시 아이템과 캐릭터에게 알립니다.

이벤트 디스패처 셋업 관련 길잡이는 이벤트 디스패처 문서를 참고하세요.

블루프린트 인터페이스

InterfaceNodes.png

블루프린트 인터페이스 (줄여서 인터페이스)는 모두 특정 함수성을 공유하는 여러 유형 오브젝트와 상호작용할 때 흔히 쓰이는 방법입니다. 예를 들어 즉 차와 나무처럼 완전히 다른 유형의 오브젝트도 무기로 쏴서 대미지를 입힐 수 있다는 점에서 한 가지 공통점이 있습니다.

OnTakeWeaponFire 함수가 들어있는 블루프린트 인터페이스 를 만든 다음 차와 나무에서 그 블루프린트 인터페이스 를 구현하면 차와 나무를 똑같이 취급하여 어느 것이 총에 맞더라도 OnTakeWeaponFire 를 호출하기만 하면 다르게 반응하도록 할 수 있습니다.

인터페이스는 일종의 계약입니다. "이 인터페이스를 구현하면, 너는 여기 지정된 함수를 구현하고, 내가 호출하면 거기에 반응한다고 약속한다"는 것입니다. 여러 블루프린트에서 하나의 인터페이스를 구현할 수는 있지만, 연관이 있는 것들만 반응합니다 (연관이 없는 것들은 그냥 호출을 무시합니다). 무기 발사 예제로 돌아가서, 벽이 대미지에 반응하지 않도록 하려면, 그냥 OnTakeWeaponFire 로 인터페이스를 구현하지 않으면 될 것입니다.

자세한 정보는 블루프린트 인터페이스 구현하기 문서를 참고하세요.

사용 시점

각각의 블루프린트 인터페이스 통신 방법을 사용하기에 적합한 경우의 예제는 다음과 같습니다:

  • 다수의 블루프린트에 비슷은 하지만 호출했을 때 다르게 실행되는 함수성이 몇 있습니다.

    • 플레이어가 화염방사기가 있는데, 사용하면 ElementalDamage 라는 이벤트를 호출합니다. 나무 블루프린트가 호출을 받으면 나무를 불태우는 반면, 눈사람 블루프린트는 눈사람을 녹입니다.

    • 플레이어가 "사용" 버튼이 있는데, 누르면 문이 열리고, 불이 꺼지고, 아이템을 줍고 등등의 동작을 합니다.

    • 적이 플레이어의 생명력에 따라 변하며 다르게 반응하는 특수 동작이 있습니다.

블루프린트 인터페이스 셋업 방법 안내는 인터페이스 사용법 문서를 참고하세요.

블루프린트 형변환

Event6.png

또 한 가지 흔히 쓰이는 블루프린트 통신 형태는 Cast (형변환) 노드를 사용하는 것입니다. 형변환 노드를 사용한다는 것은, 간단히 말해서 오브젝트에게 "너 그 오브젝트의 특수 버전이니?" 하고 물어서 그렇다면 접근을 허가하고, 아니면 요청을 무시하는 것입니다.

예를 들어 플레이어 캐릭터가 게임에서 날아다닐 수 있도록 해주는 Flying Character Blueprint (비행 캐릭터 블루프린트)라는 특수 캐릭터 블루프린트를 만들었다 칩시다. Get Player Character 노드를 사용해서 플레이어 캐릭터의 무브먼트 컴포넌트에 접근, 플레이어의 위치나 방향 설정 등 일반적인 방식으로 영향을 끼칠 수 있습니다. 비행 능력에는 접근할 수 없을텐데, 캐릭터 블루프린트는 비행에 대해서는 알지 못하기 때문입니다. 오직 "비행 캐릭터 블루프린트": 만 비행에 대해서 압니다. 이 경우, 플레이어 캐릭터를 가지고 비행 블루프린트에 형변환 해주면 비행 함수에 접근할 수 있을 것입니다.

플레이어 캐릭터가 비행 캐릭터 블루프린트를 사용하고 있지는 않지만, 대신 완전 다른 유형의 캐릭터 블루프린트를 사용중일 때, 비행 블루프린트에 형변환은 실패합니다. 비행 블루프린트를 사용하지는 않고 있기에 비행 명령에 접근하여 실행할 수가 없기 때문입니다.

자세한 정보는 블루프린트의 형변환 문서를 참고하세요.

사용 시점

블루프린트 형변환 을 사용할 수 있는 경우는 다음과 같습니다:

  • 다른 블루프린트의 특수 버전을 접근하고 싶습니다.

    • 캐릭터가 불에 닿으면 생명력 값을 깎습니다.

      • 특수 캐릭터 블루프린트에 형변환하여 생명력 값을 접근하고 변경합니다.

    • 캐릭터가 죽어 리스폰해야 합니다.

      • 특수 게임 모드 블루프린트에 형변환하여 리스폰 스크립트를 실행합니다.

  • 같은 클래스의 블루프린트 다수에 접근하여 모두 같은 방식으로 변경하고 싶습니다.

    • 레벨에 라이트가 여럿 있는데 어떤 이벤트가 발생하면 전부 켜거나 끄고 싶습니다.

      • 라이트 블루프린트에 형변환하여 라이트를 켜고 끄는 함수를 실행합니다.

  • 특정 자손 블루프린트에 접근하고 싶습니다.

    • 동물 블루프린트를 기반으로 한 블루프린트가 여럿 있습니다 (고양이, 개, 새). 그 동물 블루프린트 중 하나에 접근하고 싶습니다.

      • 고양이에 형변환, 개에 형변환, 새에 형변환, 등으로 각 블루프린트의 고유 함수성에 접근할 수 있습니다.

블루프린트 형변환 구성법 관련 안내는 블루프린트 형변환 예제 문서를 참고하세요.

태그