UDN
Search public documentation:

DevelopmentKitGemsIteratorKismetNodesJP
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 ホーム > Unreal Development Kit Gems > Iterator Kismet ノードの作成
UE3 ホーム > Kismet ビジュアル スクリプト処理 > Iterator Kismet ノードの作成

Iterator Kismet ノードの作成


2011年4月に UDK について最終テスト実施済み
PC および iOS 対応

概要


レベル設計の段階で、近くにあるポーン (プレイヤーまたはモンスター) や、レベルに存在しないかもしれない他の種類のアクタを探さなければならない場合があります。あるいは、あるものから一定の範囲にある特定の種類のアクタに特別なエフェクトを付加させなければならない場合もあります。この記事は、そのような機能を実現する新たな Kismet ノードを作成するために役立ちます。

All Actors (すべてのアクタ)


all actors ノードは、AllActors イタレータか DynamicActors イタレータのどちらかを使用して、クラスまたはインターフェース (またはその両方) によってフィルターをかけられた望みのアクタを取得します。この Kismet のノードは、まず WorldInfo への参照を取得することによって機能します。そのためには、WorldInfo で利用できる静的関数を使用します。WorldInfo への参照が必要なのは、AllActors イタレータと DynamicActors イタレータが機能するのにアクタへの参照が必要となるからです。WorldInfo は、常に利用することができ、それへの参照を見つけることが容易であるため、この目的のために使用されます。WorldInfo への参照が有効であれば、付属している ObjectList Kismet 変数ノードが見つけられて、型キャストされます。レベルデザイナーが AlwaysClearObjectList (常に ObjectList をクリアする) にチェックを入れていると、発見されたアクタが ObjectList の配列に追加される前に、ObjectList の配列がクリアされます。 DynamicActorsOnly (DynamicActors のみ) にチェックが入っている場合は、DynamicActors イタレータを使用して、アクタの参照を取得します。そうでない場合は、AllActors イタレータを使用してアクタの参照を取得します。このような措置が取られるのは、主に、これら 2 つのイタレータのパフォーマンスに違いが生じる可能性があるためです。

  • ALERT! AllActors は低速でコストが節約できます。
  • ALERT! DynamicActors は AllActors よりも高速です。これを使用する前に、可能であれば、他のイタレータの使用を検討してみてください。

変数

  • ActorClass - クラスによってアクタをフィルターします。アクタは、このクラスかサブクラスでなければなりません。
  • InterfaceClass - インターフェースの実装によってアクタをフィルターします。アクタは、このインターフェースまたはサブクラス インターフェースを実装していなければなりません。
  • AlwaysClearObjectList - ObjectList に新たなアクタを入れる前に、ObjectList をクリアします。
  • DynamicActorsOnly - 非静的アクタリスト内にあるアクタのみを検索します。

Unrealscript

SeqAct_AllActors.uc
class SeqAct_AllActors extends SequenceAction;

var() class<Actor> ActorClass;
var() class<Interface> InterfaceClass;
var() bool AlwaysClearObjectList;
var() bool DynamicActorsOnly;

event Activated()
{
  local Actor Actor;
  local WorldInfo WorldInfo;
  local array<SequenceObject> ObjectList;
  local SeqVar_ObjectList SeqVar_ObjectList;

  if (ActorClass != None)
  {
    WorldInfo = class'WorldInfo'.static.GetWorldInfo();
    if (WorldInfo != None)
    {
      // Get the object list seq var
      GetLinkedObjects(ObjectList, class'SeqVar_ObjectList', false);

      if (ObjectList.Length > 0)
      {
        SeqVar_ObjectList = SeqVar_ObjectList(ObjectList[0]);

        if (SeqVar_ObjectList != None)
        {
          if (AlwaysClearObjectList)
          {
            SeqVar_ObjectList.ObjList.Length = 0;
          }

          if (DynamicActorsOnly)
          {
            ForEach WorldInfo.DynamicActors(ActorClass, Actor, InterfaceClass)
            {
              SeqVar_ObjectList.ObjList.AddItem(Actor);
            }
          }
          else
          {
            ForEach WorldInfo.AllActors(ActorClass, Actor, InterfaceClass)
            {
              SeqVar_ObjectList.ObjList.AddItem(Actor);
            }
          }
        }
      }
    }
  }

  ActivateOutputLink(0);
}

defaultproperties
{
  ObjName="All Actors"
  ObjCategory="Iterators"
  InputLinks(0)=(LinkDesc="In")
  OutputLinks(0)=(LinkDesc="Out")
  VariableLinks.Empty
  VariableLinks(0)=(ExpectedType=class'SeqVar_ObjectList',LinkDesc="Out Objects",bWriteable=true)
}

All Actors Kismet ノードの使用

次の例では、プレイヤーがグラウンド上のトリガーに触れると All Actors ノードがアクティベートします。すると、All Actors ノードが、レベル内からすべての Noteアクタを見つけます。最後に、ランダムの Note が ObjectList から選択されて、その Note の位置で爆発がトリガーされます。

KI_AllActorsTest.jpg

Based Actors (ベースとなるアクタ)


Based actors (ベースとなるアクタ) が役立つのは、現在別のアクタ上にあるアクタを発見する場合です。たとえば、圧力がかかる台の上に存在するアクタの数を知るべき場合です。ポーン数が 3 の場合、別のタイプの Kismet イベントをトリガーするのに充分重いと判断します。この例は、Touch (タッチ) トリガーなどを使用することによってすでに実現できていますが、このイタレータの Kismet ノードが役立つ場合は他にもあります。

このイタレータの Kismet ノードは、WorldInfo への参照を見つける必要がありません。理由は、イタレータが特定のアクタ上で実行されなければならないからです。したがって、 BaseActor 変数が Kismet にエクスポーズされることによって、レベルデザイナーが使用すべきアクタを指定することができるようになります。そこから、ObjectList が見つかり、型キャストされます。レベルデザイナーは AlwaysClearObjectList (常に ObjectList をクリアする) にチェックを入れることによって、ObjectList に新たなアクタの参照を入れる前に ObjectList をクリアすることができます。最後に、BasedActors イタレータが呼び出され、現在 BaseActor の上にあるアクタをすべて見つけます。BasedActor イタレータは高速です。

変数

  • ActorClass - クラスによってアクタをフィルターします。アクタは、このクラスかサブクラスでなければなりません。
  • AlwaysClearObjectList - ObjectList に新たなアクタを入れる前に、ObjectList をクリアします。

Unrealscript

SeqAct_BasedActors.uc
class SeqAct_BasedActors extends SequenceAction;

var() class<Actor> ActorClass;
var() bool AlwaysClearObjectList;
var Actor BaseActor;

event Activated()
{
  local Actor Actor;
  local array<SequenceObject> ObjectList;
  local SeqVar_ObjectList SeqVar_ObjectList;

  if (ActorClass != None && BaseActor != None)
  {
    // Get the object list seq var
    GetLinkedObjects(ObjectList, class'SeqVar_ObjectList', false);

    if (ObjectList.Length > 0)
    {
      SeqVar_ObjectList = SeqVar_ObjectList(ObjectList[0]);

      if (SeqVar_ObjectList != None)
      {
        if (AlwaysClearObjectList)
        {
          SeqVar_ObjectList.ObjList.Length = 0;
        }

        ForEach BaseActor.BasedActors(ActorClass, Actor)
        {
          SeqVar_ObjectList.ObjList.AddItem(Actor);
        }
      }
    }
  }

  ActivateOutputLink(0);
}

defaultproperties
{
  ObjName="Based Actors"
  ObjCategory="Iterators"
  InputLinks(0)=(LinkDesc="In")
  OutputLinks(0)=(LinkDesc="Out")
  VariableLinks.Empty
  VariableLinks(0)=(ExpectedType=class'SeqVar_ObjectList',LinkDesc="Out Objects",bWriteable=true)
  VariableLinks(1)=(ExpectedType=class'SeqVar_Object',LinkDesc="Base Actor",PropertyName=BaseActor)
}

Based Actors Kismet ノードの使用

次の例では、レベルがロードされたときにループがセットアップされます。各ループのインターバルでは、Based Actors ノードが、現在レベル内で InterpActor (補間アクタ) 上にある UTPawn アクタをすべて見つけます。ObjectList 内で最初の有効なオブジェクトを見つけ、スクリーン上にそのログを表示します。ObjectList はその後すぐにクリアされます。

KI_BasedActorsTest.jpg

Child Actors (子アクタ)


Child Actors Kismet ノードは、現在 OwningActor (所有しているアクタ) によって所有されているアクタの参照をすべて返します。 Based Actors イタレータ Kismet ノードの場合とほぼ同じように、レベルデザイナーが、エクスポーズされた Kismet 変数ノードを使用して OwningActor を設定します。コードは、Based Actors イタレータ Kismet ノードと大変よく似ています。異なる点は、ChildActors イタレータが使用されているということです。

  • ALERT! ChildActors は低速です。可能ならば使用を避けるべきです。

変数

  • ActorClass - クラスによってアクタをフィルターします。アクタは、このクラスかサブクラスでなければなりません。
  • AlwaysClearObjectList - ObjectList に新たなアクタを入れる前に、ObjectList をクリアします。

Unrealscript

SeqAct_ChildActors.uc
class SeqAct_ChildActors extends SequenceAction;

var() class<Actor> ActorClass;
var() bool AlwaysClearObjectList;
var Actor OwningActor;

event Activated()
{
  local Actor Actor;
  local array<SequenceObject> ObjectList;
  local SeqVar_ObjectList SeqVar_ObjectList;

  if (ActorClass != None && OwningActor != None)
  {
    // Get the object list seq var
    GetLinkedObjects(ObjectList, class'SeqVar_ObjectList', false);

    if (ObjectList.Length > 0)
    {
      SeqVar_ObjectList = SeqVar_ObjectList(ObjectList[0]);

      if (SeqVar_ObjectList != None)
      {
        if (AlwaysClearObjectList)
        {
          SeqVar_ObjectList.ObjList.Length = 0;
        }

        ForEach OwningActor.ChildActors(ActorClass, Actor)
        {
          SeqVar_ObjectList.ObjList.AddItem(Actor);
        }
      }
    }
  }

  ActivateOutputLink(0);
}

defaultproperties
{
  ObjName="Child Actors"
  ObjCategory="Iterators"
  InputLinks(0)=(LinkDesc="In")
  OutputLinks(0)=(LinkDesc="Out")
  VariableLinks.Empty
  VariableLinks(0)=(ExpectedType=class'SeqVar_ObjectList',LinkDesc="Out Objects",bWriteable=true)
  VariableLinks(1)=(ExpectedType=class'SeqVar_Object',LinkDesc="Owning Actor",PropertyName=OwningActor)
}

Child Actors Kismet ノードの使用

次の例では、レベルがロードされるとループがセットアップされます。各ループのインターバルでは、Child Actors ノードが、プレイヤーによって所有されている UTPawn アクタをすべて見つけます。次に、ObjectList からランダムなオブジェクトが選ばれて、スクリーン上にそのログが表示されます。

KI_ChildActorsTest.jpg

Radial Actors (放射状のアクタ)


このイタレータの Kismet ノードは、ある半径内にあるアクタを見つけます。これにはオプションがあり、レベルデザイナーが、ビジビリティ (可視性) やコリジョン、オーバーラップの有無に基づいてフィルターをかけることができます。visibility (ビジビリティ) のフィルターは、アクタが隠れているか否かについて判定します。collision (コリジョン) フィルターは、アクタが他のアクタと衝突できる (bCollideActors が true になっている) か否かについて判定します。overlapping (オーバーラップ) フィルターは、アクタのコリジョン コンポーネント (bCollideActors が true になっている) が、 Radius (半径) で定義されている半径の範囲とオーバーラップしているか否かについて判定します。

まず、WorldInfo 内の静的関数を使用して、WorldInfo への参照を取得します。有効な WorldInfo が見つかると、次に ObjectList を見つけ、型キャストすることによって使用できるようにします。イタレータの位置は、次のロジックに依存します。

  • ワールド内のアクタを参照するのに ActorLocation (アクタの位置) が使用されている場合は、そのアクタの位置が半径スキャンの原点として使用されます。
  • それ以外の場合は、 Location (位置) が半径スキャンの原点として使用されます。

AlwaysClearObjectList (常に ObjectList をクリアする) にチェックが入っている場合は、新たな要素が加わる前に ObjectList がクリアされます。そこから最も適切なイタレータが、レベルデザイナーによってセットされた各種プロパティとともに使用されます。この Kismet ノードによるパフォーマンスへの影響は、どのタイプのイタレータが使用されるかによります。

変数

  • ActorClass - クラスによってアクタをフィルターします。アクタは、このクラスかサブクラスでなければなりません。
  • AlwaysClearObjectList - ObjectList に新たなアクタを入れる前に、ObjectList をクリアします。
  • IteratorType - 使用するイタレータのタイプです。
    • Visible (ビジブル) - 低速です。可能ならば、このタイプのイタレータの使用は避けてください。
    • Visible and Collidable (ビジブルかつ衝突可能) - 適度に小さな半径が使用される場合に、コリジョン Octree が用いられるため、高速です。
      • Ignore Hidden (非表示の無視) - 隠れているアクタを無視します。
      • Trace Extent (トレース範囲) - 原点とアクタの位置の間にワールドジオメトリがないことを確かめるためにトレースを使用する場合に使われる範囲です。
      • Trace Actors (トレース アクタ) - 原点とアクタの位置の間にワールドジオメトリがないことを確かめるためにトレースを実行する場合にチェックします。
      • Interface Class (インターフェースクラス) - インターフェースの実装によってアクタをフィルターにかける場合は、none (なし) 以外をセットします。
    • Collidable (衝突可能) - 適度に小さな半径が使用される場合に、コリジョン Octree が用いられるため、高速です。
      • Use Overlap Check (オーバーラップ チェックの使用) - 単にアクタの位置が半径内にあるか否かをチェックするのではなく、確実にアクタが半径内に収まっていることをチェックします。
      • Interface Class (インターフェースクラス) - インターフェースの実装によってアクタをフィルターにかける場合は、none (なし) 以外をセットします。
    • Overlapping (オーバーラップ) - 低速です。可能な場合は、このタイプのイタレータの使用を避けてください。
      • Ignore Hidden (非表示の無視) - 隠れているアクタを無視します。

Unrealscript

SeqAct_RadialActors.uc
class SeqAct_RadialActors extends SequenceAction;

enum EIteratorType
{
  EIT_Visible<DisplayName="Visible">,
  EIT_VisibleColliding<DisplayName="Visible and Collidable">,
  EIT_Colliding<DisplayName="Collidable">,
  EIT_Overlapping<DisplayName="Overlapping">
};

var() class<Actor> ActorClass;
var() bool AlwaysClearObjectList;
var() EIteratorType IteratorType;

var() float Radius;
// Location will be overriden when using an attached actor
var() Vector Location;
var Actor ActorLocation;

var(VisibleCollidingActors) bool VCAIgnoreHidden<DisplayName="Ignore Hidden">;
var(VisibleCollidingActors) Vector VCAExtent<DisplayName="Trace Extent">;
var(VisibleCollidingActors) bool VCATraceActors<DisplayName="Trace Actors">;
var(VisibleCollidingActors) class<Interface> VCAInterfaceClass<DisplayName="Interface Class">;

var(CollidingActors) bool CAUseOverlapCheck<DisplayName="Use Overlap Check">;
var(CollidingActors) class<Interface> CAInterfaceClass<DisplayName="Interface Class">;

var(OverlappingActors) bool OAIgnoreHidden<DisplayName="Ignore Hidden">;

event Activated()
{
  local WorldInfo WorldInfo;
  local Actor Actor;
  local array<SequenceObject> ObjectList;
  local SeqVar_ObjectList SeqVar_ObjectList;
  local Vector IteratorLocation;

  if (ActorClass != None)
  {
    WorldInfo = class'WorldInfo'.static.GetWorldInfo();

    if (WorldInfo != None)
    {
      // Get the object list seq var
      GetLinkedObjects(ObjectList, class'SeqVar_ObjectList', false);

      if (ObjectList.Length > 0)
      {
        SeqVar_ObjectList = SeqVar_ObjectList(ObjectList[0]);

        if (SeqVar_ObjectList != None)
        {
          IteratorLocation = (ActorLocation != None) ? ActorLocation.Location : Location;

          if (AlwaysClearObjectList)
          {
            SeqVar_ObjectList.ObjList.Length = 0;
          }

          switch (IteratorType)
          {
          case EIT_Visible:
            ForEach WorldInfo.VisibleActors(ActorClass, Actor, Radius, IteratorLocation)
            {
              SeqVar_ObjectList.ObjList.AddItem(Actor);
            }
            break;

          case EIT_VisibleColliding:
            ForEach WorldInfo.VisibleCollidingActors(ActorClass, Actor, Radius, IteratorLocation, VCAIgnoreHidden, VCAExtent, VCATraceActors, VCAInterfaceClass)
            {
              SeqVar_ObjectList.ObjList.AddItem(Actor);
            }
            break;

          case EIT_Colliding:
            ForEach WorldInfo.CollidingActors(ActorClass, Actor, Radius, IteratorLocation, CAUseOverlapCheck, CAInterfaceClass)
            {
              SeqVar_ObjectList.ObjList.AddItem(Actor);
            }
            break;

          case EIT_Overlapping:
            ForEach WorldInfo.OverlappingActors(ActorClass, Actor, Radius, IteratorLocation, OAIgnoreHidden)
            {
              SeqVar_ObjectList.ObjList.AddItem(Actor);
            }
            break;

          default:
            break;
          }
        }
      }
    }
  }

  ActivateOutputLink(0);
}

defaultproperties
{
  ObjName="Radial Actors"
  ObjCategory="Iterators"
  InputLinks(0)=(LinkDesc="In")
  OutputLinks(0)=(LinkDesc="Out")
  VariableLinks.Empty
  VariableLinks(0)=(ExpectedType=class'SeqVar_ObjectList',LinkDesc="Out Objects",bWriteable=true)
  VariableLinks(1)=(ExpectedType=class'SeqVar_Float',LinkDesc="Radius",PropertyName=Radius)
  VariableLinks(2)=(ExpectedType=class'SeqVar_Object',LinkDesc="Actor Location",bHidden=true,PropertyName=ActorLocation)
  VariableLinks(3)=(ExpectedType=class'SeqVar_Vector',LinkDesc="Location",PropertyName=Location)
}

Radial Actors Kismet ノードの使用

次の例では、プレイヤーがスポーンすると、プレイヤーのポーンが最初に発見されて保存されます。その後 Radial Actors ノードは、半径 (プレイヤーのポーンの位置で 192.f に定義されている) 内にある PathNodes (パスノード) を探します。ランダムのオブジェクトが ObjectList から選ばれ、そのオブジェクトの位置で爆発がトリガーされます。

KI_RadiusActorsTest.jpg

Touching Actors (触れているアクタ)


このイタレータの Kismet ノードは、現在 BaseActor に触れているアクタすべてを返します。コードは、BasedActors イタレータ Kismet ノードと非常によく似ていますが、TouchingActors イタレータを使用している点が異なります。このイタレータは高速です。

変数

  • ActorClass - クラスによってアクタをフィルターします。アクタは、このクラスかサブクラスでなければなりません。
  • AlwaysClearObjectList - ObjectList に新たなアクタを入れる前に、ObjectList をクリアします。

Unrealscript

SeqAct_TouchingActors.uc
class SeqAct_TouchingActors extends SequenceAction;

var() class<Actor> ActorClass;
var() bool AlwaysClearObjectList;
var Actor BaseActor;

event Activated()
{
  local Actor Actor;
  local array<SequenceObject> ObjectList;
  local SeqVar_ObjectList SeqVar_ObjectList;

  if (ActorClass != None && BaseActor != None)
  {
    // Get the object list seq var
    GetLinkedObjects(ObjectList, class'SeqVar_ObjectList', false);

    if (ObjectList.Length > 0)
    {
      SeqVar_ObjectList = SeqVar_ObjectList(ObjectList[0]);

      if (SeqVar_ObjectList != None)
      {
        if (AlwaysClearObjectList)
        {
          SeqVar_ObjectList.ObjList.Length = 0;
        }

        ForEach BaseActor.TouchingActors(ActorClass, Actor)
        {
          SeqVar_ObjectList.ObjList.AddItem(Actor);
        }
      }
    }
  }

  ActivateOutputLink(0);
}

defaultproperties
{
  ObjName="Touching Actors"
  ObjCategory="Iterators"
  InputLinks(0)=(LinkDesc="In")
  OutputLinks(0)=(LinkDesc="Out")
  VariableLinks.Empty
  VariableLinks(0)=(ExpectedType=class'SeqVar_ObjectList',LinkDesc="Out Objects",bWriteable=true)
  VariableLinks(1)=(ExpectedType=class'SeqVar_Object',LinkDesc="Base Actor",PropertyName=BaseActor)
}

Touching Actors Kismet ノードの使用

次の例では、レベルがロードされたときにループがセットアップされます。各ループのインターバルでは、Touching Actors ノードが、現在Trigger_0 に触れているすべての UTProj_LinkPlasma アクタを探します。次に、ObjectList からランダムなオブジェクトが選ばれて、スクリーン上にそのログが表示されます。ObjectList はその後すぐにクリアされます。

KI_TouchingActorsTest.jpg

Trace Actors (トレースアクタ)


このイタレータの Kismet ノードは、 TraceStart (トレース開始) と TraceEnd (トレース終了) 間のトレースを実行します。必要な場合は、 TraceExtent (トレース範囲) がトレース (非ゼロ範囲のトレース) の幅と高さを定義します。このイタレータの Kismet ノードは、直線 (たとえばレーザービーム) 上でアクタを発見しなければならない場合に便利です。

まず、WorldInfo 内で使用できる静的関数を使用して WorldInfo への参照を見つけます。そこから、ObjectList が見つかり、型キャストされます。 AlwaysClearObjectList (常に ObjectList をクリアする) にチェックが入っている場合は、ObjectList をクリアします。 最後に、*TraceStart* 、 TraceEndTraceExtent の各入力値を使用して、TraceActors イタレータを実行します。イタレータによって集められた HitLocation (ヒット位置) と HitNormal (ヒット法線) を破棄します。次に、トレースポイント内にあるすべてのアクタを、ObjectList に挿入します。他のトレース同様に、適度に高速です。

変数

  • ActorClass - クラスによってアクタをフィルターします。アクタは、このクラスかサブクラスでなければなりません。
  • AlwaysClearObjectList - ObjectList に新たなアクタを入れる前に、ObjectList をクリアします。
  • TraceStart - トレースを開始する位置です。
  • TraceEnd - トレースを終了する位置です。
  • TraceExtent - トレースの厚さです。非ゼロ範囲のトレースを使用するためにゼロにすることができます。

Unrealscript

SeqAct_TraceActors.uc
class SeqAct_TraceActors extends SequenceAction;

var() class<Actor> ActorClass;
var() bool AlwaysClearObjectList;
var() Vector TraceStart;
var() Vector TraceEnd;
var() Vector TraceExtent;

event Activated()
{
  local WorldInfo WorldInfo;
  local Actor Actor;
  local array<SequenceObject> ObjectList;
  local SeqVar_ObjectList SeqVar_ObjectList;
  local Vector HitLocation, HitNormal;

  if (ActorClass != None)
  {
    WorldInfo = class'WorldInfo'.static.GetWorldInfo();

    if (WorldInfo != None)
    {
      // Get the object list seq var
      GetLinkedObjects(ObjectList, class'SeqVar_ObjectList', false);

      if (ObjectList.Length > 0)
      {
        SeqVar_ObjectList = SeqVar_ObjectList(ObjectList[0]);

        if (SeqVar_ObjectList != None)
        {
          if (AlwaysClearObjectList)
          {
            SeqVar_ObjectList.ObjList.Length = 0;
          }

          ForEach WorldInfo.TraceActors(ActorClass, Actor, HitLocation, HitNormal, TraceEnd, TraceStart, TraceExtent)
          {
            SeqVar_ObjectList.ObjList.AddItem(Actor);
          }
        }
      }
    }
  }

  ActivateOutputLink(0);
}

defaultproperties
{
  ObjName="Trace Actors"
  ObjCategory="Iterators"
  InputLinks(0)=(LinkDesc="In")
  OutputLinks(0)=(LinkDesc="Out")
  VariableLinks.Empty
  VariableLinks(0)=(ExpectedType=class'SeqVar_ObjectList',LinkDesc="Out Objects",bWriteable=true)
  VariableLinks(1)=(ExpectedType=class'SeqVar_Vector',LinkDesc="Trace Start",PropertyName=TraceStart)
  VariableLinks(2)=(ExpectedType=class'SeqVar_Vector',LinkDesc="Trace End",PropertyName=TraceEnd)
  VariableLinks(3)=(ExpectedType=class'SeqVar_Vector',LinkDesc="Trace Extent",PropertyName=TraceExtent)
}

Trace Actors Kismet ノードの使用

次の例では、まず Note_0 と Note_1 の位置を見つけます。次に、これら 2 つの変数がセットされたときに、ループをセットアップします。各ループのインターバルでは、Trace Actors が Note_0 と Note_1 の間でトレースを実行します。そのとき、トレース内で UTPawns を探します。次に、ランダムのオブジェクトを ObjectList から選びます。スクリーン上にログを表示し、アラーム音を再生します。その後すぐに ObjectList をクリアします。

KI_TraceActorsTest.jpg

ダウンロード


  • この記事で使用されているソースコードとコンテンツは、 ここ からダウンロードすることができます。 (KismetIterators.zip)