UDN
Search public documentation:

DevelopmentKitGemsForLoopKismetNodeCH
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 主页 > 虚幻开发工具包精华文章 > 创建 For 循环 Kismet 节点
UE3 主页 > Kismet 可视化脚本 > 创建 For 循环 Kismet 节点

创建 For 循环 Kismet 节点


最后一次测试是在2011年4月份的UDK版本上进行的。
可以与 PC 和 iOS 兼容

概述


有时候能够快速循环Kismet的某个部分是有用的,使得处理更加快速简单。

Unrealscript


这个Kismet节点通过不断激活连接的Kismet节点直到它的内部计数到达尾部为止来进行工作。这个循环可以通过Kismet来实现。同时它很灵活,允许您根据条件添加其它的Kismet节点来停止或暂停循环。

SeqAct_ForLoop.uc
class SeqAct_ForLoop extends SequenceAction;

// 作为循环开头部分使用的数量
var() int Start;
// 作为循环结束部分使用的数量
var() int End;
// 循环每次的增量大小。通常使用正数
var() int Increment;
// 遍历的时候包括结尾部分
var() bool IncludeEnd;
// 在索引对于关卡设计师而言有用的情况下的索引输出
var int Index;
// 内部索引
var int InternalIndex;
// 以前设置过这个内部索引吗?
var bool HasSetInternalIndex;

event Activated()
{
  // 检查我们是否具有要遍历的范围
  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(或者6并选中 IncludeEnd 变量)。您也可以通过增加或减少 Increment 值来改变增量步骤。如果您设置 Increment 为2,那么这将允许您以0, 2, 4, 6, ...从0循环到16。

在循环Kimet前您也可以设置延迟。这意味着在每次循环时都有个停顿。在下面的示例中,我在每个循环间设置了1秒的延迟。

您也可以通过把 Index 变量连接到一个Int变量上来获得当前的循环索引值。在下面的示例中,我也把它转换为了一个字符串,可以把该字符串输出到日志中以便进行测试。

KismetForLoop.jpg

相关主题