UDN
Search public documentation:

UnrealScriptIteratorsKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 언리얼스크립트 > 언리얼스크립트 언어 참고서 > 언리얼스크립트 반복처리기(Iterator)

언리얼스크립트 반복처리기(Iterator)


문서 변경내역: Tim Sweeney 원저. 홍성진 번역.

개요


언리얼스크립트의 foreach 명령을 통해 레벨에 있는 모든 액터라든지, 어떤 액터의 일정 거리 안에 있는 모든 액터처럼 규모가 큰 그룹의 액터를 쉽게 처리할 수 있습니다. foreach 명령은, 액터 목록에 있는 액터들을 대상으로 반복처리하는 반복처리기 (iterator) 함수라는 특수한 종류의 함수와 함께 사용됩니다.

foreach 명령에 이터레이터를 같이 사용한 단순한 예제입니다:

// 레벨의 모든 라이트 목록을 표시합니다.
function Something()
{
	local Actor A;

	// 레벨에 있는 모든 액터를 대상으로 합니다.
	log( "Physics:" );
	foreach AllActors( class 'Actor', A )
	{
		if( A.Physics != PHYS_Interpolating )
			log( A );
	}
}

모든 foreach 명령의 첫 파라미터는 항상 클래스로, 어떤 종류의 액터를 검색할 것인지 지정합니다. 이를 통해 검색 대상을 제한할 수 있으며, 예를 들면 모든 Pawn 만 식입니다.

foreach 명령의 둘째 파라미터는 foreach 루프에서 매번 반복처리되는 기간동안 액터로 할당되는 변수입니다.

반복처리기 함수


foreach 명령과 함께 작동되는 반복처리기 함수는 모두 이렇습니다.

Actor 액터

이 반복처리기 함수는 모두 Actor 클래스의 멤버라, Actor 이외의 함수에서 반복처리기를 사용하려면 액터 변수를 두고 다음 문법을 사용해야 합니다:

AllActors ( class<actor> BaseClass, out actor Actor, optional class InterfaceClass )
레벨의 모든 액터를 대상으로 반복처리합니다. 옵션인 InterfaceClass 를 지정하면, 그 클래스를 구현하는 액터만 포함시킵니다.
DynamicActors( class<actor> BaseClass, out actor Actor, optional class InterfaceClass )
bStatic=false 인 액터 전부를 대상으로 반복 처리합니다.
ChildActors( class<actor> BaseClass, out actor Actor )
이 액터가 소유하는 액터 전부를 대상으로 반복처리합니다.
BasedActors( class<actor> BaseClass, out actor Actor )
이 액터를 베이스로 하는 액터 전부를 대상으로 반복처리합니다.
TouchingActors( class<actor> BaseClass, out actor Actor )
이 액터에 접하는 (서로 겹치는) 액터 전부를 대상으로 반복처리합니다.
TraceActors( class<actor> BaseClass, out actor Actor, out vector HitLoc, out vector HitNorm, vector End, optional vector Start, optional vector Extent )
Extent 콜리전 박스를 사용하여 Start 점에서 End 점까지의 라인 트레이스에 접하는 액터 전부를 대상으로 반복처리합니다. 매번 반복처리시마다 HitLoc 은 걸린 위치로, HitNorm 은 걸린 위치에서 바깥쪽을 향하는 노멀로 설정됩니다.
OverlappingActors( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc, optional bool bIgnoreHidden )
지정된 위치(가 없으면 이 액터의 위치)의 지정된 반경 내 모든 액터를 대상으로 반복처리합니다.
VisibleActors( class<actor> BaseClass, out actor Actor, optional float Radius, optional vector Loc )
지정된 위치(가 없으면 이 액터의 위치)에서 보이는 액터 전부를 대상으로 반복처리합니다.
VisibleCollidingActors( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc, optional bool bIgnoreHidden )
(디폴트는 호출한 것의) 위치에서 해당 액터 위치까지의 트레이스가 월드에 걸리지 않는 특정 반경 내 모든 충돌 (bCollideActors==true) 액터를 반환합니다. 콜리전 해시를 사용하므로 AllActors() 보다 훨씬 빠릅니다.
CollidingActors( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc )
특정 반경 내 충돌 (bCollideActors==true) 액터를 반환합니다. 콜리전 해시를 사용하므로 적당히 작은 반경에는 AllActors() 보다 훨씬 빠릅니다.
ComponentList( class<ActorComponent> BaseClass, out ActorComponent out_Component )
액터의 컴포넌트 리스트에 있는 모든 컴포넌트를 반환합니다.
AllOwnedComponents( class<Component> BaseClass, out ActorComponent OutComponent )
액터에 "직접 또는 간접적으로" 붙어있는 컴포넌트를 전부 반환합니다.
LocalPlayerControllers( class<PlayerController> BaseClass, out PlayerController PC)
모든 로컬 PlayerController 를 반환합니다.

Actor 이외의 것에서 이런 반복처리기를 사용하는 문법은 다음과 같습니다:

foreach ActorVar.DynamicActors(class'Pawn', P)

Interaction 클래스 안에서라면, 이렇게 하면 됩니다:

foreach ViewportOwner.Actor.DynamicActors(class'Pawn', P)

WorldInfo

이 반복처리기 함수는 모두 WorldInfo 클래스의 멤버로, WorldInfo 를 가리켜야 사용할 수 있습니다.

AllControllers(class<Controller> BaseClass, out Controller C)
현재 레벨에 있는 Controllers (Player 또는 AI) 전부를 대상으로 반복처리합니다.
AllPawns(class<Pawn> BaseClass, out Pawn P, optional vector TestLocation, optional float TestRadius)
현재 레벨 내 모든 Pawn 을 대상으로 반복처리합니다. 옵션으로 반경 (TestRadius) 을 지정하여 주어진 위치 (TestLocaltion) 주변을 대상으로 반복처리할 수 있습니다.
AllNavigationPoints(class<NavigationPoint> BaseClass, out NavigationPoint N)
NavigationPointList 내 모든 NavigationPoints 목록을 대상으로 반복처리합니다.
RadiusNavigationPoints(class<NavigationPoint> BaseClass, out NavigationPoint N, vector Point, float Radius)
Point 파라미터로 지정된 위치의 Radius 지정 반경 내 NavigationPointList 의 모든 NavigationPoints 목록을 대상으로 반복처리합니다.
AllClientConnections(out Player ClientConnection, out int ClientIP, out int ClientPort)
IP, Port 와 함께 네트워크 접속되어 있는 모든 플레이어 오브젝트 목록을 대상으로 반복처리합니다.

Actor 에서 이런 반복처리기를 사용하는 문법은 다음과 같습니다:

foreach WorldInfo.AllControllers(class'Controller', C)

Actor 이외에서는 이렇습니다:

foreach class'WorldInfo'.static.GetWorldInfo().AllControllers(class'Controller', C)

foreach 에 동적 배열


이제 동적 배열에도 foreach 명령을 사용해서 반복처리를 할 수 있습니다. 기본 문법은:

foreach ArrayVariable(out ArrayItem, optional out ItemIndex)
{
   ...
}

ArrayItem 은 배열에 있는 요소와 같은 유형이어야 합니다. 매번 반복처리마다 인덱스를 증가시키고, 프로퍼티가 제공된 경우 아이템은 물론 인덱스도 출력합니다.

자세한 정보는 UnrealScript Variables KR 페이지의 동적 배열 반복처리하기 부분을 참고하시기 바랍니다.