UDN
Search public documentation:

DevelopmentKitGemsForLoopKismetNodeJP
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

Unreal Development Kit ホーム > Unreal Development Kit Gems > For Loop Kismet ノードの作成
UE3 ホーム > Kismet ビジュアルスクリプト処理 > For Loop Kismet ノードの作成

For Loop Kismet ノードの作成

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

概要


Kismet のセクションをすばやく簡単にループさせることができれば、便利な場合があります。

Unrealscript


この Kismet ノードは、内部カウントが end に達するまで、接続された Kismet ノードをアクティベートさせ続けることによって機能します。このループは、Kismet を使用して実行することができます。他の Kismet ベースの条件を追加することによってループを停止させたり、一時停止させたりすることができるので、柔軟性に富みます。

SeqAct_ForLoop.uc
class SeqAct_ForLoop extends SequenceAction;

// The number to use as the start of the loop
var() int Start;
// The number to use as the end of the loop
var() int End;
// How much to increment the for loop by. Always use a positive number
var() int Increment;
// Include end when iterating
var() bool IncludeEnd;
// Index output in case it is useful for level designers
var int Index;
// Internal index
var int InternalIndex;
// Has the internal index been set before?
var bool HasSetInternalIndex;

event Activated()
{
  // Check if we have a range to iterate over
  if (Start == End || Increment <= 0)
  {
    return;
  }

  if (!HasSetInternalIndex)
  {
    InternalIndex = Start;
    HasSetInternalIndex = true;
  }

  if (Start < End)
  {
    Index = InternalIndex;

    if (InternalIndex < End || (IncludeEnd && InternalIndex <= End))
    {
      ActivateOutputLink(0);
      InternalIndex += Increment;
    }
    else
    {
      InternalIndex = Start;
    }
  }
  else if (Start > End)
  {
    Index = InternalIndex;

    if (InternalIndex > End || (IncludeEnd && InternalIndex >= End))
    {
      ActivateOutputLink(0);
      InternalIndex -= Increment;
    }
    else
    {
      InternalIndex = Start;
    }
  }
}

defaultproperties
{
  Increment=1
  InternalIndex=0
  bAutoActivateOutputLinks=false
  HasSetInternalIndex=false
  ObjName="For Loop"
  ObjCategory="Misc"
  InputLinks(0)=(LinkDesc="In")
  OutputLinks(0)=(LinkDesc="Out")
  VariableLinks.Empty
  VariableLinks(0)=(ExpectedType=class'SeqVar_Int',LinkDesc="Start",PropertyName=Start)
  VariableLinks(1)=(ExpectedType=class'SeqVar_Int',LinkDesc="End",PropertyName=End)
  VariableLinks(2)=(ExpectedType=class'SeqVar_Int',LinkDesc="Increment",bHidden=true,PropertyName=Increment)
  VariableLinks(3)=(ExpectedType=class'SeqVar_Int',LinkDesc="Index",bWriteable=true,PropertyName=Index)
}

使用方法


このノードを使用するには、ループがインクリメントする範囲となる StartEnd の値を指定します。たとえば、1 から 6 までループさせる場合は、Start を 1 に、End を 7 にセットします。(あるいは、End を 6 にセットして IncludeEnd (End を含める) 変数を有効にします)。インクリメントのステップを変更することもできます。そのためには、 Increment (インクリメント) の値を増減させます。 Increment を 2 にセットすると、0 から 16 は、0, 2, 4, 6, ...というパターンでインクリメントされることになります。

Kismet をループさせる際に、遅れをセットすることもできます。つまり、各ステップ間にポーズが置かれることになります。下の例では、各イタレーション間で 1 秒の遅れをセットしています。

ループインデックスの現在の値を取得することもできます。そのためには、 Index (インデックス) パラメータを Int 型変数に接続します。下の例では、それを文字列に変換し、さらにテスト目的でログの中に出力しています。

KismetForLoop.jpg

関連テーマ