UDN
Search public documentation:

MyFirstControllerKR
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

예제: My First Controller

2003년 11월 18일, 2226 빌드용으로 Chris Linder (DemiurgeStudios?) 작성. 최종 업데이트: Chris Linder (DemiurgeStudios?). 재미삼아 최종 업데이트: Michiel Hendriks

관련 문서

My First Code, My First Pawn, My First GameInfo?, My First HUD

서론

아직 My First Code 문서를 읽지 않았다면 먼저 그것을 읽으십시오.

이 문서에서는 폰이 수월하게 날고 또 “춤추는” 애니메이션을 재생하도록 하는 간단한 controller 클래스 작성법에 대해 살펴봅니다. 이 예제에는 My first Pawn 에서 설명된 pawn 클래스와 My First Game Info 에서 설명된 GameInfo 가 요구됩니다.

이 예제를 사용하려면 My First Code 문서에 수록된 설치 설명을 따르십시오. My First Code 문서에는 UnrealScript의 소스 코드 및 컴파일된 *.u 파일, 그리고 모든 것들을 작용하도록 하기 위한 애니메이션 및 텍스트 패키지가 포함되어 있습니다.

이 예제는 직선적인 코드 드롭, UDNBuild, UDNBuildOff, 그리고 런타임 또는 엔진의3323 빌드 (및 그 이후의 빌드)를 포함하는 어느 2226 빌드에서도 사용할 수 있습니다.

날기와 걷기

걷기와 날기 사이를 쉽게 교체하는데는 Fly, Walk, 그리고 ToggleFlyWalk, 이 3가지 실행 함수가 사용됩니다. 이 함수들은 런타임의 RTPlayerController 에 있는 것들과 같은 함수들입니다. 이 함수들은 (CheatManager.uc 에서 정의되지 않고) controller에 정의되어 있기 때문에 속임수 함수가 아니며, 따라서 넷 게임에서 사용될 수 있습니다. 넷 게임에서 올바르게 작용하기 위해서는 이 함수들이 서버에 정확히 복제되어야 합니다. 다음의 복제 블록 및 함수들이 그 방법을 보여줍니다.

replication
{
   reliable if(Role < ROLE_Authority)
      Fly, Walk, ToggleFlyWalk;
   ...
}

exec function Fly()
{
   if ( Pawn != None )
   {
      Pawn.UnderWaterTime = Pawn.Default.UnderWaterTime;
      ClientMessage("훨씬 가볍게 느껴지는군요");
      Pawn.SetCollision(true, true , true);
      Pawn.bCollideWorld = true;
      GotoState('PlayerFlying');
   }
}

exec function Walk()
{
   if ( Pawn != None )
   {
      Pawn.UnderWaterTime = Pawn.Default.UnderWaterTime;
      Pawn.SetCollision(true, true , true);
      Pawn.SetPhysics(PHYS_Walking);
      Pawn.bCollideWorld = true;
      GotoState('PlayerWalking');
   }
}

exec function ToggleFlyWalk()
{
   if(IsInState('PlayerFlying'))
      Walk();
   else
      Fly();
}

춤추기

DoDance 함수는 플레이어가 폰이 모든 클라이언트에서 애니메이션을 재생하도록 만드는 것이 어떻게 가능한지를 보여줍니다. 이 함수는 서버에서 호출되는 경우 애니메이션의 정확한 복제를 처리하는, ExamplePawnSetAnimAction 함수를 사용합니다. 여기에 대해서는 My First Pawn 문서에 설명되어 있습니다. 아래의 코드 블록을 보면 SetAnimAction 이 복수 플레이어 상태에서 서버에 호출된 것을 알 수 있습니다. 이 코드는 단독 플레이어일 때도 작용합니다.

var bool DoingDance;

replication
{
   ...
   reliable if ( Role < ROLE_Authority )
      DoDance;
}

exec function DoDance()
{
   if( ExamplePawn(Pawn) != NONE && Pawn.Physics == PHYS_Walking && !DoingDance)
   {
      Pawn.SetAnimAction( ExamplePawn(Pawn).DanceAnim );
      PlayerReplicationInfo.Score += 1;
      DoingDance = true;
      SetTimer(3.0, false);
   }
}

event Timer()
{
   DoingDance = false;
}

폰이 너무 빠르게 “춤추지” 않도록 보장하기 위해, bool DoingDance_와 함께 _Timer 가 사용되어 SetAnimAction 이 호출되는 속도를 제한합니다. DoingDancefalse 로 초기화되어 시작합니다. 복수 플레이어 상태에서는 서버에만 timer가 존재합니다. 또한, 폰들은 그들이 지면에 서있지 ( Pawn.Physics == PHYS_Walking ) 않은 경우에는 춤추지 않습니다.

컨트롤러의 사용

먼저 예제를 설치합니다; 예제 설치방법에 대해서는 My First Code 문서를 참고하십시오.

다음에는 "ToggleFlyWalk" 에 키가 결합되어 있는지 확인합니다. 런타임에서는 이것이 'f' 키로 기본 설정되어 있습니다. 런타임을 사용하지 않거나 어떤 이유에서 키의 결합을 해제한 경우에는 게임 내 콘솔('~' 키를 누르면 콘솔이 나타납니다)에서 다음을 타이프하여 키를 결합해야 합니다 :

set input f ToggleFlyWalk

물론 날기를 반드시 'f' 키로 결합해야 하는 것은 아니지만, 이것이 효과가 있습니다. 이제 게임에서 이 키를 누르면 폰이 날기와 걷기 사이를 왔다갔다 하게 됩니다.

폰이 춤추게 하려면 "DoDance" 에 키를 결합해야 합니다. 게임 내 콘솔에서 다음을 타이프하면 됩니다:

set input g DoDance

이제 'g' (춤추기를 'g' 에 결합하고 싶지 않은 경우에는 다른 키)를 누르면 폰이 몸을 조금 흔들게 됩니다. 솔직히, 이것은 별로 춤처럼 보이지는 않지만 그래도 소기의 목적은 달성한 셈입니다.