블루프린트의 형변환

다양한 Cast, 형변환 노드 사용법과 예제입니다.

Windows
MacOS
Linux

블루프린트 에서 Cast To, 형변환 노드를 사용한다는 것은, 간단히 말해, 형변환을 하려는 오브젝트가 형변환 대상 오브젝트와 같은지 검사해 보는 것입니다. 다른 말로 특수한 캐릭터 블루프린트 (예를 들어 MyCharacter) 가 있는데 그 안에 변수와 기타 커스텀 함수 기능이 들어있으며, 그것을 디폴트 폰 클래스( 또는 모든 플레이어 캐릭터가 기본으로 사용하는 캐릭터 블루프린트)로 할당했다 칩시다.

다른 블루프린트에서 플레이어 캐릭터의 프로퍼티에 접근하고자 하는 경우, Get Player Character 노드를 사용하여 매우 일반적인 방식으로 플레이어 캐릭터에 영향을 끼칠 (위치나 회전 등을 얻을) 수는 있지만, MyCharacter 블루프린트에 추가한 커스텀 함수 기능에 접근할 수는 없는데, 플레이어 캐릭터를 얻도록 구성된 것이지 특정 유형 캐릭터를 얻도록 구성된 것은 아니기 때문입니다.

Get Player Character 노드를 사용한 다음 (특수 캐릭터 블루프린트인) Cast To MyCharacter 노드를 사용하면, 이제 플레이어 캐릭터가 MyCharacter 라면 그 블루프린트에 들어있는 변수, 함수, 이벤트, 기타 특수 함수 기능에 접근하게 해달라고 할 수 있는 것입니다.

여기서는 형변환의 몇 가지 사용법에 대해 배워보겠으며, Cast To 노드 사용법은 예제를 살펴보고, 다른 형변환 유형으로는 타깃 블루프린트 형변환에 대해서도 읽어보세요.

예제 용례

아래는 블루프린트 형변환 을 언제 사용하는지에 대한 예제 몇 가지입니다:

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

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

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

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

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

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

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

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

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

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

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

Cast To 예제 구성

아래 예제는 Cast To 노드를 사용하여 한 블루프린트에서 다른 블루프린트에 접근하는 법을 보여줍니다.

이 예제에서는, 레벨에 (액터인) 화염 이펙트 블루프린트가 있고, 그것이 플레이어가 사용하는 플레이가능 캐릭터 블루프린트 와 통신하도록 하고 싶습니다. 플레이어가 화염에 들어서면, 캐릭터 블루프린트 에 플레이어가 화염에 들어서서 대미지를 받아야 한다는 신호를 보내고자 합니다. OverlapEventReturn Value 를 사용하여 우리 캐릭터 블루프린트Cast To (형변환)시키면 그 안의 이벤트, 함수, 변수에 접근할 수 있습니다.

3_0a.png

  • 위의 화염 이펙트는 (시작용 콘텐츠에 포함된) Blueprint_Effect_Fire 애셋입니다.

  • Trigger 라는 이름의 구체 컴포넌트가 블루프린트에 추가되어 콜리전이 OverlapOnlyPawn 으로 설정되었습니다.

블루프린트 형변환 을 사용하여, 다음과 같은 작업을 해 줍니다:

  1. Default Pawn Class 에 할당된 캐릭터 블루프린트 (플레이 가능 캐릭터)가 접근하고자 하는 타깃 블루프린트 입니다.

    3_0b.png

    Default Pawn Class편집 - 프로젝트 세팅맵 & 모드 섹션에서 확인할 수 있습니다.

  2. 이제 우리 타깃이 MyCharacter 블루프린트임을 알았으니, 플레이어가 Is on Fire (불이 붙었는지) 나타내는 부울 변수를 만듭니다.

    3_0c.png

    위에서 Every Tick분기 에 물려 True 인 경우 Apply Damage 를 화면에 출력합니다 (True 다음이 대미지 적용 스크립트가 있을 곳입니다).

  3. Blueprint_Effect_Fire 블루프린트 안에서, 트리거 에 대한 두 개의 이벤트, OnComponentBeginOverlapOnComponentEndOverlap 를 추가합니다.

    3_1.png

  4. 이벤트를 추가한 상태로, Other Actor 핀을 끌어 놓은 다음 검색창에 Cast To My 를 입력합니다.

    3_2.png

    여기서 이벤트를 발동시키고자 하는 액터 (MyCharacter 블루프린트)를 검사/할당한 다음 Cast To 시켜서 화염 블루프린트에서 접근할 수 있도록 해 줬습니다.

  5. Cast To MyCharacter 옵션을 선택합니다.

  6. 노드를 추가한 상태로, As My Character C 핀을 끌어 놓으면 그 안의 이벤트, 변수, 함수 등을 접근할 수 있습니다 (이 경우 Set Is on Fire).

    3_3.png

  7. Blueprint_Effect_Fire 블루프린트의 두 이벤트 모습은 이럴 것입니다.

    3_4.png

    불에 겹치면 MyCharacter 블루프린트의 IsOnFire 변수를 True 로 설정하고, 더이상 겹치지 않으면 False 로 설정합니다. MyCharacter 블루프린트 안에서, 화염 블루프린트를 통해 IsOnFireTrue 로 설정되면, 화면에 Apply Damage 를 출력합니다 (아니면 헬쓰/대미지 시스템이 있는 경우, 대미지를 적용하여 플레이어의 헬쓰를 깎을 수도 있습니다).

타깃 블루프린트 형변환

변수를 특정 유형 블루프린트로 Cast To (형변환)해 줘야 접근할 수 있는 경우도 있습니다.

CreateCasting.png

위 그림에서 1 번의 경우, Save Game Object 가 생성되어 SaveGameObject 변수에 할당됩니다. 그리고 그 변수가 MySaveGame 이라는 세이브 게임 블루프린트로 형변환하는 데 사용되어, 최고 점수, 최고 기록 등의 세이브 게임 정보를 전달 또는 받을 수 있습니다.

위 그림에서 2 번의 경우, 위젯 블루프린트 를 생성하여 UserWidget 변수에 할당합니다. 그 변수가 MyWidgetBlueprint 라는 위젯 블루프린트로 형변환하는 데 사용되어, (HUD 또는 다른 UI 요소가 될 수도 있는)위젯 블루프린트에서 정보를 업데이트하거나 받을 수 있습니다.

기타 형변환 유형

다른 블루프린트 분류로 Cast To (형변환)하는 데 사용 가능한 특수 함수가 몇 가지 있습니다.

OtherCasting.png

위 예제 그래프에서, 다음과 같은 예제가 주어집니다:

블루프린트

설명

Character (1)

Get Player Character 노드가 사용되어 MyCharacter 라는 캐릭터 블루프린트로 형변환하고 있습니다.

PlayerController (2)

Get Player Controller 노드가 사용되어 MyController 라는 플레이어 컨트롤러 블루프린트로 형변환하고 있습니다.

Game Mode (3)

Get Game Mode 노드가 사용되어 MyGame 이라는 게임 모드 블루프린트로 형변환하고 있습니다.

Pawn (4)

Get Controlled PawnGet Player Controller 노드가 사용되어 MyPawn 이라는 폰 블루프린트로 형변환하고 있습니다.

HUD (5)

Get HUDGet Player Controller 노드가 사용되어 MyHUD 라는 HUD 블루프린트로 형변환하고 있습니다.

위 각각의 예제에서 As My X (X 는 블루프린트 유형) 노드를 끌어 놓는 것으로, 그 각각의 블루프린트에서 이벤트, 변수, 함수 등을 접근할 수 있습니다.

또 한 가지, Get Player CharacterGet Player Controller 노드의 Player Index 값을 사용하여 멀티플레이어 상황에서 각기 다른 플레이어를 지정할 수 있습니다. 싱글 플레이어의 경우 얘들은 0 으로 놔둬도 됩니다.

Select Skin
Light
Dark

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

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

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

네이버 카페
공식 포럼