前言
第1章 網絡遊戲的開端:Echo 1
1.1 藏在幕後的服務端 1
1.2 網絡連接的端點:Socket 3
1.2.1 Socket 3
1.2.2 IP地址 3
1.2.3 端口 4
1.2.4 Socket通信的流程 6
1.2.5 TCP和UDP協議 7
1.3 開始網絡編程:Echo 8
1.3.1 什麼是Echo程序 8
1.3.2 編寫客戶端程序 8
1.3.3 客戶端代碼知識點 10
1.3.4 完成客戶端 11
1.3.5 創建服務端程序 12
1.3.6 編寫服務端程序 14
1.3.7 服務端知識點 15
1.3.8 測試Echo程序 15
1.4 更多API 16
1.5 公網和局域網 17
第2章 分身有術:異步和多路復用 19
2.1 什麼樣的代碼是異步代碼 19
2.2 異步客戶端 20
2.2.1 異步Connect 21
2.2.2 Show Me The Code 22
2.2.3 異步Receive 23
2.2.4 異步Send 26
2.3 異步服務端 29
2.3.1 管理客戶端 29
2.3.2 異步Accept 30
2.3.3 程序結構 31
2.3.4 代碼展示 31
2.4 實踐:做個聊天室 35
2.4.1 服務端 35
2.4.2 客戶端 35
2.4.3 測試 36
2.5 狀態檢測Poll 36
2.5.1 什麼是Poll 36
2.5.2 Poll客戶端 37
2.5.3 Poll服務端 38
2.6 多路復用Select 41
2.6.1 什麼是多路復用 41
2.6.2 Select服務端 42
2.6.3 Select客戶端 44
第3章 實踐齣真知:大亂鬥遊戲 45
3.1 什麼是大亂鬥遊戲 45
3.2 搭建場景 46
3.3 角色類Human 49
3.3.1 類結構設計 49
3.3.2 BaseHuman 49
3.3.3 角色預設 51
3.3.4 CtrlHuman 54
3.3.5 SyncHuman 57
3.4 如何使用網絡模塊 57
3.4.1 委托 57
3.4.2 通信協議 59
3.4.3 消息隊列 60
3.4.4 NetManager類 60
3.4.5 測試網絡模塊 64
3.5 進入遊戲:Enter協議 66
3.5.1 創建角色 67
3.5.2 接收Enter協議 70
3.5.3 測試Enter協議 70
3.6 服務端如何處理消息 72
3.6.1 反射機製 72
3.6.2 消息處理函數 73
3.6.3 事件處理 74
3.6.4 玩傢數據 76
3.6.5 處理Enter協議 77
3.7 玩傢列錶:List協議 77
3.7.1 客戶端處理 78
3.7.2 服務端處理 79
3.7.3 測試 79
3.8 移動同步:Move協議 80
3.8.1 客戶端處理 80
3.8.2 服務端處理 81
3.8.3 測試 81
3.9 玩傢離開:Leave協議 82
3.9.1 客戶端處理 82
3.9.2 服務端處理 82
3.9.3 測試 82
3.10 攻擊動作:Attack協議 83
3.10.1 播放攻擊動作 83
3.10.2 客戶端處理 87
3.10.3 服務端處理 88
3.10.4 測試 88
3.11 攻擊傷害:Hit協議 89
3.11.1 客戶端處理 89
3.11.2 服務端處理 91
3.12 角色死亡:Die協議 91
3.12.1 客戶端處理 91
3.12.2 測試 92
第4章 正確收發數據流 94
4.1 TCP數據流 94
4.1.1 係統緩衝區 94
4.1.2 粘包半包現象 96
4.1.3 人工重現粘包現象 97
4.2 解決粘包問題的方法 97
4.2.1 長度信息法 97
4.2.2 固定長度法 98
4.2.3 結束符號法 98
4.3 解決粘包的代碼實現 99
4.3.1 發送數據 99
4.3.2 接收數據 99
4.3.3 處理數據 101
4.3.4 完整的示例 104
4.3.5 測試程序 106
4.4 大端小端問題 109
4.4.1 為什麼會有大端小端之分 110
4.4.2 使用Reverse()兼容大小端編碼 111
4.4.3 手動還原數值 111
4.5 完整發送數據 112
4.5.1 不完整發送示例 113
4.5.2 如何解決發送不完整問題 113
4.5.3 ByteArray和Queue 117
4.5.4 解決綫程衝突 120
4.5.5 為什麼要使用隊列 121
4.6 高效的接收數據 122
4.6.1 不足之處 122
4.6.2 完整的ByteArray 123
4.6.3 將ByteArray應用到異步程序 129
第5章 深入瞭解TCP,解決暗藏問題 133
5.1 從TCP到銅綫 133
5.1.1 應用層 133
5.1.2 傳輸層 134
5.1.3 網絡層 135
5.1.4 網絡接口 135
5.2 數據傳輸流程 136
5.2.1 TCP連接的建立 136
5.2.2 TCP的數據傳輸 137
5.2.3 TCP連接的終止 138
5.3 常用TCP參數 138
5.3.1 ReceiveBufferSize 138
5.3.2 SendBufferSize 139
5.3.3 NoDelay 139
5.3.4 TTL 140
5.3.5 ReuseAddress 141
5.3.6 LingerState 142
5.4 Close的恰當時機 144
5.5 異常處理 146
5.6 心跳機製 147
第6章 通用客戶端網絡模塊 148
6.1 網絡模塊設計 148
6.1.1 對外接口 148
6.1.2 內部設計 149
6.2 網絡事件 150
6.2.1 事件類型 151
6.2.2 監聽列錶 151
6.2.3 分發事件 152
6.3 連接服務端 152
6.3.1 Connect 152
6.3.2 ConnectCallback 154
6.3.3 測試程序 155
6.4 關閉連接 156
6.4.1 isClosing? 157
6.4.2 Close 157
6.4.3 測試 158
6.5 Json協議 158
6.5.1 為什麼會有協議類 158
6.5.2 使用JsonUtility 159
6.5.3 協議格式 160
6.5.4 協議文件 161
6.5.5 協議體的編碼解碼 162
6.5.6 協議名的編碼解碼 163
6.6 發送數據 165
6.6.1 Send 165
6.6.2 SendCallback 166
6.6.3 測試 167
6.7 消息事件 168
6.8 接收數據 170
6.8.1 新的成員 171
6.8.2 ConnectCallback 171
6.8.3 ReceiveCallback 172
6.8.4 OnReceiveData 172
6.8.5 Update 174
6.8.6 測試 175
6.9 心跳機製 176
6.9.1 PING和PONG協議 176
6.9.2 成員變量 177
6.9.3 發送PING協議 178
6.9.4 監聽PONG協議 178
6.9.5 測試 179
6.10 Protobuf協議 179
6.10.1 什麼是Protobuf 179
6.10.2 編寫proto文件 180
6.10.3 生成協議類 181
6.10.4 導入protobuf-net.dll 183
6.10.5 編碼解碼 183
第7章 通用服務端框架 186
7.1 服務端架構 187
7.1.1 總體架構 187
7.1.2 模塊劃分 187
7.1.3 遊戲流程 188
7.2 Json編碼解碼 189
7.2.1 添加協議文件 189
7.2.2 引用System.web.Extensions 190
7.2.3 修改MsgBase類 191
7.2.4 測試 192
7.3 網絡模塊 193
7.3.1 整體結構 193
7.3.2 ClientState 194
7.3.3 開啓監聽和多路復用 194
7.3.4 處理監聽消息 196
7.3.5 處理客戶端消息 197
7.3.6 關閉連接 198
7.3.7 處理協議 199
7.3.8 Timer 200
7.3.9 發送協議 201
7.3.10 測試 202
7.4 心跳機製 204
7.4.1 lastPingTime? 204
7.4.2 時間戳 204
7.4.3 迴應MsgPing協議 205
7.4.4 超時處理 205
7.4.5 測試程序 206
7.5 玩傢的數據結構 206
7.5.1 完整的ClientState 206
7.5.2 PlayerData 208
7.5.3 Player 208
7.5.4 PlayerManager 209
7.6 配置MySQL數據庫 211
7.6.1 安裝並啓動MySQL數據庫 211
7.6.2 安裝Navicat for MySQL 213
7.6.3 配置數據錶 214
7.6.4 安裝connector 215
7.6.5 MySQL基礎知識 216
7.7 數據庫模塊 217
7.7.1 連接數據庫 218
7.7.2 防止SQL注入 220
7.7.3 IsAccountExist 220
7.7.4 Register 221
7.7.5 CreatePlayer 223
7.7.6 CheckPassword 224
7.7.7 GetPlayerData 225
7.7.8 UpdatePlayerData 226
7.8 登錄注冊功能 226
7.8.1 注冊登錄協議 227
7.8.2 記事本協議 228
7.8.3 注冊功能 229
7.8.4 登錄功能 229
7.8.5 退齣功能 231
7.8.6 獲取文本功能 231
7.8.7 保存文本功能 231
7.8.8 客戶端界麵 232
7.8.9 客戶端監聽 233
7.8.10 客戶端注冊功能 235
7.8.11 客戶端登錄功能 235
7.8.12 客戶端記事本功能 236
7.8.13 測試 236
第8章 完整大項目《坦剋大戰》 239
8.1 《坦剋大戰》遊戲功能 239
8.1.1 登錄注冊 239
8.1.2 房間係統 240
8.1.3 戰鬥係統 241
8.2 坦剋模型 242
8.2.1 導入模型 242
8.2.2 模型結構 243
8.3 資源管理器 245
8.3.1 設計構想 245
8.3.2 代碼實現 245
8.3.3 測試 246
8.4 坦剋類 246
8.4.1 設計構想 246
8.4.2 代碼實現 246
8.4.3 測試 247
8.5 行走控製 248
8.5.1 速度參數 249
8.5.2 移動控製 249
8.5.3 測試 250
8.5.4 走在地形上 251
8.6 坦剋爬坡 253
8.6.1 Unity的物理係統 253
8.6.2 添加物理組件 253
8.6.3 測試 254
8.7 相機跟隨 255
8.7.1 功能需求 255
8.7.2 數學原理 255
8.7.3 編寫代碼 257
8.7.4 測試 258
8.8 鏇轉炮塔 260
8.8.1 炮塔元素 260
8.8.2 鏇轉控製 261
8.8.3 測試 262
8.9 發射炮彈 262
8.9.1 製作炮彈預設 262
8.9.2 製作爆炸效果 263
8.9.3 炮彈組件 264
8.9.4 坦剋開炮 266
8.9.5 測試 268
8.10 摧毀敵人 269
8.10.1 坦剋的生命值 269
8.10.2 焚燒特效 270
8.10.3 坦剋被擊中處理 271
8.10.4 炮彈的攻擊處理 272
8.10.5 測試 272
第9章 UI界麵模塊 274
9.1 界麵模塊的設計 274
9.1.1 簡單的界麵調用 274
9.1.2 通用界麵模塊 275
9.2 場景結構 277
9.3 麵闆基類BasePanel 278
9.3.1 設計要點 278
9.3.2 代碼實現 278
9.3.3 知識點 279
9.4 界麵管理器PanelManager 281
9.4.1 層級管理 281
9.4.2 打開麵闆 282
9.4.3 關閉麵闆 284
9.5 登錄麵闆LoginPanel 284
9.5.1 導入資源 284
9.5.2 UI組件 286
9.5.3 製作麵闆預設 286
9.5.4 登錄麵闆類 289
9.5.5 打開麵闆 289
9.5.6 引用UI組件 290
9.5.7 網絡監聽 291
9.5.8 登錄和注冊按鈕 293
9.5.9 收到登錄協議 293
9.6 注冊麵闆RegisterPanel 294
9.6.1 製作麵闆預設 294
9.6.2 注冊麵闆類 296
9.6.3 按鈕事件 298
9.6.4 收到注冊協議 299
9.7 提示麵闆TipPanel 300
9.7.1 製作麵闆預設 300
9.7.2 提示麵闆類 301
9.7.3 測試麵闆 302
9.8 遊戲入口GameMain 303
9.8.1 設計要點 303
9.8.2 代碼實現 304
9.8.3 緩存用戶名 305
9.9 功能測試 306
9.9.1 登錄 306
9.9.2 注冊 307
9.9.3 下綫 309
第10章 遊戲大廳和房間 310
10.1 列錶麵闆預設 311
10.1.1 整體結構 311
10.1.2 個人信息欄 312
10.1.3 操作欄 312
10.1.4 房間列錶欄 313
10.1.5 Scroll View 315
10.1.6 列錶項Room 316
10.2 房間麵闆預設 318
10.2.1 整體結構 318
10.2.2 列錶欄 319
10.2.3 列錶項Player 320
10.2.4 控製欄 322
10.3 協議設計 322
10.3.1 查詢戰績MsgGetAchieve協議 323
10.3.2 查詢房間列錶MsgGetRoom--List協議 323
10.3.3 創建房間MsgCreateRoom協議 324
10.3.4 進入房間MsgEnterRoom協議 324
10.3.5 查詢房間信息MsgGetRoom-Info協議 324
10.3.6 退齣房間MsgLeaveRoom協議 325
10.3.7 開始戰鬥MsgStartBattle協議 325
10.4 列錶麵闆邏輯 326
10.4.1 麵闆類 326
10.4.2 獲取部件 326
10.4.3 網絡監聽 328
10.4.4 刷新戰績 329
10.4.5 刷新房間列錶 329
10.4.6 加入房間 330
10.4.7 創建房間 331
10.4.8 刷新按鈕 332
10.5 房間麵闆邏輯 332
10.5.1 麵闆類 332
10.5.2 獲取部件 333
10.5.3 網絡監聽 334
10.5.4 刷新玩傢列錶 334
10.5.5 退齣房間 336
10.5.6 開始戰鬥 336
10.6 打開列錶麵闆 337
10.7 服務端玩傢數據 337
10.7.1 存儲數據 338
10.7.2 臨時數據 338
10.8 服務端房間類 339
10.8.1 管理器和房間類的關係 339
10.8.2 房間類的設計要點 340
10.8.3 添加玩傢 341
10.8.4 選擇陣營 343
10.8.5 刪除玩傢 343
10.8.6 選擇新房主 345
10.8.7 廣播消息 345
10.8.8 生成房間信息 345
10.9 服務端房間管理器 347
10.9.1 數據結構 347
10.9.2 獲取房間 347
10.9.3 添加房間 348
10.9.4 刪除房間 348
10.9.5 生成列錶信息 348
10.10 服務端消息處理 349
10.10.1 查詢戰績MsgGet-Achieve 350
10.10.2 查詢房間列錶MsgGetRoom-List 350
10.10.3 創建房間MsgCreate-Room 351
10.10.4 進入房間MsgEnterRoom 351
10.10.5 查詢房間信息MsgGet-RoomInfo 352
10.10.6 離開房間MsgLeave-Room 352
10.11 玩傢事件處理 353
10.12 測試 354
第11章 戰鬥和勝負判定 358
11.1 協議設計 358
11.1.1 進入戰鬥MsgEnterBattle 359
11.1.2 戰鬥結果MsgBattleResult 359
11.1.3 退齣戰鬥MsgLeaveBattle 360
11.2 坦剋 360
11.2.1 不同陣營的坦剋預設 360
11.2.2 戰鬥模塊 361
11.2.3 同步坦剋SyncTank 362
11.2.4 坦剋的屬性 362
11.3 戰鬥管理器 363
11.3.1 設計要點 363
11.3.2 管理器類 363
11.3.3 坦剋管理 364
11.3.4 重置戰場 365
11.3.5 開始戰鬥 366
11.3.6 産生坦剋 367
11.3.7 戰鬥結束 369
11.3.8 玩傢離開 369
11.4 戰鬥結果麵闆 369
11.4.1 麵闆預設 369
11.4.2 麵闆邏輯 371
11.5 服務端開啓戰鬥 373
11.5.1 能否開始戰鬥 373
11.5.2 定義齣生點 373
11.5.3 坦剋信息 376
11.5.4 開啓戰鬥 377
11.5.5 消息處理 377
11.6 服務端勝負判斷 378
11.6.1 是否死亡 379
11.6.2 勝負決斷函數 379
11.6.3 定時器 380
11.6.4 Room::Update 380
11.7 服務端斷綫處理 381
11.8 測試 382
11.8.1 進入戰場 382
11.8.2 離開戰場 384
第12章 同步戰鬥信息 386
12.1 同步理論 387
12.1.1 同步的過程 387
12.1.2 同步的難題 387
12.2 狀態同步 389
12.2.1 直接狀態同步 389
12.2.2 跟隨算法 390
12.2.3 預測算法 390
12.3 幀同步 391
12.3.1 指令同步 391
12.3.2 從Update說起 392
12.3.3 什麼是同步幀 393
12.3.4 指令 394
12.3.5 指令的執行 394
12.4 協議設計 395
12.4.1 位置同步MsgSyncTank 396
12.4.2 開火MsgFire 396
12.4.3 擊中MsgHit 397
12.5 發送同步信息 397
12.5.1 發送位置信息 397
12.5.2 發送開火信息 398
12.5.3 發送擊中信息 399
12.6 處理同步信息 400
12.6.1 協議監聽 400
12.6.2 OnMsgSyncTank 401
12.6.3 OnMsgFire 401
12.6.4 OnMsgHit 402
12.7 同步坦剋SyncTank 402
12.7.1 預測算法的成員變量 402
12.7.2 移動到預測位置 403
12.7.3 初始化 404
12.7.4 更新預測位置 405
12.7.5 炮彈同步 406
12.8 服務端消息處理 406
12.8.1 位置同步MsgSyncTank 407
12.8.2 開火MsgFire 408
12.8.3 擊中MsgHit 409
12.8.4 調試 410
12.9 完善細節 412
12.9.1 滾動的輪子和履帶 412
12.9.2 靈活操作 413
12.9.3 準心 413
12.9.4 自動瞄準 414
12.9.5 界麵和場景優化 414
12.9.6 戰鬥麵闆 415
12.9.7 擊殺提示 416
12.10 結語 416
· · · · · · (
收起)