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
中国翻译
한국어
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
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()
よりも格段に高速となります。
foreach ActorVar.DynamicActors(class'Pawn', P)
Interaction
(インタラクション) クラスから使用する場合は、次のようになります。
foreach ViewportOwner.Actor.DynamicActors(class'Pawn', P)
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 および ポートとともに、ネットワーク接続をもつすべてのプレイヤーオブジェクトのリストをイタレートします。サーバー上でのみ実行可能です。
foreach WorldInfo.AllControllers(class'Controller', C)
foreach class'WorldInfo'.static.GetWorldInfo().AllControllers(class'Controller', C)
動的配列を使用する foreach
foreach
コマンドを使用してイタレートできるようになりました。基本的な構文は、次のようになります。
foreach ArrayVariable(out ArrayItem, optional out ItemIndex) { ... }
ArrayItem
は、配列の要素と同じ型でなければなりません。各イタレーションによって、インデックスがインクリメントされ、プロパティが指定されると、アイテムおよびインデックスが書き出されます。
UnrealScript の変数 のページにある 動的配列をイタレートする のセクションを参照してください。