UDN
Search public documentation:

DevelopmentKitGemsForLoopKismetNodeKR
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 홈 > UDK 젬 > For Loop 키즈멧 노드 만들기
UE3 홈 > 키즈멧 비주얼 스크립팅 > For Loop 키즈멧 노드 만들기

For Loop 키즈멧 노드 만들기


문서 변경내역: James Tan 작성. 홍성진 번역.
UDK 2011년 4월 버전으로 최종 테스팅, PC 와 iOS 호환

개요


가끔은 키즈멧에서 쉽고 빠른 부분 루프가 그리울 때가 있습니다.

Unrealscript


이 키즈멧 노드는 내부 계수가 끝에 도달할 때까지 연결된 키즈멧 노드를 계속해서 활성화시키는 식으로 작동합니다. 루프 역시도 키즈멧으로 이루어집니다. 다른 키즈멧 기반 컨디션을 추가하여 루프를 멈추거나 일시정지하는 등의 유연성을 발휘할 수도 있습니다.

SeqAct_ForLoop.uc
  class SeqAct_ForLoop extends SequenceAction;
  
  // 루프 시작으로 사용할 수치
  var() int Start;
  // 루프 끝으로 사용할 수치
  var() int End;
  // for 루프 증가분. 항상 양수 사용
  var() int Increment;
  // 이터레이팅에 끝 포함
  var() bool IncludeEnd;
  // 레벨 디자이너가 필요할 때 쓰는 Index 출력
  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)
  }
  

사용법


이 노드 사용법은, 일단 for 루프에 쓸 Start 시작과 End 끝 수치를 지정합니다. 예로 1 에서 6 까지 가기로 했다면 Start 에는 1, End 에는 7 (IncludeEnd 변수를 체크했다면 6) 을 설정합니다. Increment 증분 값을 늘리거나 줄여 스텝 크기를 변경할 수도 있습니다. Increment 를 2 로 설정하고서 0 에서 16 까지 간다면 0, 2, 4, 6, ... 식의 패턴도 가능합니다.

키즈멧 루프 사이에 지연시간을 설정할 수도 있습니다. 각 스텝 사이마다 잠깐 포즈를 둔다는 뜻입니다. 아래 예제에서는 각 이터레이션마다 딜레이를 1 초 설정했습니다.

Int 변수에 Index 파라미터를 연결하여 현재 for 루프를 구할 수도 있습니다. 아래 예제에서는 거기에 문자열로 변환시킨 다음 로그로 출력하여 테스트해 보기도 했습니다.

KismetForLoop.jpg

관련 토픽