Xna를 이용한 게임 개발 - 1

1,505
-1

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,505
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Xna를 이용한 게임 개발 - 1

  1. 1. XNA를 이용한 게임 개발 - 1 GROW 게임팀 진재연
  2. 2. 목차• XNA란 무엇인가?• 개발 환경 구축하기• XNA의 구조• 간단한 이미지 출력하기2013-04-04 XNA를 이용한 게임 개발 2
  3. 3. GROW Game Team XNA란 무엇인가?2013-04-04 XNA를 이용한 게임 개발 3
  4. 4. XNA란 무엇인가?• XNA Game Studio – Microsoft에서 공개한 인디 게임 개발 도구 – 주 개발 언어는 C#, 꼼수를 통해 VB.NET도 가능 – 최신 버전은 4.0 – 2012년에 공식적으로 Microsoft의 지원 종료 – 현재는 MonoGame을 통해 XNA를 사용 가능 • Microsoft에서도 MonoGame을 지원하고 있음 – 많은 API가 DirectX와 비슷하며, 내부적으로 DirectX9 또는 DirectX10을 사용하고 있음 – Shader 2.0 언어를 통해 쉐이더 사용 가능2013-04-04 XNA를 이용한 게임 개발 4
  5. 5. XNA란 무엇인가?• XNA로 개발 가능한 플랫폼 – XNA Framework 3.0, 3.1 • Windows • Xbox 360 • Zune, Zune HD – XNA Framework 4.0 • Windows • Xbox 360 • Windows Phone 72013-04-04 XNA를 이용한 게임 개발 5
  6. 6. XNA란 무엇인가?• MonoGame으로 개발 가능한 플랫폼 – MonoGame Framework 3.0 • Windows (OpenGL) • Windows 8, Windows RT • Windows Phone 8.0 • Linux • OS X • iOS • Android, OUYA • Playstation VITA2013-04-04 XNA를 이용한 게임 개발 6
  7. 7. GROW Game Team 개발 환경 구축하기2013-04-04 XNA를 이용한 게임 개발 7
  8. 8. 개발 환경 구축하기• 통합 개발 환경 – XNA Game Studio 4.0 • Visual Studio 2010 • Visual Studio 2012 (Windows Phone 7 및 8만 지원) – MonoGame 3.0 • Visual Studio 2010 • Visual Studio 2012 • Mono Develop • Xamarin Studio2013-04-04 XNA를 이용한 게임 개발 8
  9. 9. 개발 환경 구축하기• 개발 언어 – XNA Game Studio 4.0 • C# 4.0 이하 – Windows는 VS2010에서 지원하는 모든 C# 문법을 지원 • C# 3.0 – Xbox/WP의 경우 4.0 문법 사용시 컴파일 오류 발생 – MonoGame 3.0 • C# 4.0 이하 – 일부 플랫폼은 3.0 이하만 사용해야 함2013-04-04 XNA를 이용한 게임 개발 9
  10. 10. 개발 환경 구축하기• 통합 개발 환경 다운로드 – Visual Studio 2010/2012 • Microsoft Dreamspark를 통해 다운로드 – http://www.dreamspark.com • Visual Studio Express 홈페이지에서 다운로드 – Mono Develop 3.0 • MonoDevelop 홈페이지에서 다운로드 – http://www.mono-develop.com – Xamarin Studio • Xamarin 홈페이지에서 다운로드 – http://www.xamarin.com2013-04-04 XNA를 이용한 게임 개발 10
  11. 11. 개발 환경 구축하기• XNA/MonoGame 다운로드 – XNA Game Studio 4.0 • MS Windows Phone 개발자 페이지에서 다운로드 – http://dev.windowsphone.com • MS Xbox Live Indie 개발자 페이지에서 다운로드 – http://xbox.create.msdn.com – MonoGame 3.0 • Codeplex의 MonoGame 페이지에서 다운로드 – http://monogame.codeplex.com2013-04-04 XNA를 이용한 게임 개발 11
  12. 12. GROW Game Team XNA의 구조2013-04-04 XNA를 이용한 게임 개발 12
  13. 13. XNA의 구조• 동작 클래스 스택 (간소화) DrawableGamecomponent Texture2D 클래스 Model 클래스 클래스 Effect 클래스 SoundEffect 클래스 Gamecomponent 클래스 ComponentCollection GraphicsDevice 클래스 ContentManager 클래스 클래스 Game 클래스2013-04-04 XNA를 이용한 게임 개발 13
  14. 14. XNA의 구조• Game 클래스 – 창, 그래픽스 디바이스, 리소스를 총 관리하는 클 래스 – 사용자가 상속받아서 사용하는 클래스로, 이 클래 스로부터 게임이 시작된다 – Game 클래스 내에서 만으로도 게임 개발이 가능 • 그러나 GameComponent, DrawableGameComponent 등을 최대한 활용하여 모듈화 하는 것이 좋음2013-04-04 XNA를 이용한 게임 개발 14
  15. 15. XNA의 구조• GraphicsDevice 클래스 – 렌더링을 담당하는 클래스 – 3D 뿐 아니라 2D도 렌더링 가능하나, 2D는 SpriteBatch 클래스를 통해 하는 것이 편리함2013-04-04 XNA를 이용한 게임 개발 15
  16. 16. XNA의 구조• SpriteBatch 클래스 – 2D 렌더링을 담당하는 클래스 – 내부적으로 GraphicsDevice를 사용하여 처리 – 블렌드 방식을 손쉽게 변경할 수 있으며 일괄 변환 행렬 적용 가능 • 알파 블렌드, 가산 블렌드 등이 미리 정의되어 있음 – 텍스처와 스프라이트 폰트 출력 가능 • Texture2D, SpriteFont2013-04-04 XNA를 이용한 게임 개발 16
  17. 17. XNA의 구조• ContentManager 클래스 – 이미지, 모델, 쉐이더, 사운드, 텍스트 등의 콘텐트 를 읽어오는 클래스 – 한번 읽어온 콘텐트는 캐시되어 빠르게 읽어올 수 있음 – 읽어온 콘텐트들의 캐시를 제거하려면 함수 하나 만 호출하면 끝 – 이 클래스를 사용하기 위해 콘텐트를 컴파일해야 하는 단점이 있지만 그에 못지 않은 장점도 많음2013-04-04 XNA를 이용한 게임 개발 17
  18. 18. XNA의 구조• GameComponent 클래스 – 모듈화를 위해 사용할 수 있는 컴포넌트 클래스 – 렌더링 작업이 없는 개체의 구현을 위해 사용 – Game 클래스의 ComponentCollection에 등록하 면 자동으로 내용을 실행해 줌 • GameComponent의 Enabled를 false로 만들면 실행하 지 않음2013-04-04 XNA를 이용한 게임 개발 18
  19. 19. XNA의 구조• DrawableGameComponent 클래스 – 모듈화를 위해 사용할 수 있는 컴포넌트 클래스 – 렌더링 작업이 있는 개체의 구현을 위해 사용 – Game 클래스의 ComponentCollection에 등록하 면 자동으로 내용을 실행해 줌 • DrawableGameComponent의 Enabled를 false로 만들 면 업데이트 작업을 실행하지 않음 • DrawableGameComponent의 Visibled를 false로 만들 면 렌더링 작업을 실행하지 않음2013-04-04 XNA를 이용한 게임 개발 19
  20. 20. XNA의 구조• Texture2D 클래스 – 텍스처 클래스 – SpriteBatch 클래스를 통해 2D 렌더링에 사용할 수도 있지만 Model 클래스에 씌워 3D 텍스처로도 사용할 수 있음 – BMP, PNG, JPG 등의 파일로부터 읽어올 수 있음 – 픽셀 정보를 이용해 직접 구성할 수도 있음2013-04-04 XNA를 이용한 게임 개발 20
  21. 21. XNA의 구조• Model 클래스 – 3D 메쉬 모델 클래스 – X 파일로부터 읽어올 수 있으며, 텍스트 X 파일과 바이너리 X 파일 모두 지원 – 렌더링을 위해서는 Effect 클래스와 같이 사용해야 함 • XNA는 고정 렌더링 파이프라인이 없기 때문2013-04-04 XNA를 이용한 게임 개발 21
  22. 22. XNA의 구조• Effect 클래스 – 쉐이더 관련 클래스 – BasicEffect 클래스를 사용하면 손쉽게 기본 쉐이 더를 사용할 수 있음 – FX 파일을 불러와 사용자 쉐이더를 사용할 수도 있음 • X 파일에 내장하면 따로 불러올 필요 없이 Model 파일 만 불러오면 알아서 모두 불러옴 – 이 외에 SpriteEffect, SkinnedEffect 등이 구현되어 있음2013-04-04 XNA를 이용한 게임 개발 22
  23. 23. XNA의 구조• SoundEffect 클래스 – 사운드 클래스 – MP3 파일과 WMA 파일 지원 – XNA 초기에는 지원하지 않았음 • XNA 초기에는 XACT를 통해서만 사운드를 사용할 수 있었기 때문에 사운드 파일의 용량이 매우 컸음2013-04-04 XNA를 이용한 게임 개발 23
  24. 24. XNA의 구조• Song 클래스 – 배경음을 재생하기 위해 추가된 클래스 – 여러 Song을 불러와 SongCollection으로 만들어 MediaPlayer로 재생하면 연속 재생도 가능함2013-04-04 XNA를 이용한 게임 개발 24
  25. 25. XNA의 구조• Video 클래스 – 동영상 재생 클래스 – 지원하지 않는 플랫폼 존재2013-04-04 XNA를 이용한 게임 개발 25
  26. 26. XNA의 구조• Keyboard 클래스 – 키보드 입력을 위한 클래스 – 키가 눌려 있는 지만 감지하므로 방금 눌렸는 지, 방금 뗐는지 등은 감지할 수 없음2013-04-04 XNA를 이용한 게임 개발 26
  27. 27. XNA의 구조• Mouse 클래스 – 마우스 입력을 위한 클래스 – Keyboard 클래스와 마찬가지로 마우스 버튼이 눌 려 있는 지만 감지함 – 마우스 위치를 가져올 수 있음 – iOS 및 Android는 입력을 지원하지 않음2013-04-04 XNA를 이용한 게임 개발 27
  28. 28. XNA의 구조• GamePad 클래스 – Xbox 360 컨트롤러 입력을 위한 클래스 – 버튼이 눌려 있는 지만 감지함 – 플레이어에 따라 최대 4개 입력 가능 – 왼쪽/오른쪽 엄지 스틱과 트리거 버튼 입력 지원 – 진동 지원 – Windows Phone은 Back 버튼 입력만 지원함2013-04-04 XNA를 이용한 게임 개발 28
  29. 29. XNA의 구조• TouchPanel 클래스 – 멀티 터치 입력을 위한 클래스 – 내부의 TouchCollection에는 터치점과 관련된 TouchLocation 정보가 담겨 있음2013-04-04 XNA를 이용한 게임 개발 29
  30. 30. XNA의 구조• 동작 순서 (Game, *Component 클래스) – 왼쪽에서 오른쪽, 위에서 아래로 순서 Game 클래스 Initialize 함수 Update 함수 Dispose 함수 LoadContent 함수 Draw 함수 UnloadContent 함수2013-04-04 XNA를 이용한 게임 개발 30
  31. 31. XNA의 구조• Initialize 함수 – 게임을 시작하기 전에 미리 데이터를 정리하고 객 체를 생성하는 함수 – 상위 클래스의 Initialize 함수를 호출하면 최종적으 로 LoadContent 함수를 호출하여 콘텐트를 읽어 옴2013-04-04 XNA를 이용한 게임 개발 31
  32. 32. XNA의 구조• LoadContent 함수 – 게임에서 사용할 콘텐트를 읽어오는 클래스 – 게임 도중에 콘텐트를 읽어와도 무관하나, 게임 성 능에 영향을 미칠 수 있으므로 가급적이면 LoadContent에서 읽어올 것을 추천함 – 그래픽스 디바이스가 소실될 경우 자동으로 LoadContent 함수를 호출하여 소실된 콘텐트를 복구함2013-04-04 XNA를 이용한 게임 개발 32
  33. 33. XNA의 구조• Update 함수 – 게임이 시작되면 매번 반복되는 함수 – 게임 로직 및 입력을 이 함수에서 처리 – 시간 동기화를 위한 GameTime 구조체가 매개변 수로 넘어옴 – 프레임 고정 불가능 • 프레임 고정이 불가능한 대신 시간 동기화로 프로세서 에 따른 속도 차이를 메워주어야 함2013-04-04 XNA를 이용한 게임 개발 33
  34. 34. XNA의 구조• Draw 함수 – 렌더링 코드를 반복하는 함수 – 시간 동기화를 위한 GameTime 구조체가 매개변 수로 넘어옴 – 프레임 고정 가능(보통 60FPS 또는 30FPS로 고 정) • 활성 상태의 프레임 고정과 비활성 상태의 프레임 고정 을 따로 분리할 수 있음2013-04-04 XNA를 이용한 게임 개발 34
  35. 35. XNA의 구조• UnloadContent 함수 – ContentManager를 통해 읽어오지 않은 다른 콘텐 트를 제거하기 위한 용도의 함수 – ContentManager를 통해 읽어온 콘텐트는 이 함수 에서 자동으로 모두 소멸시킴 • GameComponent는 이 내용에 해당되지 않음2013-04-04 XNA를 이용한 게임 개발 35
  36. 36. XNA의 구조• Dispose 함수 – 게임이 종료되었을 때 호출되는 함수 – UnloadContent 함수를 호출하는 함수로, 보통은 이 함수를 재구현하지 않는다 – 특별한 용도에 따라 재구현을 하는 경우도 있으나 가급적이면 하지 말 것2013-04-04 XNA를 이용한 게임 개발 36
  37. 37. GROW Game Team 간단한 이미지 출력하기2013-04-04 XNA를 이용한 게임 개발 37
  38. 38. 간단한 이미지 출력하기• XNA 프로젝트는 아래와 같은 구성으로 되어 있음 – 게임 프로젝트 • 로직 소스 코드 – 콘텐트 프로젝트 • 콘텐트 – 이미지, 사운드, …2013-04-04 XNA를 이용한 게임 개발 38
  39. 39. 간단한 이미지 출력하기• 콘텐트 프로젝트에 이미지 추가 – 드래그하여 복사하거나 오른쪽 클릭 > 추가 > 기 존 항목을 통해 추가할 수 있음 – File Name보다 Asset Name이 중요 • ContentManager는 Asset Name으로 파일을 불러옴2013-04-04 XNA를 이용한 게임 개발 39
  40. 40. 간단한 이미지 출력하기• Game1.cs 파일 수정하기 – 멤버 변수로 아래와 같은 변수 추가2013-04-04 XNA를 이용한 게임 개발 40
  41. 41. 간단한 이미지 출력하기• LoadContent 함수 수정하기 – LoadContent의 TODO 주석 다음에 코드 추가2013-04-04 XNA를 이용한 게임 개발 41
  42. 42. 간단한 이미지 출력하기• Draw 함수 수정하기 – Draw의 TODO 주석 다음에 코드 추가2013-04-04 XNA를 이용한 게임 개발 42
  43. 43. 간단한 이미지 출력하기• 실행2013-04-04 XNA를 이용한 게임 개발 43
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×