-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchapter1.txt
More file actions
106 lines (86 loc) · 7.54 KB
/
chapter1.txt
File metadata and controls
106 lines (86 loc) · 7.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
1장 : 온라인 게임을 만들자
1.1 온라인 게임 제작의 실체
[온라인 게임은 쉽게 만들 수 있다]
온라인 게임의 기본 처리는 < 정보를 보내고, 받고, 반영 > 하는 것 뿐이다.
- 어떤 정보를 보내면 되는가
- 언제 어느 정도의 빈도로 보내야 하는가
위와 같은 명확하지 않은 세부사항 들이 어려운 부분으로 작용된다.
통신 프로그래밍 방법을 알아도 온라인 게임의 통신이 어려운 이유는 통신을 하는 방법을 알려줄 뿐,
게임 상에서 적용 시키는 법은 알려주지 않기 때문이다.
즉, 기초 통신 기술들과 온라인 게임에 필요한 기술들은 차이가 있다. 이부분은 < 노하우와 테크닉 > 으로 메워야 한다.
[비극은 현장에서 일어난다]
통신은 범용적인 시스템을 구축하고 돌려쓸 수 있는 것이 아니다.
즉, "오프라인 게임 + 온라인 처리" 으로 게임을 설계하는 것은 거의 불가능한 일이다.
[오프라인 모드와 온라인 모드는 다르다]
예시를 들어보자.
'키 입력 동기' 구조는 서로의 키 입력 정보를 주고받는 구조이다.
적은 인원 사이에 통신에 있어서 적합하다.
이 구조를 MMORPG게임에 적용 시키면 어떻게 될까?
다른 사람의 입력이 모두 동기화 될 때까지 나는 입력을 할 수 없어진다.
모든 단말이 같은 프레임을 처리하지 않을 뿐더러 어느 한 부분에서 처리가 지연되면 모두가 지연된다.
즉, '키 입력 동기' 구조는 MMORPG에서 부적합한 구조라고 할 수 있다.
이와 같이 같은 게임이라도 오프라인과 온라인은 별개의 게임이 된다. 디자인 자체가 다르기 때문이다.
[데이터는 곧바로 전달되지 않는다.]
'데이터를 전송해서 상대에게 전달되기까지 걸리는 시간' 즉, 통신 지연이 발생한다.
이는 온라인 게임에 큰 영향을 미친다.
60FPS으로 동작하는 게임에서, 1프레임 당 처리 시간은 100(ms) / 60(frame) = 16.6666(ms/frame)이다.
여기서, 지연 시간이 100ms일 때, 100(ms)/16.6666(ms/frame) = 6.000024(frame) 즉, 6프레임 정도 지연이 생긴다.
짧은 0.1초의 시간이지만 게임에서는 엄청난 영향을 가진다.
지연 시간이 프레임 처리 시간보다 짧다 해도 영향을 끼칠 수 있다.
통신 데이터를 송수신 하는 환경에서는 통신 처리와 게임의 프레임 처리를 동기화하지 않는다.
(프레임 업데이트)
| | |
데이터 전달 데이터 반영
위와 같이 프레임 업데이트 사이에 데이터가 전달 될 경우 프레임 업데이트 주기보다 지연이 빨라도 같은 프레임에 적용이 안된다.
즉, < 정보를 송신한 쪽과 수신한 쪽의 같은 프레임에서 처리되지 않는다 > 는 사실을 전제로 각 단말에서 처리가 이루어져야 한다.
[오프라인 게임과 온라인 게임의 게임 디자인 차이]
철권에서, 키 입력 동기화 방식으로 통신을 처리한다고 할 때,
양쪽 데이터가 모두 갖춰지지 않으면 처리가 불가능 하다.
이런 상황을 피하기 위하여 입력을 지연/데이터가 갖추어지면 반영한다면 인풋 렉이 발생하게 된다.
오프라인에서 프레임 단위로 즐기던 게임이 아에 달라지게 되는 것이다.
이렇듯 < 오프라인과 온라인 게임은 별개의 게임으로 구조도 방법도 완전히 달라진다.>
[비극에서 벗어나려면]
온라인 게임에서는 '통신 지연'과 같은 S/W 기술만으로 해결할 수 없는 문제가 존재함을 고려하고 디자인 해야한다.
온/오프라인 두 버전을 지원하는 게임의 경우 이를 고려하지 않고 제작을 하게 된다면,
결국 온라인 모드/ 오프라인 모드 두개의 게임을 개발하는 것과 같은 참사가 일어나게 된다.
1.2온라인 게임 제작의 기초
[온라인 게임의 통신 방식]
게임에는 FPS, MMORPG, RTS 등 다양한 장르가 존재한다.
각 게임에 맞는 통신 방식이 필요하다.
- 동기 방식 : 통신하는 단말 사이에 데이터를 주고받아 각 단말의 처리 결과가 완전히 일치하는 방식이다.
각 단말의 상태는 동일하게 된다.
1) 턴 동기 : 턴 플레이어의 행동을 상대편에게 보내어 동기화 한다. 턴 마다 상태가 일치하게 된다.
2) 키 입력 동기 : 컨트롤러의 입력 정보를 서로 전송하여 같은 프레임의 데이터를 처리, 단말을 같은 상태로 동작시킨다.
- 비동기 방식 : 꼭 필요한 최소한의 정보로 각 단말의 상태를 일치시키는 방식이다.
상대방의 입력이 모두 끝날 때 까지 기다리지 않아도 된다는 장점이 있지만,
자신의 단말과 상대방의 단말 간 일관성을 잃어버리기 때문에 일관성을 유지할 방법을 마련해야 한다.
[온라인 게임의 게임 디자인]
온라인 게임에서 고려해야 할 통신의 제약들은 다음과 같다
- 통신 지연
: 데이터가 전달되기 까지 각각의 단말에서 어떻게 게임을 진행할지 고려해야 한다.
- 데이터 소실
: 데이터가 소실되었을 때 어떻게 재송신 할지, 재송신 될때까지 게임은 어떻게 처리할 지 등을 고려
- 회선 끊김
: 플레이어가 통신이 끊긴다면 남은 플레이어끼리 진행할 지, 혹은 게임의 결과를 어떻게 처리할 지
[데이터의 흐름을 경과 시간으로 생각하자]
데이터의 흐름을 생각할 때는 항상 시간을 고려해야 한다.
(TimeAxis.png 참고)
먼저 턴 방식에서는 A 단말이 입력한 데이터를 B단말로 전송,
통신 지연이 있어 대각선으로 이동하는 듯한 모양새를 취함(수신받는데 시간이 걸린다)
가로 방향으로 시간 축을 그릴 수 있음.
이러한 방식으로 그림으로 표현하면 통신의 구조를 검토하는데 도움이 된다.
[일대일 대전은 네명이 싸운다?]
다음과 같은 상황을 생각해보자.
'캐릭터 A가 공격하고 캐릭터 B는 캐릭터 A의 기술을 방어한다'
(A&B Fight Example.png 참고)
게임 전체적으로 보면 단말 A,B에 각각 캐릭터 2명씩 총 4명의 캐릭터가 필요하게 된다.
무언가를 처리할 때 두 단말이 완벽하게 같은 시기에 처리가 될 수는 없지만, 위화감이 없도록 디자인 해야 한다.
n대의 단말에서 m개의 플레이어가 존재한다면 등장인물은 총 m*n명이 된다.
[오류도 사양의 하나]
오류 발생은 당연한 사항이 되어야 하며 오류가 발생되어도 때로는 정삭적인 게임을 계속 진행할 수 있어야 한다.
1대1 대전 게임이라면 통신 오류로 인해서 연결이 끊기면 게임이 정지되는 방식,
액션 MO(Multi-Online)게임에서는 한 사람의 접속이 끊겨도 다른 플레이어는 계속할 수 있어야 하는 방식으로 진행되어야함.
오류를 처리하는 사양의 예시는 다음과 같다.
- 데이터가 전달되지 않은 캐릭터는 필드에서 마지막으로 수신한 데이터의 위치에 정지한다.
- 플레이어의 접속이 끊긴 경우 그 플레이어는 팀에서 빠지고 남은 멤버로 게임을 계속할 수 있어야 한다.
위와같은 대응책을 세웠다면 다른 부분에서 모순이 발생하지 않는지, 게임 진행에 영향을 주는지 등 감토해야함.