Choose your operating system:
Windows
macOS
Linux
여기서는 Get All Actors of Class 노드를 사용하여 레벨에 있는 액터를 검색하는 법에 대한 예제를 다루겠습니다. 이 노드를 호출하면 레벨에 있는 지정된 클래스의 액터 전부를 구해 배열 (변수 집합)에 넣으며, 그 배열에서 필터링을 적용한 범주에 따라 모든 액터 또는 개별 액터를 꺼내올 수 있습니다. 그런 다음 프로퍼티에 접근하여 그 액터의 유형이나 이루고자 하는 바에 따라 어떤 식으로든 변경할 수 있습니다.
클래스의 모든 액터 구하기
이 예제에서는 시작용 콘텐츠 포함 블루프린트 삼인칭 템플릿 을 사용했습니다.
-
콘텐츠 브라우저 안에서 Game/Blueprints 아래 Blueprint_Effect_Fire 애셋을 세 개 끌어 놓습니다.
그냥 찾고자 하는 아이템으로 추가하는 것이니, 아무데나 배치합니다.
-
콘텐츠 브라우저 에서 Game/Blueprints 폴더 아래 MyCharacter 애셋을 엽니다.
-
블루프린트 에디터 창 의 그래프에 우클릭 한 다음 F Key Event 를 추가합니다.
F 를 누르면 씬에 있는 액터를 찾도록 시도해 보겠습니다.
-
F Key Event 의 Pressed 핀을 끌어놓고 Get All Actors Of Class 노드를 추가합니다.
이름이 암시하는 대로 지정된 클래스의 액터를 전부 구하는 시도를 합니다.
-
Get All Actors of Class 노드에서 Actor Class 드롭다운을 클릭한 다음 Blueprint_Effect_Fire 클래스를 추가합니다.
-
Out Actors 를 끌어놓고 ForEachLoop 노드를 추가합니다.
Out Actors 는 (지정한 클래스의) 모든 액터로 이루어진 배열 로, 그 "각각에 대해" (For Each) 어떤 작업을 할 수 있습니다.
-
ForEachLoop 노드의 Array Element 를 끌어놓고 P_Fire 와 Fire Audio 를 Get 합니다.
-
그래프에 우클릭 한 다음 Deactivate 노드를 추가한 뒤 화염과 오디오 핀을 Target 에 연결합니다.
이미지를 클릭하면 원래 크기로 봅니다.
여기서는 플레이어가 F 를 누르면 레벨에 있는 화염 이펙트 인스턴스 전부를 구하여 비활성화시킵니다.
-
컴파일 버튼을 클릭한 뒤 블루프린트를 닫고 플레이 를 클릭하여 에디터에서 플레이합니다.
F 키를 누르면 레벨에 배치한 화염 인스턴스 전부를 비활성화시킬 수 있을 것입니다.
이 방법을 사용하여, 특정 클래스의 액터 전부를 찾아 어떠한 방식으로 영향을 끼칠 수 있지만, 특정 클래스의 액터를 전부 찾은 다음 그 전부가 아닌 그 클래스 안의 특정 액터 또는 세트에만 영향을 끼치려면 어떻게 해야 할까요? 다음에는 결과 배열에 필터를 적용하여 전체가 아닌 일부분만 구하기 위해 취할 수 있는 방법을 보여드리겠습니다.
특정 액터 구하기
전 부분에서는 Get All Actors of Class 노드를 사용하여 지정된 클래스의 액터 배열 을 만드는 법을 배웠습니다. 여기서는 다양한 범주에 따라 배열에 필터를 적용하여 그 배열에서 특정 액터(들)을 구하는 방법을 보여드리겠습니다.
한 가지 방법은 액터에 태그 를 사용하는 것으로, 예를 들면:
-
전 부분의 예제를 이어서, 레벨의 화염 이펙트 중 하나를 선택합니다.
-
디테일 패널에서 Tags 섹션을 찾은 다음 더하기 부호를 클릭하여 액터에 태그를 추가합니다.
-
0 칸에 Target 같은 텍스트를 태그로 입력합니다.
-
MyCharacter 블루프린트 안에서 ForEachLoop 의 Array Element 를 끌어놓고 Get Tags 노드를 추가합니다.
-
Tags 핀을 끌어놓고, Get 노드를 추가합니다.
여기서 (위에서 Target 으로 설정한) Index 0 의 Tag 를 "Get" 하고 있습니다.
-
그래프에 우클릭 한 다음 Branch , 분기 노드를 추가합니다.
-
Branch 의 Condition 을 끌어놓고 Actor Has Tag 노드를 추가합니다.
-
Get 노드의 출력 핀을 Actor Has Tag 노드의 Tag 핀에 연결합니다.
-
ForEachLoop 의 Array Element 핀을 Actor Has Tag 노드의 Target 핀에 연결합니다.
-
ForEachLoop 의 Array Element 핀을 끌어놓고 Get P_Fire 와 Get Fire Audio 를 추가한 뒤, Deactivate 노드에 연결합니다.
이미지를 클릭하면 원래 크기로 봅니다.
여기서는 지정된 클래스의 액터를 전부 모은 이후 배열에 넣은 다음 각 액터마다 지정한 태그가 있는지 검사한 뒤, 있는 경우에만 비활성화시킵니다.
필터링 결과의 또다른 예입니다:
이미지를 클릭하면 원래 크기로 봅니다.
위 예제에서는 특정 블루프린트의 클래스가 아닌 Emitter 클래스의 모든 액터를 구하고 있습니다 (레벨에 있는 연기, 화염, 바람, 비, 안개 등 여러가지 이미터를 모두 끄고자 하는 경우에 사용할 수 있습니다). Emitter 오브젝트로 Cast 한 다음 이미터가 활성화 상태인지 검사하고, 그렇다면 비활성화시킵니다.
ForEachLoop 뒤에 항상 오브젝트로 형변환할 필요는 없는데, 아래 예제를 봅시다:
이미지를 클릭하면 원래 크기로 봅니다.
여기서는 레벨에 TriggerBox 클래스의 모든 액터를 구한 다음 그 콜리전을 끄고 있습니다 (레벨의 모든 트리거를 끕니다). TriggerBox 로 Cast To 하지는 않았는데, TriggerBox 의 컴포넌트에 접근하는 것이 아니라 TriggerBox 액터 자체에 접근하는 것이기 때문입니다. 액터를 이루는 컴포넌트에 접근하고자 할 때 바로 Cast To 노드를 쓰면 됩니다.