Unity3D網絡游戲實戰(第2版)
1 網絡游戲的開端:Echo
1.1 藏在幕后的服務端
1.2 網絡連接的端點:Socket
1.2.1 Socket
1.2.2 IP地址
1.2.3 端口
1.2.4 Socket通信的流程
1.2.5 TCP和UDP協議
1.3 開始網絡編程:Echo
1.3.1 什么是Echo程序
1.3.2 編寫客戶端程序
1.3.3 客戶端代碼知識點
1.3.4 完成客戶端
1.3.5 創建服務端程序
1.3.6 編寫服務端程序
1.3.7 服務端知識點
1.3.8 測試Echo程序
1.4 更多API
1.5 公網和局域網
2 分身有術:異步和多路復用
2.1 什么樣的代碼是異步代碼
2.2 異步客戶端
2.2.1 異步Connect
2.2.2 Show Me The Code
2.2.3 異步Receive
2.2.4 異步Send
2.3 異步服務端
2.3.1 管理客戶端
2.3.2 異步Accept
2.3.3 程序結構
2.3.4 代碼展示
2.4 實踐:做個聊天室
2.4.1 服務端
2.4.2 客戶端
2.4.3 測試
2.5 狀態檢測Poll
2.5.1 什么是Poll
2.5.2 Poll客戶端
2.5.3 Poll服務端
2.6 多路復用Select
2.6.1 什么是多路復用
2.6.2 Select服務端
2.6.3 Select客戶端
3 實踐出真知:大亂斗游戲
3.1 什么是大亂斗游戲
3.2 搭建場景
3.3 角色類Human
3.3.1 類結構設計
3.3.2 BaseHuman
3.3.3 角色預設
3.3.4 CtrlHuman
3.3.5 SyncHuman
3.4 如何使用網絡模塊
3.4.1 委托
3.4.2 通信協議
3.4.3 消息隊列
3.4.4 NetManager類
3.4.5 測試網絡模塊
3.5 進入游戲:Enter協議
3.5.1 創建角色
3.5.2 接收Enter協議
3.5.3 測試Enter協議
3.6 服務端如何處理消息
3.6.1 反射機制
3.6.2 消息處理函數
3.6.3 事件處理
3.6.4 玩家數據
3.6.5 處理Enter協議
3.7 玩家列表:List協議
3.7.1 客戶端處理
3.7.2 服務端處理
3.7.3 測試
3.8 移動同步:Move協議
3.8.1 客戶端處理
3.8.2 服務端處理
3.8.3 測試
3.9 玩家離開:Leave協議
3.9.1 客戶端處理
3.9.2 服務端處理
3.9.3 測試
3.10 攻擊動作:Attack協議
3.10.1 播放攻擊動作
3.10.2 客戶端處理
3.10.3 服務端處理
3.10.4 測試
3.11 攻擊傷害:Hit協議
3.11.1 客戶端處理
3.11.2 服務端處理
3.12 角色死亡:Die協議
3.12.1 客戶端處理
3.12.2 測試
4 正確收發數據流
4.1 TCP數據流
4.1.1 系統緩沖區
4.1.2 粘包半包現象
4.1.3 人工重現粘包現象
4.2 解決粘包問題的方法
4.2.1 長度信息法
4.2.2 固定長度法
4.2.3 結束符號法
4.3 解決粘包的代碼實現
4.3.1 發送數據
4.3.2 接收數據
4.3.3 處理數據
4.3.4 完整的示例
4.3.5 測試程序
4.4 大端小端問題
4.4.1 為什么會有大端小端之分
4.4.2 使用Reverse()兼容大小端編碼
4.4.3 手動還原數值
4.5 完整發送數據
4.5.1 不完整發送示例
4.5.2 如何解決發送不完整問題
4.5.3 ByteArray和Queue
4.5.4 解決線程沖突
4.5.5 為什么要使用隊列
4.6 高效的接收數據
4.6.1 不足之處
4.6.2 完整的ByteArray
4.6.3 將ByteArray應用到異步程序
5 深入了解TCP,解決暗藏問題
5.1 從TCP到銅線
5.1.1 應用層
5.1.2 傳輸層
5.1.3 網絡層
5.1.4 網絡接口
5.2 數據傳輸流程
5.2.1 TCP連接的建立
5.2.2 TCP的數據傳輸
5.2.3 TCP連接的終止
5.3 常用TCP參數
5.3.1 ReceiveBufferSize
5.3.2 SendBufferSize
5.3.3 NoDelay
5.3.4 TTL
5.3.5 ReuseAddress
5.3.6 LingerState
5.4 Close的恰當時機
5.5 異常處理
5.6 心跳機制
6 通用客戶端網絡模塊
6.1 網絡模塊設計
6.1.1 對外接口
6.1.2 內部設計
6.2 網絡事件
6.2.1 事件類型
6.2.2 監聽列表
6.2.3 分發事件
6.3 連接服務端
6.3.1 Connect
6.3.2 ConnectCallback
6.3.3 測試程序
6.4 關閉連接
6.4.1 isClosing
6.4.2 Close
6.4.3 測試
6.5 Json協議
6.5.1 為什么會有協議類
6.5.2 使用JsonUtility
6.5.3 協議格式
6.5.4 協議文件
6.5.5 協議體的編碼解碼
6.5.6 協議名的編碼解碼
6.6 發送數據
6.6.1 Send
6.6.2 SendCallback
6.6.3 測試
6.7 消息事件
6.8 接收數據
6.8.1 新的成員
6.8.2 ConnectCallback
6.8.3 ReceiveCallback
6.8.4 OnReceiveData
6.8.5 Update
6.8.6 測試
6.9 心跳機制
6.9.1 PING和PONG協議
6.9.2 成員變量
6.9.3 發送PING協議
6.9.4 監聽PONG協議
6.9.5 測試
6.10 Protobuf協議
6.10.1 什么是Protobuf
6.10.2 編寫proto文件
6.10.3 生成協議類
6.10.4 導入protobuf-net.dll
6.10.5 編碼解碼
7 通用服務端框架
7.1 服務端架構
7.1.1 總體架構
7.1.2 模塊划分
7.1.3 游戲流程
7.2 Json編碼解碼
7.2.1 添加協議文件
7.2.2 引用System.web.Extensions
7.2.3 修改MsgBase類
7.2.4 測試
7.3 網絡模塊
7.3.1 整體結構
7.3.2 ClientState
7.3.3 開啟監聽和多路復用
7.3.4 處理監聽消息
7.3.5 處理客戶端消息
7.3.6 關閉連接
7.3.7 處理協議
7.3.8 Timer
7.3.9 發送協議
7.3.10 測試
7.4 心跳機制
7.4.1 lastPingTime
7.4.2 時間戳
7.4.3 回應MsgPing協議
7.4.4 超時處理
7.4.5 測試程序
7.5 玩家的數據結構
7.5.1 完整的ClientState
7.5.2 PlayerData
7.5.3 Player
7.5.4 PlayerManager
7.6 配置MySQL數據庫
7.6.1 安裝並啟動MySQL數據庫
7.6.2 安裝Navicat for MySQL
7.6.3 配置數據表
7.6.4 安裝connector
7.6.5 MySQL基礎知識
7.7 數據庫模塊
7.7.1 連接數據庫
7.7.2 防止SQL注入
7.7.3 IsAccountExist
7.7.4 Register
7.7.5 CreatePlayer
7.7.6 CheckPassword
7.7.7 GetPlayerData
7.7.8 UpdatePlayerData
7.8 登錄注冊功能
7.8.1 注冊登錄協議
7.8.2 記事本協議
7.8.3 注冊功能
7.8.4 登錄功能
7.8.5 退出功能
7.8.6 獲取文本功能
7.8.7 保存文本功能
7.8.8 客戶端界面
7.8.9 客戶端監聽
7.8.10 客戶端注冊功能
7.8.11 客戶端登錄功能
7.8.12 客戶端記事本功能
7.8.13 測試
8 完整大項目《坦克大戰》
8.1 《坦克大戰》游戲功能
8.1.1 登錄注冊
8.1.2 房間系統
8.1.3 戰斗系統
8.2 坦克模型
8.2.1 導入模型
8.2.2 模型結構
8.3 資源管理器
8.3.1 設計構想
8.3.2 代碼實現
8.3.3 測試
8.4 坦克類
8.4.1 設計構想
8.4.2 代碼實現
8.4.3 測試
8.5 行走控制
8.5.1 速度參數
8.5.2 移動控制
8.5.3 測試
8.5.4 走在地形上
8.6 坦克爬坡
8.6.1 Unity的物理系統
8.6.2 添加物理組件
8.6.3 測試
8.7 相機跟隨
8.7.1 功能需求
8.7.2 數學原理
8.7.3 編寫代碼
8.7.4 測試
8.8 旋轉炮塔
8.8.1 炮塔元素
8.8.2 旋轉控制
8.8.3 測試
8.9 發射炮彈
8.9.1 制作炮彈預設
8.9.2 制作爆炸效果
8.9.3 炮彈組件
8.9.4 坦克開炮
8.9.5 測試
8.10 摧毀敵人
8.10.1 坦克的生命值
8.10.2 焚燒特效
8.10.3 坦克被擊中處理
8.10.4 炮彈的攻擊處理
8.10.5 測試
9 UI界面模塊
9.1 界面模塊的設計
9.1.1 簡單的界面調用
9.1.2 通用界面模塊
9.2 場景結構
9.3 面板基類BasePanel
9.3.1 設計要點
9.3.2 代碼實現
9.3.3 知識點
9.4 界面管理器PanelManager
9.4.1 層級管理
9.4.2 打開面板
9.4.3 關閉面板
9.5 登錄面板LoginPanel
9.5.1 導入資源
9.5.2 UI組件
9.5.3 制作面板預設
9.5.4 登錄面板類
9.5.5 打開面板
9.5.6 引用UI組件
9.5.7 網絡監聽
9.5.8 登錄和注冊按鈕
9.5.9 收到登錄協議
9.6 注冊面板RegisterPanel
9.6.1 制作面板預設
9.6.2 注冊面板類
9.6.3 按鈕事件
9.6.4 收到注冊協議
9.7 提示面板TipPanel
9.7.1 制作面板預設
9.7.2 提示面板類
9.7.3 測試面板
9.8 游戲入口GameMain
9.8.1 設計要點
9.8.2 代碼實現
9.8.3 緩存用戶名
9.9 功能測試
9.9.1 登錄
9.9.2 注冊
9.9.3 下線
10 游戲大廳和房間
10.1 列表面板預設
10.1.1 整體結構
10.1.2 個人信息欄
10.1.3 操作欄
10.1.4 房間列表欄
10.1.5 Scroll View
10.1.6 列表項Room
10.2 房間面板預設
10.2.1 整體結構
10.2.2 列表欄
10.2.3 列表項Player
10.2.4 控制欄
10.3 協議設計
10.3.1 查詢戰績MsgGetAchieve協議
10.3.2 查詢房間列表MsgGetRoomList協議
10.3.3 創建房間MsgCreateRoom協議
10.3.4 進入房間MsgEnterRoom協議
10.3.5 查詢房間信息MsgGetRoomInfo協議
10.3.6 退出房間MsgLeaveRoom協議
10.3.7 開始戰斗MsgStartBattle協議
10.4 列表面板邏輯
10.4.1 面板類
10.4.2 獲取部件
10.4.3 網絡監聽
10.4.4 刷新戰績
10.4.5 刷新房間列表
10.4.6 加入房間
10.4.7 創建房間
10.4.8 刷新按鈕
10.5 房間面板邏輯
10.5.1 面板類
10.5.2 獲取部件
10.5.3 網絡監聽
10.5.4 刷新玩家列表
10.5.5 退出房間
10.5.6 開始戰斗
10.6 打開列表面板
10.7 服務端玩家數據
10.7.1 存儲數據
10.7.2 臨時數據
10.8 服務端房間類
10.8.1 管理器和房間類的關系
10.8.2 房間類的設計要點
10.8.3 添加玩家
10.8.4 選擇陣營
10.8.5 刪除玩家
10.8.6 選擇新房主
10.8.7 廣播消息
10.8.8 生成房間信息
10.9 服務端房間管理器
10.9.1 數據結構
10.9.2 獲取房間
10.9.3 添加房間
10.9.4 刪除房間
10.9.5 生成列表信息
10.10 服務端消息處理
10.10.1 查詢戰績MsgGetAchieve
10.10.2 查詢房間列表MsgGetRoomList
10.10.3 創建房間MsgCreateRoom
10.10.4 進入房間MsgEnterRoom
10.10.5 查詢房間信息MsgGetRoomInfo
10.10.6 離開房間MsgLeaveRoom
10.11 玩家事件處理
10.12 測試
11 戰斗和勝負判定
11.1 協議設計
11.1.1 進入戰斗MsgEnterBattle
11.1.2 戰斗結果MsgBattleResult
11.1.3 退出戰斗MsgLeaveBattle
11.2 坦克
11.2.1 不同陣營的坦克預設
11.2.2 戰斗模塊
11.2.3 同步坦克SyncTank
11.2.4 坦克的屬性
11.3 戰斗管理器
11.3.1 設計要點
11.3.2 管理器類
11.3.3 坦克管理
11.3.4 重置戰場
11.3.5 開始戰斗
11.3.6 產生坦克
11.3.7 戰斗結束
11.3.8 玩家離開
11.4 戰斗結果面板
11.4.1 面板預設
11.4.2 面板邏輯
11.5 服務端開啟戰斗
11.5.1 能否開始戰斗
11.5.2 定義出生點
11.5.3 坦克信息
11.5.4 開啟戰斗
11.5.5 消息處理
11.6 服務端勝負判斷
11.6.1 是否死亡
11.6.2 勝負決斷函數
11.6.3 定時器
11.6.4 Room::Update
11.7 服務端斷線處理
11.8 測試
11.8.1 進入戰場
11.8.2 離開戰場
12 同步戰斗信息
12.1 同步理論
12.1.1 同步的過程
12.1.2 同步的難題
12.2 狀態同步
12.2.1 直接狀態同步
12.2.2 跟隨算法
12.2.3 預測算法
12.3 幀同步
12.3.1 指令同步
12.3.2 從Update說起
12.3.3 什么是同步幀
12.3.4 指令
12.3.5 指令的執行
12.4 協議設計
12.4.1 位置同步MsgSyncTank
12.4.2 開火MsgFire
12.4.3 擊中MsgHit
12.5 發送同步信息
12.5.1 發送位置信息
12.5.2 發送開火信息
12.5.3 發送擊中信息
12.6 處理同步信息
12.6.1 協議監聽
12.6.2 OnMsgSyncTank
12.6.3 OnMsgFire
12.6.4 OnMsgHit
12.7 同步坦克SyncTank
12.7.1 預測算法的成員變量
12.7.2 移動到預測位置
12.7.3 初始化
12.7.4 更新預測位置
12.7.5 炮彈同步
12.8 服務端消息處理
12.8.1 位置同步MsgSyncTank
12.8.2 開火MsgFire
12.8.3 擊中MsgHit
12.8.4 調試
12.9 完善細節
12.9.1 滾動的輪子和履帶
12.9.2 靈活操作
12.9.3 准心
12.9.4 自動瞄准
12.9.5 界面和場景優化
12.9.6 戰斗面板
12.9.7 擊殺提示
12.10 結語
思維導圖

防止博客圖床圖片失效,防止圖片源站外鏈:
http://www.processon.com/chart_image/5e5b2a8ae4b0d4dc8776c069.png)
思維導圖在線編輯鏈接:
