블루프린트에서 액터 검색

블루프린트에서 액터를 검색하는 하우투 안내입니다.

Windows
MacOS
Linux

여기서는 Get All Actors of Class 노드를 사용하여 레벨에 있는 액터를 검색하는 법에 대한 예제를 다루겠습니다. 이 노드를 호출하면 레벨에 있는 지정된 클래스의 액터 전부를 구해 배열 (변수 집합)에 넣으며, 그 배열에서 필터링을 적용한 범주에 따라 모든 액터 또는 개별 액터를 꺼내올 수 있습니다. 그런 다음 프로퍼티에 접근하여 그 액터의 유형이나 이루고자 하는 바에 따라 어떤 식으로든 변경할 수 있습니다.

클래스의 모든 액터 구하기

이 예제에서는 시작용 콘텐츠 포함 블루프린트 삼인칭 템플릿 을 사용했습니다.

  1. 콘텐츠 브라우저 안에서 Game/Blueprints 아래 Blueprint_Effect_Fire 애셋을 세 개 끌어 놓습니다.

    Actors1.png

    그냥 찾고자 하는 아이템으로 추가하는 것이니, 아무데나 배치합니다.

  2. 콘텐츠 브라우저 에서 Game/Blueprints 폴더 아래 MyCharacter 애셋을 엽니다.

  3. 블루프린트 에디터 창 의 그래프에 우클릭 한 다음 F Key Event 를 추가합니다.

    Actors2.png

    F 를 누르면 씬에 있는 액터를 찾도록 시도해 보겠습니다.

  4. F Key Event 의 Pressed 핀을 끌어놓고 Get All Actors Of Class 노드를 추가합니다.

    Actors3.png

    이름이 암시하는 대로 지정된 클래스의 액터를 전부 구하는 시도를 합니다.

  5. Get All Actors of Class 노드에서 Actor Class 드롭다운을 클릭한 다음 Blueprint_Effect_Fire 클래스를 추가합니다.

    Actors4.png

  6. Out Actors 를 끌어놓고 ForEachLoop 노드를 추가합니다.

    Actors5.png

    Out Actors 는 (지정한 클래스의) 모든 액터로 이루어진 배열 로, 그 "각각에 대해" (For Each) 어떤 작업을 할 수 있습니다.

  7. ForEachLoop 노드의 Array Element 를 끌어놓고 P_FireFire AudioGet 합니다.

  8. 그래프에 우클릭 한 다음 Deactivate 노드를 추가한 뒤 화염과 오디오 핀을 Target 에 연결합니다.

    이미지를 클릭하면 원래 크기로 봅니다.

    여기서는 플레이어가 F 를 누르면 레벨에 있는 화염 이펙트 인스턴스 전부를 구하여 비활성화시킵니다.

  9. 컴파일 버튼을 클릭한 뒤 블루프린트를 닫고 플레이 를 클릭하여 에디터에서 플레이합니다.

F 키를 누르면 레벨에 배치한 화염 인스턴스 전부를 비활성화시킬 수 있을 것입니다.

이 방법을 사용하여, 특정 클래스의 액터 전부를 찾아 어떠한 방식으로 영향을 끼칠 수 있지만, 특정 클래스의 액터를 전부 찾은 다음 그 전부가 아닌 그 클래스 안의 특정 액터 또는 세트에만 영향을 끼치려면 어떻게 해야 할까요? 다음에는 결과 배열에 필터를 적용하여 전체가 아닌 일부분만 구하기 위해 취할 수 있는 방법을 보여드리겠습니다.

특정 액터 구하기

전 부분에서는 Get All Actors of Class 노드를 사용하여 지정된 클래스의 액터 배열 을 만드는 법을 배웠습니다. 여기서는 다양한 범주에 따라 배열에 필터를 적용하여 그 배열에서 특정 액터(들)을 구하는 방법을 보여드리겠습니다.

한 가지 방법은 액터에 태그 를 사용하는 것으로, 예를 들면:

  1. 전 부분의 예제를 이어서, 레벨의 화염 이펙트 중 하나를 선택합니다.

  2. 디테일 패널에서 Tags 섹션을 찾은 다음 더하기 부호를 클릭하여 액터에 태그를 추가합니다.

    Actors8.png

  3. 0 칸에 Target 같은 텍스트를 태그로 입력합니다.

    Actors9.png

  4. MyCharacter 블루프린트 안에서 ForEachLoopArray Element 를 끌어놓고 Get Tags 노드를 추가합니다.

    Actors10.png

  5. Tags 핀을 끌어놓고, Get 노드를 추가합니다.

    Actors11.png

    여기서 (위에서 Target 으로 설정한) Index 0 의 Tag 를 "Get" 하고 있습니다.

  6. 그래프에 우클릭 한 다음 Branch, 분기 노드를 추가합니다.

  7. BranchCondition 을 끌어놓고 Actor Has Tag 노드를 추가합니다.

  8. Get 노드의 출력 핀을 Actor Has Tag 노드의 Tag 핀에 연결합니다.

  9. ForEachLoopArray Element 핀을 Actor Has Tag 노드의 Target 핀에 연결합니다.

    Actors12.png

  10. ForEachLoopArray Element 핀을 끌어놓고 Get P_FireGet Fire Audio 를 추가한 뒤, Deactivate 노드에 연결합니다.

    이미지를 클릭하면 원래 크기로 봅니다.

    여기서는 지정된 클래스의 액터를 전부 모은 이후 배열에 넣은 다음 각 액터마다 지정한 태그가 있는지 검사한 뒤, 있는 경우에만 비활성화시킵니다.

필터링 결과의 또다른 예입니다:

이미지를 클릭하면 원래 크기로 봅니다.

위 예제에서는 특정 블루프린트의 클래스가 아닌 Emitter 클래스의 모든 액터를 구하고 있습니다 (레벨에 있는 연기, 화염, 바람, 비, 안개 등 여러가지 이미터를 모두 끄고자 하는 경우에 사용할 수 있습니다). Emitter 오브젝트로 Cast 한 다음 이미터가 활성화 상태인지 검사하고, 그렇다면 비활성화시킵니다.

ForEachLoop 뒤에 항상 오브젝트로 형변환할 필요는 없는데, 아래 예제를 봅시다:

이미지를 클릭하면 원래 크기로 봅니다.

여기서는 레벨에 TriggerBox 클래스의 모든 액터를 구한 다음 그 콜리전을 끄고 있습니다 (레벨의 모든 트리거를 끕니다). TriggerBox 로 Cast To 하지는 않았는데, TriggerBox 의 컴포넌트에 접근하는 것이 아니라 TriggerBox 액터 자체에 접근하는 것이기 때문입니다. 액터를 이루는 컴포넌트에 접근하고자 할 때 바로 Cast To 노드를 쓰면 됩니다.

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

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

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

네이버 카페
공식 포럼