22. 컨텐츠 개발 컨셉
• 세션 중심 개발
• 유저와 서버 사이의 1:1 이벤트
• 존 입장 / 변경 / 퇴장
• 옵션 정보 저장
• 게임 외적인 이벤트
• 게임 오브젝트 중심 개발
• 게임 오브젝트들 사이의 이벤트
• 이동 / 공격 / 피격
• 아이템 떨어뜨리기 / 줍기
• 게임 내적인 이벤트
24. Core
Engine
Shodown
Contents
Tools
Server
Platform
25. Core
Engine
Contents
Logic
Server
Client Tools
34. 플레이어가
몬스터를
강베기 스킬로
공격한다
플레이어 모델을 띄운다
몬스터 모델을 띄운다
강베기 애니메이션을 재생한다
피격 애니메이션을 재생한다
데미지 계산을 한다
HP를 깎는다
이펙트를 터뜨린다
사운드를 재생시킨다
UI 연출을 한다 모델을 어떻게?
애니메이션을 어떻게?
이펙트 렌더링을 어떻게?
사운드 재생을 어떻게?
이미지를 화면에 어떻게?
35. Client
Client
System
Server Logic
System Server
GameBase SinglePlay
Contents
System Test
36. 클라이언트 컨텐츠
공통 컨텐츠
서버 컨텐츠
클라이언트 실행 파일 / 모듈의 조합
로직 서버 실행 파일 / 모듈의 조합
싱글 테스트 실행 파일 / 모듈의 조합
37. GameBase
System
ServerSystem ClientSystem
LogicServer SinglePlayTest Client
41. 세션 중심 개발
• 유저와 서버 사이의 1:1 이벤트
• 존 입장 / 변경 / 퇴장
• 옵션 정보 저장
• 등 게임 외적인 이벤트
42. IAccept
Observer
ServerSession
Base
ServerBase
ServerObject
Base
Network Network
Manager Factory
IConnect
Observer
ClientBase
ClientSession
Base
ClientObject
Base
43. Server
Server Server Server Server Server
Session Session Session Session Session
Client Client Client Client Client
Session Session Session Session Session
Client Client Client Client Client
45. Accept
Observer
Server
Base
Client
Base
Network
Manager
46. Accept
Observer
Server
Base
Client
Base
Network
접속 Manager
47. Accept
Observer
Server
Base
Client
Base
Network
접속 Manager
48. Accept
Observer
Server
Base
Client
Session
생성 Client
Base
Network
접속 Manager
49. Accept
Observer
Server
Base
연결
Client
Session
생성 Client
Base
Network
접속 Manager
50. Accept
Observer
알림
Server
Base
연결
Client
Session
생성 Client
Base
Network
접속 Manager
51. User
Accept
Observer
알림
Server
Base
연결
Client
Session
생성 Client
Base
Network
접속 Manager
52. User
Accept
Observer
알림
Server
Session
Server
Base
연결
Client
Session
생성 Client
Base
Network
접속 Manager
53. User
Accept
Observer
알림
Server
Session
Server
Base
연결
연결
Client
Session
생성 Client
Base
Network
접속 Manager
54. User User
Accept
Observer
알림
Server Server
Session Session
Server
Base
연결
연결
Client Client
Session Session
생성 Client Client
Base Base
Network Network
접속 Manager Manager
73. 유저시퀀스는 추가복사 없이 데이터를 로직 코드로 바로 가져올 수 있다
유저 시퀀스의
스택 메모리에 할당됨
버퍼에서 데이터 Pop 하여
받으려는 변수로 바로 가져옴
Network - OnRecv()에서 실행
User – Update()에서 실행
Thread가 달라도 문제 없음
74. 메시지ID + 데이터 타입
메시지에서 사용할 데이터 형식 메시지 타입
선언한 순서로
메시지ID 할당
버퍼에 데이터 넣기
버퍼에서 데이터 꺼내기
76. 유저시퀀스의 로직은 모두 User 객체의 Update에서 실행되는 것을 보장한다
시퀀스 생성 메시지 도착
Resume
코루틴 생성 후 Wait() 만나면
Resume 데이터 Pop Resume
Yield Yield
Yield
코 루틴
User - Update User - Update
메인 루틴
: Network Thread
: Main Thread
80. 게임 오브젝트 중심 개발
Server
NPC1 Player1 NPC2
Server Server
Server
Object Object
Object
Client Client Client Client Client Client
Object Object Object Object Object Object
NPC1 Player1 NPC2 NPC1 Player1 NPC2
Client Client