Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처
Upcoming SlideShare
Loading in...5
×
 

Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처

on

  • 8,605 views

 

Statistics

Views

Total Views
8,605
Views on SlideShare
2,600
Embed Views
6,005

Actions

Likes
8
Downloads
50
Comments
0

8 Embeds 6,005

http://gamedevforever.com 3580
http://www.gamedevforever.com 1854
http://gamedevforever.tistory.com 382
http://www.hanrss.com 123
http://feeds.feedburner.com 41
https://twitter.com 23
http://50.10.175.132 1
http://translate.googleusercontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처 Kgc2012 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처 Presentation Transcript

  • Korea Games Conference 박성준 KGC 2012 (notorz@hotmail.com)
  • 유연한 컨텐츠 개발을 위한 온라인 게임 아키텍처 Korea Games Conference 박성준 KGC 2012 (notorz@hotmail.com)
  • 온라인 게임 액체처럼 만들자 View slide
  • 콘솔 게임 View slide
  • 온라인 게임
  • 그렇다면..컨텐츠는 누가 만들어야 할까요?
  • 서버 프로그래머? 클라이언트 프로그래머?
  • 서버 컨텐츠 클라이언트프로그래머 프로그래머 프로그래머
  • 그래픽스 프로그래머 툴 물리 엔진 프로그래머 프로그래머네트워크 인공 지능프로그래머 프로그래머 Input 사운드프로그래머 프로그래머 UI 게임 플레이 프로그래머 프로그래머 스크립터
  • 그래픽스 프로그래머 게임 플레이 프로그래머 UI 프로그래머네트워크 툴프로그래머 프로그래머 Input 프로그래머 DB 인공 지능프로그래머 프로그래머 사운드 프로그래머 스크립터 물리 엔진 프로그래머 서버 ??? 클라이언트
  • GameLogicServer전투 시스템
  • 그래픽스 프로그래머 게임 플레이 프로그래머 UI 프로그래머네트워크 툴프로그래머 프로그래머 Input 프로그래머 DB 인공 지능프로그래머 프로그래머 사운드 프로그래머 스크립터 물리 엔진 프로그래머 서버 컨텐츠 클라이언트
  • 서버 컨텐츠 클라이언트프로그래머 프로그래머 프로그래머
  • 컨텐츠 개발 컨셉• 세션 중심 개발 • 유저와 서버 사이의 1:1 이벤트 • 존 입장 / 변경 / 퇴장 • 옵션 정보 저장 • 게임 외적인 이벤트• 게임 오브젝트 중심 개발 • 게임 오브젝트들 사이의 이벤트 • 이동 / 공격 / 피격 • 아이템 떨어뜨리기 / 줍기 • 게임 내적인 이벤트
  • Core EngineShodown Contents Tools ServerPlatform
  • Core Engine ContentsLogicServer Client Tools
  • Core.Native Core.Net FileModuleCore LogModule ShodownFile ShodownLog
  • CoreFileModule LogModuleShodown Shodown File Log
  • Graphics UI DB EngineNetwork Input Sound
  • Graphic Object Graphic IGraphic Manager Factory IGraphic IRenderer SourceGraphicModuleGamebryoWrapper Gamebryo Factory Graphic Renderer Source
  • 컨텐츠를 개발할 때에는 컨텐츠’만’ 개발하자
  • 플레이어가몬스터를강베기 스킬로공격한다 플레이어 모델을 띄운다 몬스터 모델을 띄운다 강베기 애니메이션을 재생한다 피격 애니메이션을 재생한다 데미지 계산을 한다 HP를 깎는다 이펙트를 터뜨린다 사운드를 재생시킨다 UI 연출을 한다 모델을 어떻게? 애니메이션을 어떻게? 이펙트 렌더링을 어떻게? 사운드 재생을 어떻게? 이미지를 화면에 어떻게?
  • Client Client System Server Logic System ServerGameBase SinglePlay Contents System Test
  • 클라이언트 컨텐츠 공통 컨텐츠 서버 컨텐츠 클라이언트 실행 파일 / 모듈의 조합 로직 서버 실행 파일 / 모듈의 조합 싱글 테스트 실행 파일 / 모듈의 조합
  • GameBase System ServerSystem ClientSystemLogicServer SinglePlayTest Client
  • Network UI Module Module Graphic Sound Module ModuleDatabase Module GameBase System Input Module ServerSystem ClientSystem
  • Network UI Module Module Graphic Sound Module Module Database Module Scaleform Input Wrapper Module Gamebryo Wrapper Shodown ADO DBS Lua SoundDatabase Connector Database Shodown Input
  • Lua Gamebryo Database Wrapper Scaleform ADO Wrapper Database Shodown Sound DBSConnector Shodown Input LogicServer SinglePlayTest Client
  • 세션 중심 개발• 유저와 서버 사이의 1:1 이벤트• 존 입장 / 변경 / 퇴장• 옵션 정보 저장• 등 게임 외적인 이벤트
  • IAccept Observer ServerSession Base ServerBase ServerObject BaseNetwork NetworkManager Factory IConnect Observer ClientBase ClientSession Base ClientObject Base
  • ServerServer Server Server Server ServerSession Session Session Session Session Client Client Client Client ClientSession Session Session Session SessionClient Client Client Client Client
  • AcceptObserver Server Base
  • Accept Observer Server Base Client BaseNetworkManager
  • Accept Observer Server Base Client Base Network접속 Manager
  • Accept Observer Server Base Client Base Network접속 Manager
  • Accept Observer Server Base Client Session생성 Client Base Network접속 Manager
  • Accept Observer Server Base 연결 Client Session생성 Client Base Network접속 Manager
  • Accept Observer 알림 Server Base 연결 Client Session생성 Client Base Network접속 Manager
  • User Accept Observer 알림 Server Base 연결 Client Session생성 Client Base Network접속 Manager
  • User Accept Observer 알림 Server Session Server Base 연결 Client Session생성 Client Base Network접속 Manager
  • User Accept Observer 알림 Server Session Server Base 연결 연결 Client Session생성 Client Base Network접속 Manager
  • User User Accept Observer 알림 Server Server Session Session Server Base 연결 연결 Client Client Session Session생성 Client Client Base Base Network Network접속 Manager Manager
  • 메시지 하나로 끝나는 일은 없다
  • CoroutineA B
  • ABC 시간 흐름
  • 문제는…• 게임 로직은 C++로 만든다!• C++에서 코루틴을 쓰고 싶다!• C++은 코루틴을 지원하지 않는다?!
  • Boost 비공식 라이브러리
  • 문제는…• 윈도우 비스타/2008 이상에서만 동작한다!• 서버는 윈도우 2008 이상을 사용하면 된다…• 하지만 클라이언트에서는 못쓴다!!• 이유는 몇몇 Fiber 관련 API 때문…
  • !!!!!민철님(@summerlight00) 사..사…..감사합니다!
  • Boost 만세! 올리버 코왈크씨 만세!!!STL TR 시리즈에 context와 coroutine이 포함되길 기대합니다..
  • 아직 시간이 없어.. 써보진 못했지만… 곧 변경할 예정….. 아마도 KGC 2012가 끝난 다음 바로..?!
  • Call YieldResume YieldResume YieldResume End
  • 유저시퀀스• 유저 별로 발생하는 게임 외적인 이벤트 로직의 객체화• 시퀀스 하나 = 이벤트의 처음부터 끝까지• 내부적으로 boost::coroutine을 사용하여 구현
  • 외부 인터페이스User에 접근 가능코루틴 인터페이스실제 실행 함수코루틴 함수
  • User
  • 유저시퀀스는 추가복사 없이 데이터를 로직 코드로 바로 가져올 수 있다유저 시퀀스의스택 메모리에 할당됨 버퍼에서 데이터 Pop 하여 받으려는 변수로 바로 가져옴 Network - OnRecv()에서 실행 User – Update()에서 실행 Thread가 달라도 문제 없음
  • 메시지ID + 데이터 타입 메시지에서 사용할 데이터 형식 메시지 타입 선언한 순서로 메시지ID 할당버퍼에 데이터 넣기버퍼에서 데이터 꺼내기
  • 죄송합니다.. 시간에 쫓겨 급해서 Boost 전처리기 메타를 썼습니다..
  • 유저시퀀스의 로직은 모두 User 객체의 Update에서 실행되는 것을 보장한다 시퀀스 생성 메시지 도착 Resume 코루틴 생성 후 Wait() 만나면 Resume 데이터 Pop Resume Yield Yield Yield 코 루틴 User - Update User - Update 메인 루틴 : Network Thread : Main Thread
  • 유저시퀀스에서 프로시저 호출
  • User NetworkModule DatabaseModule Database Server Object SessionUser 객체가 요청한 프로시저 결과는 User 객체가 전송한 메시지는 User 객체가 받는다 해당 User가 받는다
  • 유저시퀀스에서 유저시퀀스 호출
  • 게임 오브젝트 중심 개발 Server NPC1 Player1 NPC2 Server Server Server Object Object ObjectClient Client Client Client Client ClientObject Object Object Object Object ObjectNPC1 Player1 NPC2 NPC1 Player1 NPC2 Client Client
  • 에서 설명합니다!
  • 유연한 컨텐츠 개발을 위해서 무조건 데이터 드리븐 X 컨텐츠와 컨텐츠가 아닌 것 분리 기능별로 모듈화 최대한 응집성이 떨어지지 않게수치 데이터 + 로직 모듈 + 모듈 조합 스크립트 = 데이터드리븐
  • 감사합니다Special Thanks to :Dragonfly SS팀 일동/ 게임개발포에버 필진 일동 /민철님 / 퐆삼촌 / 조진현님 / 김정우님 / 오즈형 /레아형 / 민근형 / 티스형 / Hybrid님 / 창희님 /대마왕님 / banhae님 / 정균님 / 스티브 / 바레로 박사님 / 박성준김토마님 / Cagetu님 / 달땡땡님 / 퐁퐁퐁님 / 진짜님 / mail : notorz@hotmail.com박PD님 / 비토님 / 어제 같이 술 마신 분들 / 트친분들 twitter : @kgun86