UDN
Search public documentation:

UnrealScriptIteratorsJP
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 ホーム > UnrealScript > UnrealScript Language Reference > UnrealScript のイタレータ

UnrealScript のイタレータ


概要


UnrealScript の foreach コマンドを使用することによって、アクタの大規模なグループを容易に処理できるようになります。たとえば、あるレベル内に存在する全アクタや、あるアクタから特定の距離内に存在する全アクタなどについて、処理が容易になります。 foreach コマンドは、 イタレータ 関数と呼ばれる特殊な関数とともに使われます。このイタレータ関数の目的は、アクタのリストを反復処理することにあります。

次は、 foreach コマンドを使用したイタレータの簡単な使用例です。

// Display a list of all lights in the level.
function Something()
{
	local Actor A;

	// Go through all actors in the level.
	log( "Physics:" );
	foreach AllActors( class 'Actor', A )
	{
		if( A.Physics != PHYS_Interpolating )
			log( A );
	}
}

foreach コマンド内にある第 1 のパラメータは、constant なクラスです。これは、サーチするアクタの種類を指定するものです。 これによって、たとえば、 Pawn だけにサーチを限定することができます。

foreach コマンド内にある第 2 のパラメータは、 foreach ループをそれぞれイタレートする際に、アクタが代入される変数です。

イタレータ関数


以下には、 foreach コマンドといっしょに使用するイタレータ関数がすべて掲載されています。

Actor

以下に掲載されているイタレータ関数は、すべて Actor クラスのメンバーです。したがって、非 Actor クラスの関数からイタレータを使用する場合は、Actor の変数が必要となり、さらに、関数の解説後に掲載されている構文を使用しなければなりません。

AllActors ( class<actor> BaseClass, out actor Actor, optional class InterfaceClass )
レベル内のすべてのアクタをイタレートします。オプション引数の InterfaceClass を指定すると、 InterfaceClass を実装しているアクタのみが含まれることになります。
DynamicActors( class<actor> BaseClass, out actor Actor )
レベル開始以来スポーンされた全アクタをイタレートします。ただし、レベル内に配置されているアクタは無視します。
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 )
指定された位置 (Loc) から指定された半径範囲 (Radius) に入っている全アクタをイタレートします。(Loc が指定されていない場合は、当該アクタの位置が指定されます)。
VisibleActors( class<actor> BaseClass, out actor Actor, optional float Radius, optional vector Loc )
指定された位置 (Loc) からビジブルな全アクタのリストをイタレートします。(Loc が指定されていない場合は、当該アクタの位置が指定されます)。
VisibleCollidingActors ( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc, optional bool bIgnoreHidden )
Loc (デフォルトでは呼び出し元の位置) から当該アクタの位置までのトレースがワールドにヒットしない半径範囲 (Radius) 内に存在して、衝突している ( bCollideActors==true ) 全アクタを返します。コリジョンハッシュを使用するため、 AllActors() よりも格段に高速です。
CollidingActors ( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc )
ある半径範囲 (Radius) 内に存在する、コリジョンしている ( bCollideActors==true ) 全アクタを返します。十分に小さい半径を用いた場合には、コリジョンハッシュを使用するため、 AllActors() よりも格段に高速となります。

非 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)
現在レベルに存在する全 Controller (プレイヤーまたは AI) をイタレートします。
AllPawns(class<Pawn> BaseClass, out Pawn P, optional vector TestLocation, optional float TestRadius)
現在のレベル内に存在する全 Pawn をイタレートします。オプションで、半径範囲 ( TestRadius ) を指定することによって、指定された位置 ( TestLocation ) を中心とした範囲内をイタレートすることができます。
AllNavigationPoints(class<NavigationPoint> BaseClass, out NavigationPoint N)
NavigationPointList 内にある全 NavigationPoint のリストをイタレートします。
RadiusNavigationPoints(class<NavigationPoint> BaseClass, out NavigationPoint N, vector Point, float Radius)
Point パラメータによって指定された位置を中心とする半径範囲 (指定された Radius ) 内にあり、かつ、 NavigationPointList 内にある全 NavigationPoint のリストをイタレートします。
AllClientConnections(out Player ClientConnection, out int ClientIP, out int ClientPort)
IP および ポートとともに、ネットワーク接続をもつすべてのプレイヤーオブジェクトのリストをイタレートします。サーバー上でのみ実行可能です。

以上の関数を 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 の変数 のページにある 動的配列をイタレートする のセクションを参照してください。