UDN
Search public documentation:

DevelopmentKitGemsPlatformerStarterKitKR
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 젬 > 플랫포머 스타터 키트
UE3 홈 > 시작하기: 프로그래밍 > 플랫포머 스타터 키트

플랫포머 스타터 키트


UDK 2011년 6월 버전으로 최종 테스팅.
문서 변경내역: James Tan 작성. 홍성진 번역.

개요


이 스타터 키트에는 섀도우 컴플렉스(Shadow Complex)같은 횡스크롤 플랫포머 게임 개발의 시작점으로 사용할 수 있는 예제 코드가 있습니다.

ShadowComplex.jpg

포함된 것


  • NPC 폰 (SPG_AIPawn) - 이 NPC 폰에는 플레이어를 쫓는 기능이 있습니다. 플레이어와 맞닥뜨리면 자폭하면서 플레이어에게 약간의 대미지를 입힙니다. 플레이어는 살아남으려면 이 놈들을 쏴 없애야 합니다.
  • 횡스크롤 카메라 (SPG_Camera + SPG_CameraProperties) - 이 카메라는 SPG_CameraProperties 에 저장된 오프셋을 플레이어의 위치에 더합니다. 그런 다음 카메라의 로테이션을 플레이어쪽으로 향하도록 하여 횡스크롤 카메라로 만듭니다.
  • 아키타입 폰과 웨폰을 사용하는 게임인포 (SPG_GameInfo) - 게임인포는 플레이어에 대한 아키타입 폰을 생성하고 플레이어에게 아키타입 웨폰을 줍니다. 여기서 아키타입을 사용한 이유는 게임 디자이너가 리컴파일 없이 파라미터를 빠르게 조절할 수 있도록 하기 위해서입니다.
  • 인벤토리 매니저 (SPG_InventoryManager) - 인벤토리 매니저는 원래 아키타입에 따라 인벤토리를 스폰하도록 되어 있지 않았습니다.
  • 플레이어 콘트롤러 (SPG_PlayerController) - 이 플레이어 콘트롤러는 이동 축과 플레이어 로테이션 처리를 고정시킵니다.
  • 플레이어 폰 (SPG_PlayerPawn) - 이 플레이어 폰은 턴을 왼쪽과 오른쪽 사이에서만 보간하는 플랫포머 폰처럼 작동하도록 처리합니다. 위아래 조준도 처리하며, 웨폰 프로젝타일이 어디서 발사되는지 처리하는 코드도 있습니다.
  • 웨폰 (SPG_Weapon) - 이 웨폰 클래스는 대부분의 프로퍼티가 언리얼 에디터에 노출되어 있기에 아키타입 가능합니다. 플레이어가 무기를 발사할 때 메시 붙이기는 물론 특수 효과와 사운드까지도 처리합니다.
  • HUD (SPG_HUD) - 플레이어 폰의 체력을 표시하는 단순한 HUD 입니다.
  • 픽업 (SPG_HealthPickup) - NPC 가 죽을 때 랜덤하게 떨구는 단순한 픽업입니다.

코드 전반적으로 문서화가 잘 되어 있으니, 여기에 반영하지는 않겠습니다. 아래 내려받기 링크에서 코드와 콘텐츠를 내려받아 주시기 바랍니다. 이 문서 나머지 부분에서는 스타터 키트 구조가 어떻게 되어있는지, 여러분께서 만들고자 게임으로 어떻게 확장시킬 수 있는지에 대해 자세히 알아보도록 하겠습니다.

코드 구조


카메라 작동 방식

카메라는 SPG_Camera 에서 카메라의 위치와 로테이션을 설정하는 방식으로 작동합니다. 어느 카메라 클래스를 사용할 것인지는 PlayerController 안에서 정의됩니다. SPG_PlayerController 내 default properties 안에 보시면 SPG_Camera 가 어떻게 정의되어 있는지 보시기 바랍니다.

렌더되는 모든 프레임에 대해 UpdateViewTarget 함수가 호출됩니다. SPG_Camera 는 카메라 위치를 타겟, 주로 플레이어의 폰 위치로 설정하고, 거기에 SPG_CameraProperties 의 아키타입 안에 저장된 CameraOffset 을 더합니다. 이 작업은 소스 코드를 다시 컴파일할 필요 없이 언리얼 에디터 안에서 카메라 오프셋을 바로 조절할 수 있도록 하기 위해 이루어진 것입니다.

마지막으로 카메라의 로테이션은 카메라를 타겟의 위치 방향으로 조준하여 설정합니다. 이로써 오프셋과 무관하게 카메라가 항상 타겟을 바라보도록 할 수 있습니다.

게임 작동 방식

게임 인포는 언리얼 에디터에서 플레이할 때 언리얼 에디터가 설정하는 것입니다. 디폴트 게임 타입으로 만들려면 환경설정 파일을 조정해 줘야 합니다. SPG_GameInfo 는 플레이어의 폰과 디폴트 웨폰, 두 아키타입으로의 리퍼런스를 저장합니다. 여기서 아키타입을 사용한 이유는 소스 코드를 다시 컴파일하지 않고도 언리얼 에디터 안에서 빠르게 즉석에서 조정할 수 있도록 하기 위해서입니다.

플레이어가 폰을 요청할 때, SpawnDefaultPawnFor 가 호출됩니다. 여기서 플레이어 폰 아키타입을 스폰시켜 플레이어에게 줍니다.

디폴트 인벤토리를 폰에게 줄 때는 아키타입 웨폰을 폰에게 줍니다.

SPG_GameInfo 역시 플레이어 콘트롤러 클래스와 HUD 클래스를 default properties 안에 정의하고 있습니다.

NPC 폰 작동 방식

이 스타터 팩에는 무조건 달려들다 부딪히면 자폭하는 폰이 있습니다. 단순무식 로직이 전부라 AIController 같은 것은 전혀 필요치 않습니다.

디폴트로 폰의 피직스 모드는 falling 으로 설정되어 있습니다. 이로써 공중에 스폰되는 폰이 땅에 떨어지게 만듭니다. 폰이 땅이나 다른 액터 위에 착지하면, Landed 이벤트가 호출됩니다. 호출 이후 폰의 피직스는 PHYS_Flying 으로 설정됩니다. 그래야 폰이 플레이어를 쫓게 만드는 데 있어 속도와 가속도를 쉽고 편하게 조절할 수 있습니다.

매 틱마다 NPC 폰은 적이 있는지 검사합니다. 없으면 로컬 플레이어 콘트롤러와 그 폰을 찾아본 다음 할당합니다. 적이 있고 날아다니는 중이라면, 로테이션을 그 적을 바라보도록 설정합니다. 그 방향으로 움직이도록 속도와 가속도도 설정해 줍니다.

폰이 죽으면 PlayDying 함수를 호출합니다. PlayDying 함수는 스켈레탈 메시에 대한 래그돌 모드를 켭니다.

운에 따라 픽업을 스폰해야 한다면, 리퍼런스된 아키타입을 사용하여 생성합니다.

폰이 플레이어 폰과 부딪히면 단순히 폭발하여 대미지를 약간 입히고 자폭합니다.

플레이어 콘트롤 작동 방식

플레이어 콘트롤은 SPG_PlayerController.PlayerWalking.PlayerMove 안에서 이루어 집니다. 카메라 로테이션의 축을 사용하면 폰이 카메라 뷰 좌표를 사용하여 움직이도록 할 수 있습니다. 횡스크롤 게임이기 때문에 Y 축만 필요할 뿐이고, 그래서 aStrafe 값이 필요합니다. 플레이어가 강제로 왼쪽이나 오른쪽으로만 움직이도록 하는 것입니다.

플레이어가 어느 한 방향으로 움직임에 따라 적절한 로테이션을 설정합니다. 그래야 플레이어의 폰이 움직이는 방향에 따라 왼쪽이나 오른쪽을 바라보도록 할 수 있습니다.

보통 UpdateRotation 에서 마우스 X 와 마우스 Y 둘 다 처리되나, 요(좌우)는 자동화되어 있기에 마우스 Y 만 처리해 주면 됩니다. 여기서 Mouse Y 는 폰의 피치(상하)를 제어합니다. 그런 다음 이것을 폰에 전해줍니다.

SPG_Pawn 에서 요는 폰을 로테이트하여 처리하는 반면, 피치는 폰의 스켈레탈 메시 컴포넌트의 애님 트리 안에 있는 aim offset 애님 노드로 처리해 줍니다. aim offset 애님 노드는 플레이어 폰의 각기 다른 조준 포즈를 전환해 주는데, 잘 돌아갑니다. 더욱 자세한 내용을 원하시면 애니메이션 노드 문서를 참고하시기 바랍니다.

웨폰 작업 방식

이 스타터 키트에서 웨폰은 언리얼 토너먼트 3 의 웨폰 작업방식과 매우 비슷합니다.

웨폰을 처음 스폰시켜 플레이어한테 쥐어줄 때, ClientGivenTo 가 실행됩니다. 여기서 SPG_Weapon 이 3인칭 무기 메시를 플레이어 폰에 붙여 줍니다.

플레이어가 무기를 발사할 때, 적절한 발사 상태를 전송하여 결국 ProjectileFire 를 호출합니다. 프로젝타일의 스폰 위치와 로테이션은 플레이어 폰의 GetWeaponStartTraceLocation 과 GetAdjustedAimFor 함수에서 구해옵니다. SPG_PlayerPawn 의 경우 단순히 소켓의 위치와 로테이션을 반환합니다. 이로써 프로젝타일이 올바른 위치에서 발사되어 올바른 방향으로 날아가게 됩니다.

무기 발사시 PlayFireEffects 가 호출되어 머즐 플래시(총구 섬광)가 활성화됩니다. 무기 발사를 멈추면 StopFireEffects 가 호출되어 머즐 플래시가 비활성화됩니다.

별도의 플레이어 폰을 사용하는 이유

이 스타터 키트에는 별도의 플레이어 폰이 사용되었는데, 그 이유는 위아래 조준같은 일부 함수성은 플레이어의 폰에만 적용되기 때문입니다. 이러한 것들은 NPC 에는 적용되지 않기에 분리해 내기로 한 것이죠. 폰이 플레이어에 속하는지 아닌지 쉽게 검사할 수 있기도 합니다만, 어차피 폰의 콘트롤러를 검사해도 쉬운 일이긴 합니다.

스타터 키트 사용 방법


  1. UDK 를 다운로드 합니다.
  2. UDK 를 설치합니다.
  3. zip 파일을 다운로드 합니다.
  4. 내용물을 UDK 기본 디렉토리에 풉니다. (예로 C:\Projects\UDK-2011-08\) 기존 파일이나 폴더를 덮어쓸 것이라는 창이 뜰지도 모릅니다. 모두 예 를 선택하십시오.
    PSK_00_UnzipContents.jpg
  5. UDKGame\Config 디렉토리 안의 DefaultEngine.ini 를 메모장으로 엽니다. (예로 C:\Projects\UDK-2011-08\UDKGame\Config\DefaultEngine.ini)
    PSK_01_FindDefaultEngine.jpg
  6. EditPackages 를 검색합니다.
    PSK_02_OpenDefaultEngine.jpg
  7. +EditPackages=StarterPlatformGame 를 추가합니다.
    PSK_03_ModifyDefaultEngine.jpg
  8. Binaries 디렉토리에 있는 Unreal Frontend Application 을 실행합니다. (예로 C:\Projects\UDK-2011-08\Binaries\UnrealFrontend.exe)
    PSK_04_FindUnrealFrontEnd.jpg
  9. Script 를 누른 다음 Full Recompile 을 선택합니다.
    PSK_05_FullRecompile.jpg
  10. StarterPlatformGame 패키지가 마지막으로 컴파일되는 것을 볼 수 있습니다.
    PSK_06_CompileResults.jpg
  11. UnrealEd 를 눌러 언리얼 에디터를 실행시킵니다.
    PSK_07_UnrealEd.jpg
  12. Open 버튼을 누르고 StarterPlatformMap.udk 를 엽니다.
    PSK_08_OpenMap.jpg
    PSK_09_Finish.jpg
  13. Play In Editor 버튼을 눌러 플랫폼 스타터 키트를 플레이합니다.
    PSK_10_PIE.jpg

플랫포머 스타터 키트 셋업을 마쳤으면 이제 만들고자 하는 게임의 방향에 맞춰 수정을 시작하면 됩니다. 언리얼스크립트 코드는 Development\Src\StarterPlatformGame\Classes\.uc* 안에 위치해 있으며, 모든 콘텐츠는 UDKGame\Content\StarterPlatformGameContent.upk 안에 포함되어 있습니다.

내려받기


StarterPlatformerKit.jpg

  • 이 스타터 키트에 사용된 코드와 콘텐츠 내려받기.