日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

C#游戲開發(fā):Facepunch.Steamworks集成指南與核心功能實(shí)戰(zhàn)

C#游戲開發(fā):Facepunch.Steamworks集成指南與核心功能實(shí)戰(zhàn) 1. 項(xiàng)目概述為什么選擇 Facepunch.Steamworks如果你是一名使用 Unity 或 .NET 進(jìn)行游戲開發(fā)的 C# 程序員并且你的游戲計(jì)劃上架 Steam 平臺(tái)那么集成 Steamworks API 幾乎是必經(jīng)之路。Valve 官方的 Steamworks SDK 功能強(qiáng)大但它是用 C 編寫的這意味著在 C# 項(xiàng)目中直接使用它你需要處理繁瑣的平臺(tái)調(diào)用P/Invoke、復(fù)雜的結(jié)構(gòu)體轉(zhuǎn)換和手動(dòng)內(nèi)存管理。幾年前我接手一個(gè) Unity 項(xiàng)目需要接入 Steam 成就和排行榜第一次嘗試使用原生 SDK 時(shí)光是讓一個(gè)簡單的“獲取好友列表”功能跑起來就花了大半天時(shí)間調(diào)試各種指針和內(nèi)存問題過程相當(dāng)痛苦。就在那時(shí)我發(fā)現(xiàn)了 Facepunch.Steamworks。簡單來說它是一個(gè)完全用 C# 編寫的 Steamworks API 封裝庫。它的核心價(jià)值在于將 Valve 那套面向 C 的、過程式的、略顯晦澀的 API徹底重構(gòu)成了符合 C# 開發(fā)者習(xí)慣的、面向?qū)ο蟮?、流暢的接口。它不是簡單的“包裝紙”而是一次徹底的“重新設(shè)計(jì)”。舉個(gè)例子在官方 SDK 或 Steamworks.NET另一個(gè)流行的封裝里獲取好友列表你需要先獲取數(shù)量再循環(huán)索引獲取每個(gè)好友的 ID最后再根據(jù) ID 獲取詳細(xì)信息代碼充滿了循環(huán)和臨時(shí)變量。而在 Facepunch.Steamworks 里你只需要一行foreach循環(huán)直接拿到一個(gè)包含所有信息的Friend對象集合代碼簡潔明了意圖清晰。這個(gè)開源項(xiàng)目由 Facepunch Studios《Rust》和《Garry‘s Mod》的開發(fā)商維護(hù)他們自己在商業(yè)項(xiàng)目中重度使用因此庫的穩(wěn)定性和實(shí)用性經(jīng)過了實(shí)戰(zhàn)檢驗(yàn)。對于獨(dú)立開發(fā)者和小型團(tuán)隊(duì)來說它極大地降低了接入 Steam 功能如成就、統(tǒng)計(jì)、云存檔、多人聯(lián)機(jī)、創(chuàng)意工坊的技術(shù)門檻和開發(fā)時(shí)間。本教程將基于我多次項(xiàng)目的實(shí)戰(zhàn)經(jīng)驗(yàn)帶你從零開始快速、免費(fèi)地將 Facepunch.Steamworks 集成到你的 Unity 或 .NET 項(xiàng)目中并深入講解幾個(gè)核心功能模塊的實(shí)現(xiàn)細(xì)節(jié)與避坑指南。2. 環(huán)境準(zhǔn)備與項(xiàng)目集成在開始敲代碼之前我們需要搭建好基礎(chǔ)環(huán)境。整個(gè)過程可以概括為“一拿、一放、一引、一配”四個(gè)步驟。雖然官方 Wiki 有說明但其中一些細(xì)節(jié)對于新手來說容易踩坑我會(huì)結(jié)合自己的經(jīng)驗(yàn)詳細(xì)拆解。2.1 獲取必要的文件包Facepunch.Steamworks 本身是一個(gè)純 C# 的托管庫但它底層仍然需要調(diào)用 Valve 官方的原生 Steamworks 二進(jìn)制文件。因此你需要準(zhǔn)備兩個(gè)東西Facepunch.Steamworks 托管庫從項(xiàng)目的 GitHub Release 頁面下載最新的穩(wěn)定版本。通常是一個(gè).zip文件解壓后里面包含針對不同 .NET 框架版本如 net46, netstandard2.0 等編譯的Facepunch.Steamworks.dll文件。對于 Unity 項(xiàng)目我們通常使用net46或netstandard2.0版本。Steamworks SDK Redistributables這是 Valve 官方的原生庫。你需要去 Steamworks 官網(wǎng)需開發(fā)者賬號登錄下載 SDK但 Facepunch.Steamworks 對其有版本依賴。關(guān)鍵點(diǎn)來了你必須下載與 Facepunch.Steamworks 版本兼容的 SDK 版本。例如當(dāng)前 Facepunch.Steamworks 穩(wěn)定版可能要求 SDK 版本 1.55。這個(gè)兼容版本號通常在 Facepunch.Steamworks 的 GitHub 倉庫首頁或 Release Notes 里明確寫明。下載后找到sdk/redistributable_bin文件夾這里面包含了steam_api.dll,steam_api64.dll,libsteam_api.so,libsteam_api.dylib等針對 Windows、Linux、macOS 不同平臺(tái)的原生庫文件。注意絕對不要混用不同版本的 SDK 和 Facepunch.Steamworks 庫否則會(huì)導(dǎo)致難以排查的運(yùn)行時(shí)崩潰或功能異常。每次更新 Facepunch.Steamworks 時(shí)務(wù)必檢查并更新對應(yīng)的 SDK 版本。2.2 在 Unity 項(xiàng)目中的集成步驟假設(shè)你有一個(gè) Unity 項(xiàng)目集成步驟如下放置原生庫在 Unity 項(xiàng)目的Assets文件夾下通常我習(xí)慣放在Assets/Plugins里創(chuàng)建適當(dāng)?shù)淖游募A結(jié)構(gòu)例如Assets/Plugins/Steamworks/Redistributables。將上一步redistributable_bin文件夾下的所有文件復(fù)制到這里。放置托管庫將下載的Facepunch.Steamworks.dll例如來自netstandard2.0文件夾也復(fù)制到 Unity 項(xiàng)目的Assets文件夾下比如Assets/Plugins/Steamworks/Managed。配置 Unity 平臺(tái)設(shè)置至關(guān)重要這是最容易出錯(cuò)的一步。在 Unity Editor 的 Project 窗口選中你導(dǎo)入的各個(gè) DLL 文件在 Inspector 面板中進(jìn)行如下設(shè)置Facepunch.Steamworks.Win32.dll和Facepunch.Steamworks.Win64.dll這兩個(gè)是 Windows 平臺(tái)特定的封裝庫。你需要根據(jù)你的目標(biāo)平臺(tái)進(jìn)行選擇。對于Win32.dll在 “Platforms” 設(shè)置中取消勾選 “Any Platform”然后只勾選 “Windows” 平臺(tái)并在其下方的 “CPU” 中選擇 “x86”。對于Win64.dll同樣取消 “Any Platform”只勾選 “Windows” “CPU” 選擇 “x86_64”。Facepunch.Steamworks.Posix.dll這是用于 macOS 和 Linux 的庫。設(shè)置時(shí)取消 “Any Platform”在 “Include Platforms” 中勾選 “Editor” 和 “Standalone”。然后在 “Platform Settings” 的 “OS” 下拉菜單中分別選擇 “OSX” 和 “Linux”并確保對應(yīng)的平臺(tái)被勾選。steam_api.dll等原生庫通常保持默認(rèn)設(shè)置即可Unity 能自動(dòng)識別。但為了保險(xiǎn)起見可以檢查一下它們是否在正確的平臺(tái)被啟用。實(shí)操心得我強(qiáng)烈建議為不同平臺(tái)的構(gòu)建單獨(dú)創(chuàng)建不同的構(gòu)建目標(biāo)文件夾并在構(gòu)建前仔細(xì)檢查 “Player Settings” - “Other Settings” - “Configuration” 中的 “Scripting Backend” 和 “Api Compatibility Level”。對于 Facepunch.Steamworks使用.NET Standard 2.0或.NET Framework作為 API 兼容性級別通常是最穩(wěn)妥的。使用 IL2CPP 后端時(shí)也需要確保所有原生庫的架構(gòu)配置正確。2.3 在純 .NET 項(xiàng)目中的集成對于非 Unity 的 .NET Core 或 .NET Framework 控制臺(tái)/桌面應(yīng)用過程更簡單通過 NuGet 包管理器安裝Facepunch.Steamworks包。這是最推薦的方式因?yàn)樗鼤?huì)自動(dòng)處理依賴。# 在包管理器控制臺(tái) Install-Package Facepunch.Steamworks或者通過 .NET CLI:dotnet add package Facepunch.Steamworks手動(dòng)將 Steamworks SDK 的redistributable_bin文件夾內(nèi)容復(fù)制到你的項(xiàng)目輸出目錄例如bin/Debug/net6.0下確保steam_api.dll等文件與你的可執(zhí)行文件在同一目錄。在代碼中初始化 SteamClient 時(shí)確保應(yīng)用程序的當(dāng)前工作目錄或DllImport的搜索路徑能夠找到這些原生 DLL。3. 核心初始化與基礎(chǔ)框架搭建集成文件只是第一步讓 Steamworks 在運(yùn)行時(shí)活起來才是關(guān)鍵。初始化流程看似簡單但每一步都有其意義和潛在的坑。3.1 創(chuàng)建 SteamManager 單例在 Unity 中一個(gè)常見的、穩(wěn)健的做法是創(chuàng)建一個(gè)永不銷毀的SteamManager單例游戲?qū)ο髵燧d一個(gè)腳本來管理 SteamClient 的生命周期。using UnityEngine; using Steamworks; using System; public class SteamManager : MonoBehaviour { public static SteamManager Instance { get; private set; } public static bool Initialized { get; private set; } private void Awake() { // 單例模式確保全局只有一個(gè) SteamManager if (Instance ! null Instance ! this) { Destroy(gameObject); return; } Instance this; DontDestroyOnLoad(gameObject); // 嘗試初始化 SteamClient InitializeSteam(); } private void InitializeSteam() { try { // 設(shè)置你的 AppId。這個(gè) ID 必須在 Steamworks 后臺(tái)為你的游戲配置好。 // 注意在開發(fā)時(shí)你可以使用 Steamworks 提供的測試 AppId (如 480)。 SteamClient.Init(480); // 替換為你的實(shí)際 AppId if (!SteamClient.IsValid) { Debug.LogError(SteamClient 初始化失敗。請確保\n1. Steam 客戶端正在運(yùn)行。\n2. 當(dāng)前登錄的賬戶擁有該 AppId 的許可。\n3. 原生庫文件放置正確。); return; } Initialized true; Debug.Log($Steam 初始化成功用戶: {SteamClient.Name}, SteamID: {SteamClient.SteamId}); } catch (Exception e) { Debug.LogError($Steam 初始化過程發(fā)生異常: {e.Message}); } } private void Update() { // 必須定期調(diào)用 RunCallbacks以處理來自 Steam 的回調(diào)Callbacks和事件Events。 if (Initialized) { SteamClient.RunCallbacks(); } } private void OnApplicationQuit() { // 程序退出時(shí)安全地關(guān)閉 SteamClient。 if (Initialized) { SteamClient.Shutdown(); } } }關(guān)鍵點(diǎn)解析SteamClient.Init(AppId): 這是啟動(dòng)一切的核心。傳入你在 Steamworks 合作伙伴后臺(tái)創(chuàng)建的游戲 AppId。在開發(fā)測試階段Valve 提供了一個(gè)名為“Spacewar”AppId 480的通用測試應(yīng)用任何擁有 Steam 客戶端的開發(fā)者都可以用來測試功能無需上傳自己的游戲。但在發(fā)布前務(wù)必替換成你自己的 AppId。SteamClient.RunCallbacks(): 這是 Facepunch.Steamworks 的“心跳”。Steam 客戶端通過異步回調(diào)Callback或事件Event通知你的游戲各種狀態(tài)變化如好友上線、收到聊天消息、成就解鎖完成等。你必須在一個(gè)游戲循環(huán)如 Unity 的Update中頻繁調(diào)用此方法每秒幾十次以確保這些回調(diào)能被及時(shí)處理。如果忘記調(diào)用你會(huì)發(fā)現(xiàn)很多異步操作如解鎖成就沒有反應(yīng)。SteamClient.Shutdown(): 在程序退出前調(diào)用進(jìn)行資源清理。雖然不調(diào)用有時(shí)也不會(huì)立即出錯(cuò)但為了良好的編程習(xí)慣和避免潛在的內(nèi)存泄漏建議總是調(diào)用。3.2 處理 Steam 客戶端未運(yùn)行的情況不是所有玩家都會(huì)一直開著 Steam。你的游戲應(yīng)該優(yōu)雅地處理這種情況。private void InitializeSteam() { // 首先檢查 Steam 客戶端是否正在運(yùn)行 try { SteamClient.Init(480, true); // 第二個(gè)參數(shù)如果為 true當(dāng) Steam 未運(yùn)行時(shí)會(huì)嘗試啟動(dòng)它。 } catch (System.Exception e) { // 最常見的異常是 Steamworks.InitFailedException表明 Steam 未運(yùn)行或初始化失敗。 Debug.LogWarning($無法初始化 Steamworks: {e.Message}. 游戲?qū)⒁噪x線模式運(yùn)行。); // 在這里設(shè)置一個(gè)離線模式標(biāo)志并禁用所有依賴 Steam 的功能如多人聯(lián)機(jī)、云存檔。 Initialized false; return; } // ... 后續(xù)初始化邏輯 }避坑技巧對于單機(jī)游戲你可能希望即使 Steam 未運(yùn)行游戲也能啟動(dòng)。這時(shí)可以捕獲初始化異常并將游戲設(shè)置為“離線模式”。但要注意所有依賴 Steam 的 API如SteamClient.IsValid在初始化失敗后都將不可用你的代碼需要做好空值檢查和功能降級。4. 核心功能模塊實(shí)戰(zhàn)詳解初始化完成后我們就可以暢游 Steamworks 提供的豐富功能了。Facepunch.Steamworks 將這些功能組織成不同的接口Interface如SteamFriends,SteamUserStats,SteamRemoteStorage等使用起來非常直觀。4.1 用戶與好友系統(tǒng)這是最基礎(chǔ)的功能。通過SteamFriends接口你可以獲取當(dāng)前用戶的信息及其好友列表。if (SteamManager.Initialized) { // 獲取當(dāng)前登錄的 Steam 用戶信息 var mySteamId SteamClient.SteamId; var myName SteamClient.Name; var myLevel SteamClient.SteamLevel; // Steam 等級 var myState SteamClient.State; // 在線狀態(tài)在線、離開、忙碌等 Debug.Log($我是 {myName} (ID: {mySteamId}), 等級 {myLevel}, 狀態(tài): {myState}); // 獲取好友列表 - Facepunch 風(fēng)格的簡潔 API var friends SteamFriends.GetFriends(); Debug.Log($你有 {friends.Count} 位好友); foreach (var friend in friends) { // friend 是一個(gè)完整的 Friend 對象包含豐富信息 Console.WriteLine($好友: {friend.Name}); Console.WriteLine($ ID: {friend.Id}); Console.WriteLine($ 在線: {friend.IsOnline}); Console.WriteLine($ 正在玩: {friend.IsPlayingThisGame}); Console.WriteLine($ 狀態(tài): {friend.State}); // 你甚至可以獲取好友的 Rich Presence游戲內(nèi)狀態(tài) var richPresence friend.GetRichPresence(map); if (richPresence ! null) { Console.WriteLine($ 正在地圖: {richPresence}); } } }與 Steamworks.NET 的對比回憶一下引言中的例子Facepunch 的 API 設(shè)計(jì)優(yōu)勢在這里體現(xiàn)得淋漓盡致。你不再需要手動(dòng)管理好友數(shù)量、循環(huán)索引和多次 API 調(diào)用直接一個(gè)GetFriends()返回可遍歷的集合代碼可讀性和編寫效率大幅提升。4.2 成就與統(tǒng)計(jì)系統(tǒng)成就Achievements和統(tǒng)計(jì)Stats是提升游戲粘性的重要功能。Facepunch.Steamworks 通過SteamUserStats接口提供了簡潔的訪問方式。4.2.1 成就的解鎖與查詢public class AchievementManager : MonoBehaviour { private void Start() { if (!SteamManager.Initialized) return; // 首先必須請求加載用戶的成就和統(tǒng)計(jì)數(shù)據(jù)。 // 這是一個(gè)異步操作但 Facepunch 提供了同步和異步兩種方式。 SteamUserStats.RequestCurrentStats(); // 檢查某個(gè)成就是否已解鎖 var achievement new Achievement(ACH_WIN_ONE_GAME); // “ACH_WIN_ONE_GAME” 是你在 Steamworks 后臺(tái)定義的成就 API 名稱 if (achievement.State) { Debug.Log(成就‘贏得一場比賽’已解鎖); } else { Debug.Log(成就‘贏得一場比賽’尚未解鎖。); } // 解鎖成就 achievement.Trigger(); // 這會(huì)立即在本地觸發(fā)并異步上傳到 Steam 服務(wù)器。 // 你也可以通過接口直接操作 SteamUserStats.SetAchievement(ACH_KILL_100_ENEMIES); // 重要修改成就或統(tǒng)計(jì)后必須調(diào)用 StoreStats 將更改上傳至 Steam 服務(wù)器。 SteamUserStats.StoreStats(); } // 監(jiān)聽成就解鎖事件可選 private void OnEnable() { SteamUserStats.OnAchievementProgress OnAchievementProgress; } private void OnDisable() { SteamUserStats.OnAchievementProgress - OnAchievementProgress; } private void OnAchievementProgress(string apiName, int currentProgress, int maxProgress) { // 對于有進(jìn)度條的成就如“擊殺 1000 個(gè)敵人”這個(gè)事件會(huì)在進(jìn)度更新時(shí)觸發(fā)。 Debug.Log($成就 ‘{apiName}’ 進(jìn)度: {currentProgress}/{maxProgress}); if (currentProgress maxProgress) { Debug.Log($成就 ‘{apiName}’ 已達(dá)成); } } }注意事項(xiàng)成就 API 名稱ACH_WIN_ONE_GAME這個(gè)字符串必須與你在 Steamworks 合作伙伴后臺(tái)為成就設(shè)置的“API 名稱英文”完全一致包括大小寫。StoreStats()調(diào)用SetAchievement或SetStat只修改本地緩存。你必須調(diào)用StoreStats()才能將更改持久化到 Steam 服務(wù)器。通??梢栽诔删徒怄i后立即調(diào)用也可以為了節(jié)省網(wǎng)絡(luò)請求在游戲存檔點(diǎn)或關(guān)卡結(jié)束時(shí)批量調(diào)用。但請注意如果玩家在調(diào)用StoreStats()前退出游戲成就可能無法記錄。進(jìn)度成就對于“達(dá)成 X 次”這類成就不要每次觸發(fā)事件就調(diào)用Trigger()而應(yīng)該使用IndicateAchievementProgress來更新進(jìn)度或者通過統(tǒng)計(jì)Stats來間接驅(qū)動(dòng)成就。4.2.2 統(tǒng)計(jì)數(shù)據(jù)的設(shè)置與獲取統(tǒng)計(jì)分為整數(shù)型Int和浮點(diǎn)型Float。它們通常用于跟蹤游戲內(nèi)數(shù)據(jù)并可以關(guān)聯(lián)到成就例如“總擊殺數(shù)”統(tǒng)計(jì)達(dá)到 1000 時(shí)自動(dòng)解鎖“千人斬”成就。// 假設(shè)我們在 Steamworks 后臺(tái)定義了一個(gè)名為 “total_kills” 的整數(shù)型統(tǒng)計(jì)。 public class StatsManager : MonoBehaviour { private void RecordKill() { if (!SteamManager.Initialized) return; // 1. 獲取當(dāng)前統(tǒng)計(jì)值 int currentKills SteamUserStats.GetStatInt(total_kills); // 2. 增加統(tǒng)計(jì)值 currentKills; SteamUserStats.SetStat(total_kills, currentKills); // 3. 檢查是否觸發(fā)成就假設(shè)“千人斬”成就關(guān)聯(lián)到 total_kills 1000 if (currentKills 1000) { new Achievement(ACH_THOUSAND_KILLS).Trigger(); } // 4. 上傳更改可以稍后批量進(jìn)行 SteamUserStats.StoreStats(); } // 獲取全球統(tǒng)計(jì)平均值異步 private async void GetGlobalAverageKillsAsync() { // RequestGlobalStatsAsync 默認(rèn)獲取過去 60 天的全球數(shù)據(jù) var result await SteamUserStats.RequestGlobalStatsAsync(); if (result.HasValue) { double globalAvg SteamUserStats.GetGlobalStatFloat(total_kills); Debug.Log($全球玩家平均擊殺數(shù)60天: {globalAvg}); } } }實(shí)操心得統(tǒng)計(jì)數(shù)據(jù)非常適合用來做游戲內(nèi)的數(shù)據(jù)追蹤和排行榜基礎(chǔ)。StoreStats()的調(diào)用頻率需要權(quán)衡。過于頻繁會(huì)增加服務(wù)器壓力并可能被限流過于稀疏則有數(shù)據(jù)丟失風(fēng)險(xiǎn)。一個(gè)折中的方案是在玩家完成一局游戲、返回主菜單、或手動(dòng)存檔時(shí)進(jìn)行存儲(chǔ)。4.3 云存檔功能Steam 云存檔允許玩家的游戲進(jìn)度在不同電腦間同步。通過SteamRemoteStorage接口實(shí)現(xiàn)。public class CloudSaveManager : MonoBehaviour { private const string SAVE_FILE_NAME player_data.sav; public void SaveGame(PlayerData data) { if (!SteamManager.Initialized || !SteamRemoteStorage.IsCloudEnabledForApp) { // 云存檔未啟用保存到本地 SaveToLocalFile(data); return; } // 將數(shù)據(jù)序列化為字節(jié)數(shù)組例如使用 JsonUtility 或 BinaryFormatter byte[] saveData SerializeData(data); // 寫入 Steam 云 bool success SteamRemoteStorage.FileWrite(SAVE_FILE_NAME, saveData); if (success) { Debug.Log(游戲數(shù)據(jù)已保存至 Steam 云。); } else { Debug.LogError(云存檔寫入失敗可能磁盤已滿或配額不足。); SaveToLocalFile(data); // 降級到本地保存 } } public PlayerData LoadGame() { PlayerData data null; // 優(yōu)先嘗試從云存儲(chǔ)加載 if (SteamManager.Initialized SteamRemoteStorage.FileExists(SAVE_FILE_NAME)) { byte[] cloudData SteamRemoteStorage.FileRead(SAVE_FILE_NAME); data DeserializeData(cloudData); Debug.Log(從 Steam 云加載存檔。); } // 如果云存檔不存在或加載失敗嘗試本地文件 if (data null LocalSaveFileExists()) { data LoadFromLocalFile(); Debug.Log(從本地文件加載存檔。); } return data ?? CreateNewGame(); // 都沒有則創(chuàng)建新游戲 } // 檢查云存儲(chǔ)配額 private void CheckCloudQuota() { ulong totalBytes SteamRemoteStorage.QuotaBytes; ulong usedBytes SteamRemoteStorage.QuotaUsedBytes; ulong remainingBytes SteamRemoteStorage.QuotaRemainingBytes; Debug.Log($云存儲(chǔ)配額: 已用 {usedBytes}/{totalBytes} 字節(jié)剩余 {remainingBytes} 字節(jié)。); } }關(guān)鍵點(diǎn)與避坑配額限制每個(gè) Steam 游戲有默認(rèn)的云存儲(chǔ)配額通常為 100MB。你的存檔文件大小需要合理控制。可以通過QuotaBytes等屬性查詢。文件沖突Steam 會(huì)自動(dòng)處理多設(shè)備間的文件同步?jīng)_突通常保留最新的文件。但你的游戲邏輯最好也能處理數(shù)據(jù)合并或讓玩家選擇存檔版本。異步性云存檔的讀寫是同步的但同步到 Steam 服務(wù)器是后臺(tái)進(jìn)行的。FileWrite成功只代表寫入了本地緩存隊(duì)列。啟用檢查務(wù)必在使用前檢查SteamRemoteStorage.IsCloudEnabledForApp和SteamRemoteStorage.IsCloudEnabledForAccount。玩家可能在 Steam 設(shè)置中禁用了云存檔。4.4 多人游戲與網(wǎng)絡(luò)Facepunch.Steamworks 為多人游戲提供了強(qiáng)大的底層支持包括 P2P 網(wǎng)絡(luò)和基于 Steam 游戲服務(wù)器的聯(lián)機(jī)。這里重點(diǎn)介紹 P2PPeer-to-Peer網(wǎng)絡(luò)它適合小規(guī)模、非專用的多人對戰(zhàn)。4.4.1 P2P 網(wǎng)絡(luò)通信基礎(chǔ)using Steamworks; using System.Text; public class P2PNetworkManager : MonoBehaviour { private void Start() { // 監(jiān)聽來自其他玩家的會(huì)話請求 SteamNetworking.OnP2PSessionRequest OnP2PSessionRequest; } private void OnP2PSessionRequest(SteamId remoteSteamId) { // 當(dāng)另一個(gè)玩家嘗試向你發(fā)送數(shù)據(jù)時(shí)會(huì)觸發(fā)此回調(diào)。 // 你可以根據(jù)游戲邏輯決定是否接受例如只接受好友或房間內(nèi)的玩家。 if (IsPlayerAllowedToConnect(remoteSteamId)) { SteamNetworking.AcceptP2PSessionWithUser(remoteSteamId); Debug.Log($已接受來自 {remoteSteamId} 的 P2P 連接請求。); } else { Debug.Log($拒絕了來自 {remoteSteamId} 的 P2P 連接請求。); } } // 向特定玩家發(fā)送數(shù)據(jù) public void SendDataToPlayer(SteamId targetPlayerId, byte[] data, P2PSend sendType P2PSend.Reliable) { if (!SteamManager.Initialized) return; // sendType 可以是 // - P2PSend.Unreliable: 最快但可能丟包適合位置更新。 // - P2PSend.UnreliableNoDelay: 類似 Unreliable但不排隊(duì)。 // - P2PSend.Reliable: 保證送達(dá)但可能有延遲適合聊天、關(guān)鍵指令。 // - P2PSend.ReliableWithBuffering: 可靠且會(huì)緩沖以優(yōu)化發(fā)送。 bool sent SteamNetworking.SendP2PPacket(targetPlayerId, data, data.Length, sendType); if (!sent) { Debug.LogWarning($向 {targetPlayerId} 發(fā)送 P2P 數(shù)據(jù)包失敗。); } } // 在 Update 中接收數(shù)據(jù) private void Update() { if (!SteamManager.Initialized) return; // 檢查是否有可用的數(shù)據(jù)包 while (SteamNetworking.IsP2PPacketAvailable()) { // 讀取數(shù)據(jù)包 if (SteamNetworking.ReadP2PPacket(out var packet)) { SteamId senderId packet.SteamId; byte[] data packet.Data; // 處理接收到的數(shù)據(jù)... ProcessIncomingData(senderId, data); } } } private void OnDestroy() { // 清理關(guān)閉與所有玩家的 P2P 會(huì)話 // 注意這需要你維護(hù)一個(gè)已連接玩家的列表。 foreach (var playerId in connectedPlayers) { SteamNetworking.CloseP2PSessionWithUser(playerId); } SteamNetworking.OnP2PSessionRequest - OnP2PSessionRequest; } }網(wǎng)絡(luò)編程核心要點(diǎn)連接管理P2P 連接是隱式的。當(dāng)你向一個(gè)SteamId發(fā)送數(shù)據(jù)時(shí)如果之前沒有會(huì)話Steam 會(huì)自動(dòng)嘗試建立連接并觸發(fā)對方的OnP2PSessionRequest回調(diào)。你需要在回調(diào)中決定是否AcceptP2PSessionWithUser。發(fā)送類型選擇P2PSend枚舉的選擇對游戲體驗(yàn)影響巨大。對于射擊游戲中的玩家位置使用Unreliable或UnreliableNoDelay以追求速度接受偶爾的丟包位置插值可以平滑。對于“發(fā)射武器”、“使用道具”這類關(guān)鍵指令必須使用Reliable。數(shù)據(jù)序列化你發(fā)送的是byte[]。你需要自己定義一套協(xié)議來序列化和反序列化你的游戲消息??梢允褂肧ystem.BitConverter、BinaryWriter或像MessagePack、Protobuf這樣的高效序列化庫。NAT 穿透Steam 提供了出色的 NAT 穿透能力大多數(shù)情況下玩家之間可以直接建立連接無需復(fù)雜的端口轉(zhuǎn)發(fā)。這是使用 Steamworks 進(jìn)行多人聯(lián)機(jī)的一大優(yōu)勢。5. 高級功能與實(shí)戰(zhàn)技巧掌握了基礎(chǔ)功能后我們可以探索一些更高級的特性這些特性能顯著提升游戲的品質(zhì)和社區(qū)活躍度。5.1 創(chuàng)意工坊Steam Workshop集成創(chuàng)意工坊允許玩家創(chuàng)建和分享自定義內(nèi)容如地圖、模組、皮膚。Facepunch.Steamworks 通過SteamUGCUser Generated Content接口提供了完整的支持。5.1.1 訂閱與下載物品public async void SubscribeToItem(PublishedFileId fileId) { // 訂閱一個(gè)創(chuàng)意工坊物品異步操作 var result await SteamUGC.Subscribe(fileId); if (result Result.OK) { Debug.Log($已訂閱物品 {fileId}。); // 訂閱后通常需要下載物品內(nèi)容 await DownloadItemAsync(fileId); } else { Debug.LogError($訂閱物品 {fileId} 失敗: {result}); } } private async Task DownloadItemAsync(PublishedFileId fileId) { var item await SteamUGC.DownloadAsync(fileId); if (item ! null item.IsInstalled) { string installPath item.Directory; // 物品的本地安裝路徑 Debug.Log($物品 {item.Title} 已下載至: {installPath}); // 現(xiàn)在你可以從 installPath 加載自定義內(nèi)容了 } }5.1.2 上傳物品供高級玩家或模組作者使用上傳流程相對復(fù)雜涉及創(chuàng)建一個(gè)Ugc.Editor對象來設(shè)置元數(shù)據(jù)標(biāo)題、描述、預(yù)覽圖、實(shí)際內(nèi)容文件等然后提交。public async void PublishNewMap(string mapFilePath, string title, string description) { // 1. 創(chuàng)建一個(gè)新的 Ugc.Editor var editor SteamUGC.CreateEditor(); // 2. 設(shè)置物品屬性 editor.WithTitle(title) .WithDescription(description) .WithContent(mapFilePath) // 設(shè)置內(nèi)容文件夾路徑 .WithPreviewFile(preview.jpg) // 設(shè)置預(yù)覽圖路徑 .WithTag(Map) // 添加標(biāo)簽 .WithChangeLog(Initial release.); // 更新日志 // 3. 提交發(fā)布異步 var publishResult await editor.SubmitAsync(); if (publishResult.Success) { Debug.Log($地圖發(fā)布成功物品ID: {publishResult.FileId}); // 可以在這里將 fileId 分享給其他玩家 } else { Debug.LogError($地圖發(fā)布失敗: {publishResult.Result}); } }注意事項(xiàng)創(chuàng)意工坊上傳功能通常由游戲內(nèi)的“模組編輯器”或?qū)iT的工具調(diào)用普通玩家不會(huì)直接使用。你需要仔細(xì)設(shè)計(jì)玩家生成內(nèi)容的流程和審核機(jī)制。5.2 游戲內(nèi)覆蓋層Overlay與網(wǎng)頁調(diào)用Steam 覆蓋層允許玩家在不離開游戲的情況下訪問好友列表、瀏覽器、截圖庫等。你可以通過代碼觸發(fā)覆蓋層的特定部分。// 打開 Steam 覆蓋層本身相當(dāng)于按 ShiftTab SteamFriends.OpenOverlay(); // 打開指定玩家的個(gè)人資料頁面 SteamFriends.OpenUserOverlay(steamId, steamid); // 或 friends, chat // 打開游戲的 Steam 商店頁面 SteamFriends.OpenStoreOverlay(appId, EOverlayToStoreFlag.AddToCart); // 可以傳遞參數(shù)如直接加入購物車 // 在覆蓋層內(nèi)打開一個(gè)網(wǎng)頁 SteamFriends.OpenWebOverlay(https://your-game-wiki.com); // 打開游戲邀請界面用于邀請好友加入當(dāng)前游戲/大廳 SteamFriends.OpenGameInviteOverlay(lobbyId); // 需要先有一個(gè)大廳Lobby使用場景在游戲內(nèi)添加一個(gè)“邀請好友”按鈕點(diǎn)擊后調(diào)用OpenGameInviteOverlay會(huì)彈出 Steam 的好友選擇界面體驗(yàn)非常原生。或者當(dāng)玩家遇到問題時(shí)可以調(diào)用OpenWebOverlay直接打開游戲的幫助頁面。5.3 大廳Lobby系統(tǒng)大廳是 Steam 為多人游戲提供的匹配和集會(huì)服務(wù)。它比單純的 P2P 更結(jié)構(gòu)化適合需要房間列表、玩家準(zhǔn)備狀態(tài)的游戲。public class LobbyManager : MonoBehaviour { private Lobby? currentLobby; // 創(chuàng)建一個(gè)大廳 public async void CreateLobby() { // 參數(shù)最大玩家數(shù)類型私有/好友/公開等 currentLobby await SteamMatchmaking.CreateLobbyAsync(4); // 創(chuàng)建一個(gè)4人公開大廳 if (currentLobby.HasValue) { var lobby currentLobby.Value; lobby.SetData(map, Forest); // 設(shè)置大廳自定義數(shù)據(jù) lobby.SetData(mode, Deathmatch); Debug.Log($大廳創(chuàng)建成功ID: {lobby.Id}, 加入碼: {lobby.Id}); // Lobby.Id 可以作為邀請碼 } } // 加入一個(gè)大廳通過ID或從列表選擇 public async void JoinLobby(ulong lobbyId) { currentLobby await SteamMatchmaking.JoinLobbyAsync(lobbyId); if (currentLobby.HasValue) { Debug.Log($已加入大廳: {currentLobby.Value.GetData(name)}); // 監(jiān)聽大廳內(nèi)事件 currentLobby.Value.OnChatMessage OnLobbyChatMessage; currentLobby.Value.OnLobbyMemberJoined OnMemberJoined; } } private void OnLobbyChatMessage(Lobby lobby, Friend friend, string message) { Debug.Log($[大廳聊天] {friend.Name}: {message}); } private void OnMemberJoined(Lobby lobby, Friend friend) { Debug.Log(${friend.Name} 加入了大廳。); // 可以向新成員同步游戲狀態(tài) } // 搜索大廳 public async void SearchPublicLobbies() { var query SteamMatchmaking.LobbyList; // 獲取查詢器 query query.WithSlotsAvailable(1) // 還有空位 .WithKeyValue(mode, Deathmatch) // 篩選模式為“死亡競賽” .FilterDistanceClose(); // 只搜索距離近的基于 Steam 網(wǎng)絡(luò)位置 var lobbies await query.RequestAsync(); // 執(zhí)行異步查詢 foreach (var lobby in lobbies) { Debug.Log($找到大廳: {lobby.GetData(name)}, 玩家: {lobby.MemberCount}/{lobby.MaxMembers}, 地圖: {lobby.GetData(map)}); } } }大廳 vs 直接 P2P對于需要匹配、有明確房間概念的游戲如 MOBA, 合作闖關(guān)使用大廳更合適。對于直接 IP 連接或通過其他方式發(fā)現(xiàn)主機(jī)的游戲如一些沙盒游戲P2P 更直接。大廳系統(tǒng)還內(nèi)置了通過 Steam 好友邀請的功能集成度更高。6. 調(diào)試、問題排查與性能優(yōu)化即使按照教程操作在實(shí)際開發(fā)中你仍可能遇到各種問題。這里總結(jié)一些常見坑點(diǎn)和解決方案。6.1 常見問題排查表問題現(xiàn)象可能原因排查步驟與解決方案初始化失敗SteamClient.IsValid為 false1. Steam 客戶端未運(yùn)行。2. 當(dāng)前登錄的 Steam 賬戶沒有該 AppId 的許可開發(fā)時(shí)未使用測試 AppId 480。3. 原生庫文件 (steam_api.dll等) 缺失或放錯(cuò)位置。4. 平臺(tái)設(shè)置Unity 中 DLL 的導(dǎo)入設(shè)置錯(cuò)誤。1. 確保 Steam 客戶端已啟動(dòng)并登錄。2. 開發(fā)階段使用 AppId 480 進(jìn)行測試。3. 檢查redistributable_bin文件是否在輸出目錄或 Unity 的Plugins文件夾中。4. 在 Unity 中仔細(xì)檢查每個(gè)平臺(tái)特定 DLL 的導(dǎo)入設(shè)置見 2.2 節(jié)。5. 查看 Unity 編輯器日志或 Windows 事件查看器尋找加載 DLL 失敗的錯(cuò)誤信息。成就解鎖了但 Steam 客戶端不顯示1. 沒有調(diào)用SteamUserStats.StoreStats()。2. 成就的 API 名稱拼寫錯(cuò)誤。3. Steamworks 后臺(tái)的成就配置未發(fā)布處于“待處理”狀態(tài)。4. 網(wǎng)絡(luò)問題導(dǎo)致上傳失敗。1. 確保在SetAchievement或SetStat后調(diào)用了StoreStats()。2. 雙重檢查代碼中的成就 API 名稱與后臺(tái)設(shè)置完全一致。3. 在 Steamworks 后臺(tái)將成就配置從“待處理”改為“已發(fā)布”。4. 調(diào)用StoreStats()后可以監(jiān)聽OnUserStatsStored回調(diào)來確認(rèn)上傳成功。云存檔不同步1. 玩家在 Steam 設(shè)置中禁用了云存檔。2. 游戲未在 Steamworks 后臺(tái)啟用云存檔功能。3. 存檔文件大小超過配額。4. 文件讀寫路徑或名稱錯(cuò)誤。1. 使用前檢查SteamRemoteStorage.IsCloudEnabledForApp和IsCloudEnabledForAccount。2. 登錄 Steamworks 后臺(tái)在“應(yīng)用管理”-你的游戲-“功能”中啟用“Steam 云”。3. 調(diào)用CheckCloudQuota()檢查并優(yōu)化存檔大小。4. 使用SteamRemoteStorage.FileExists驗(yàn)證文件是否存在。P2P 連接失敗或收不到數(shù)據(jù)1. 沒有在Update中調(diào)用SteamClient.RunCallbacks()。2. 沒有處理OnP2PSessionRequest或拒絕了請求。3. 雙方網(wǎng)絡(luò)存在嚴(yán)格的 NATSteam 中繼也失敗。4. 發(fā)送的數(shù)據(jù)包過大超過 1 MB。1. 確保RunCallbacks()被定期調(diào)用。2. 實(shí)現(xiàn)OnP2PSessionRequest回調(diào)并在此處接受連接。3. 這是網(wǎng)絡(luò)環(huán)境問題可以提示玩家檢查網(wǎng)絡(luò)或嘗試使用 Steam 的游戲服務(wù)器Dedicated Server。4. 大文件應(yīng)分片發(fā)送。Steam 建議單個(gè) P2P 包不超過 1200 字節(jié)以獲得最佳性能。在 Unity Editor 中運(yùn)行正常打包后崩潰1. 原生庫文件沒有正確包含在構(gòu)建中。2. 平臺(tái)相關(guān)的 DLL 導(dǎo)入設(shè)置錯(cuò)誤。3. 腳本后端Mono vs IL2CPP或 API 兼容級別不匹配。1. 確保Plugins文件夾及其內(nèi)容在構(gòu)建時(shí)被包含。2. 為每個(gè)目標(biāo)平臺(tái)Win, Mac, Linux單獨(dú)構(gòu)建并確認(rèn)對應(yīng)平臺(tái)的 DLL 設(shè)置正確。3. 對于 IL2CPP確保所有原生庫都有正確的 ARM64/x86_64 版本。在 Player Settings 中仔細(xì)檢查配置。6.2 調(diào)試與日志Facepunch.Steamworks 內(nèi)部提供了調(diào)試信息輸出。你可以訂閱Dispatch.OnDebugCallback來查看內(nèi)部日志這對排查復(fù)雜問題非常有幫助。private void EnableSteamDebugLogs() { Dispatch.OnDebugCallback (type, message) { // type 可以是 Debug, Message, Warning, Error 等 if (type NetDebugOutput.Error) { Debug.LogError($[Steamworks] {message}); } else { Debug.Log($[Steamworks] {message}); } }; }6.3 性能優(yōu)化建議RunCallbacks()的頻率在 Unity 的Update中調(diào)用是標(biāo)準(zhǔn)的但如果你游戲的幀率極高如 200 FPS可以考慮每幀或每幾幀調(diào)用一次因?yàn)?Steamworks 回調(diào)處理不需要那么高的頻率。但絕不能長時(shí)間不調(diào)用。網(wǎng)絡(luò)數(shù)據(jù)包大小如前所述保持 P2P 數(shù)據(jù)包小巧。對于狀態(tài)同步只發(fā)送變化的數(shù)據(jù)并使用差分壓縮。統(tǒng)計(jì)與成就更新避免每幀調(diào)用SetStat。對于頻繁變化的統(tǒng)計(jì)如當(dāng)前位置可以在本地累積定期如每秒更新一次到 Steam。對于成就只在條件達(dá)成時(shí)觸發(fā)一次。異步操作Facepunch.Steamworks 大量使用了 C# 的async/await模式。確保你的異步方法有適當(dāng)?shù)漠惓L幚肀苊馕刺幚淼漠惓?dǎo)致沉默的失敗。內(nèi)存管理像SteamUGC.Query返回的Ugc.Item集合可能很大使用后及時(shí)處理或釋放對它們的引用特別是當(dāng)處理大量創(chuàng)意工坊物品時(shí)。集成 Steamworks 是一個(gè)系統(tǒng)工程從初期的文件配置到核心功能開發(fā)再到后期的調(diào)試優(yōu)化每一步都需要耐心和細(xì)心。Facepunch.Steamworks 這個(gè)開源庫以其優(yōu)秀的 C# 原生 API 設(shè)計(jì)為我們掃清了許多障礙。希望這篇教程能幫助你順利地將 Steam 的強(qiáng)大功能融入你的游戲?yàn)橥婕規(guī)砀暾⒏缃换挠螒蝮w驗(yàn)。如果在實(shí)際開發(fā)中遇到本文未覆蓋的特定問題多查閱 Facepunch.Steamworks 的 Wiki 文檔和 Valve 的官方 Steamworks 文檔結(jié)合調(diào)試日志大部分問題都能找到解決方案。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久精品99| 爽 好舒服 无码刺激久久| 欧美视频边做饭边橾| 久久久啊啊啊| 中文一区在线日| 在线无码视频| 2017天天插| 国产欧美一区二区| 六月婷婷色综合| 亚洲一区中文精品| 欧美日韩一二三| 久久一本大香蕉 | 色哟哟AⅤ| 日本中文字幕熟妇| 国产精品经典一卡久久久| 性爱边摸边日免费AV| 97啪啪| 欧美第二页午夜| 日本三级久| 国产精品久久久久久片| 国产日韩在线播放av| 久久精品久久久久久久| 南澳成人一级片在线播放| 99re只有精品| 熟妇高潮一区二| 性站| 久久这里都是精品| 黑丝91视频| 欧美乱色| 欧美性爱97超碰| 在线99热| 天天做天天爱天天高潮| 婷婷伊人綜合中文字幕| 国产青一二三| 高树玛利亚无码流出| 一区二区激情国产熟女| 97日本超碰综合| 日本免费亚洲欧美| 性色国产东北露脸精品视频| 天天综合网在线| 国产超碰国产97| 天天干少妇| 亚欧性爱在线无码| 五月丁香综合激情| 猛交交| 久久五月综合| 激情综合av| 撸无码不卡免费视频| 一二三四视频在线社区中文字幕| 日本高清熟女久久一区| 本道在线| 94色色电影网| 中文字幕精品一区欧美| 欧美99热| 亚洲丝袜B诱惑| 欧美少妇高潮久久91| 熟女高潮合集-永久久久-成人AV | 嗯嗯啊好大| 淮穴色AV| 久久免费精品96| 在线免费试看60秒| 91天天综合日韩欧美| 亚洲欧美不卡线| 欧美在线永久天堂| 93人人操人人| www.婷婷五月天| 欧美|91色综合| 另类小说五月天| 国语人妻精彩刺激| 欧美A√综合网| 加勒比五月天| 精精品人妻一区二区三区| 1区2区3区在线视频| 色色婷婷丁香| 影音先锋少妇| 91精品久久久久久77777| 日本在线不卡v二区| 淫荡熟女乱伦网| 国产精品女久久久久av爽| 日韩欧美亚洲一区二区三区影院| 亚洲欧美大| 97自拍一区| 青青草国产一区二区三区| 九九九不卡| 亚洲人体视频在线观看| 熟女六十路| 91N欧美| 日韩欧美偷拍美女视频| 熟女人妻一区二区三区| 亚洲精品第一| 色五月69夫妻| 97伊人超碰| 精品国产一区探花在线观看| 99久久综合网| 操操操操操操| 国产成年免费大片黄在线观看| 婷婷激情五月天小说网| 97色冈| k频道色撸撸| 91色夜| 日本成人A片网站| 久久久久久久人妻| 夜夜嗨免费视频| 亚洲男人天堂网| 日韩欧美字幕亚洲一区二区| 久久美国毛片| 亚洲成人福利电影免费| 物尤视频一区二区| 91久久青青草原精品| 口爆吞精在线观看| 后入精品| 麻豆国产96在线| 嗯嗯嗯啊啊啊在线免费观看| 精品免费成人久久| 亚洲色 国产 欧美 日韩| 99re8免费高清在线| 在线天堂资源亚洲| 亚洲欧美大| 99热大香蕉伊在线| 任你爽视频| 99久在线精品99re8a| 久久精品国产精品一区| 色色国产| 人妻熟女一区二区三区视频| 99在线免费观看| 四虎免费在线播放| 久久婷婷亚洲| 久热伊人| www.狠狠干.coom| 大香蕉78| 韩国轻伦国内自拍一区| 久久中文字幕不卡人妻| 美女91在线观看| 97精品国产| 欧美乱色| 亚洲麻豆av一区二区| 天无日色综合| 亚洲av性爱电影| 91欧美长吊| 日韩性爱一级片| 97中文天堂| 日本成人在线不卡一区二区三区| 久久色激情一区二区三区| 在线视频亚洲无码| 久久原创中文| 夜夜草网站| 欧美中日韩XXXX| 五月天综合在线| 96精品久久久久久久久久| 久久久九97| 国产精品女aA片爽爽视频| 高潮内射在线| 人人操人人操人人人操| 91天天综合在线观看| 麻豆国产成人精品| 日韩人成网站在线播放| 久久97精品久久久久久久不卡| 日本有码影片下载| 日韩欧美国产高清视频| 亚洲中文字幕在现观看| 欧美日韩国产电影| 懂色AV一区二区三区| 91五十路| 日本一卡二区在线| 校园春色欧美色图| 91九色首页| 久久久久九九九九| 国产精品午夜精品| 2019AV天堂| 国产三级多多影院2022国产AA一级毛片无码| 91精品操美女| 超碰天天操| 九九热视频在线观看| 日韩av免费一级电影| 久久久久极品| 国产1727欧美| 裸体美女久久久| 99热婷婷| 国产女人91精品嗷嗷嗷嗷| 亚洲成人贴图| 中文字幕精品专区搜索结果91| 五月婷婷综合在线| 久久久五月天| 国产乱伦一二三区| 女人被男人桶爽视频网站| 久久香蕉国产线看观看亚洲女人 | 欧美成人免费在线观看| 天天天做天天天爱天天天爽| 神马久久久久久久久久久久| 白嫩嫩一区| 久久亚洲AV无码专区国产精品| 国产精品农村妇女| 91 亚欧| 久久综合女优| 中文字幕艹艹| 久久精品欧美一区蜜桃| 欧美毛片在线网| 国产精品探花视频| 精品久久久高清无码| 天美精品原创av片国产| 青青草原av| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美成人精品欧美一级乱黄一区二…| 日产成人久久| 91色黑人少妇| 日日黄色三级网站| 天天综合网入口~91| 欧美综合站| 色综合尤物| 亚洲无吗在线视频| 国产精品嫩草久久久久| 免费的黄片有限公司| 97aiaiai| 成人无码在线视频网站| 亚洲欧美色图小说| 综合伊人激情| 亚欧高清| 国产久久成人| jizzjizz欧美| 久久久久成人亚洲国产| 日韩ab网 | 国产精品97超碰| 九九综合网| 国内成人圈中文字幕无码视频| 亚洲国内精品成人不卡| 夜夜操夜夜高潮夜夜爽国产精品区| 小草av不卡亚洲二区| 97超碰巨乳| se,,,亚洲欧美| 国产情色在线| 精品人妻一区二区蜜桃视频| 丰满人妻一区二区三区四区| 水多多映视AV| 天天插夜夜操| 日韩欧美字幕亚洲一区二区 | 国产精品农村妇女| 亚洲成a人v欧美综合天堂下载| 国产精品com| aaa亚无码专区| AV乱伦专区| 日韩一区二区高清在线观看的| 超碰在线欧美性爱激情| 日小BB小视频| 欧美成人午夜免费福利785| 91国产精品在线看| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 不卡码视频| 噜噜噜亚洲精品| 久操免费电影| 国产精品探花色| 日韩乱伦AⅤ| 国产精品久久成人免费| 国产不卡精品91| 天美传媒av在线| 欧美在线视频观看一二三四区高清 | 亚洲少妇激情一区二区三区| 免费视频一二三区| 大香焦A片| 五月激情视频| 精品十三区| 啊啊啊操死我了| 激情熟女12P| 国产精品岛国片在线观看| 激情99| 成人综合视频久久| 激情欧美97| 欧美色性爱| 麻豆60秒| 中文字幕色AV| 国产免a费看黄片在线| 免费视频a级毛片免费视频| 夜夜高潮夜夜爽| 呦女网站| 免费强奸av| 九九九久千久久激情蜜桃在线看 | 俺去啦俺来也久久综合 | 婷婷20月天青娱乐| 果冻国产精品麻豆成人av| 日产国产精品中文久久婷婷| 亚洲情欲| 一区二区三区机械有限公司| 精品无码产区一区二| 一级做受视频免费是看美女| 九九热视频在线观看| 青青伊人这里只有精品| 国产女同视频在线播放| 玖玖大干人妻| 亚洲精品毛片在线观看| 精品久久久久黄少妇| 96国产精品| 国产专区第一页| 男人的天堂2018.| 免费试看60秒| 狂操嫩妻视频一区二区三区| 欧美情色亚洲| 久久精品三级影视| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 亚洲天堂中文字| 久久一二三级一一一| 毛片一区二区| 台湾肥佬网一区二区三区| 人人妻人人玩人人澡人人爽| 亚洲综合九九| 蜜臀Av一区二区三区| 三级片网站在线播放| 亚洲限制级| 人人操人人摸人人看人人插| 大香蕉综合久久| 99视频这有这里有精品| 欧美激情片一区二区| 国产三级片在线观看| 婷婷六月色| 久久岛国| 99国产精品久久久在线播放| 欧美性爱精品七区| 久久综合久色欧美综合狠狠| 国产乱伦性爱AV| 欧美综合狠| 囯产乱伦一区二区三女 | 操逼网免费无码视频| 超碰这里有精品| 婷婷激情五月天小说网| 欧美大片一区二区三区| 97人人模人人爽人人| 麻豆精品.欧美精品.日韩精品.| 五月丁香啪啪网| 欧美亚洲手机在线| 久久精品视频28| 乱伦一区二区三区‘| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 午夜黄色免费在线观看| 老熟乱一区二区三区四区| 久久精品小视频| 欧美性爱第一页久久| 国产视频大全| 麻豆久久久一区二区| 男插女青青影院| 精品9区| 亚洲AV成人在线| 999综合网| 亚州色阁| 色综合1991| 性色一线| 国产情侣自拍在线播放| 黄色免费一级在线毛片| 亚洲丝袜二区在线| 91麻豆天美传媒HD| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 天天操人人操骚逼网站| 69人妻精品一区二区绯色| 日韩精品资源专区二区| 黑人粗大V S日韩女优视频| 偷拍伦理视频| 操逼网站视频漫画国产| 免费日韩黄片| 激情色图| 唯美清纯 妖精视频| 精品久久久久瑟瑟| 夜夜爽77777| 人人操人人摸人 | 亚洲色图激情小说| 日韩性爱播放| 嗯啊抽插大香蕉网页| 网友自拍第一页| 日韩中文字幕av在线播放| 熟女突然公开看18禁影片| 欧美人与动性人交a| 欧美手机在线综合| 麻豆传媒一区二区在线观看| 久久久9品一区二区三区| 黄色视频特级毛片| 乱伦av麻豆| 操逼无码操逼| 在线岛国新天堂8| 少妇人妻在线| 土豪酒店各种姿势玩弄极品幼稚| 美国久久一二三四| 97香蕉人人乳| 99re在线观看| 日韩中文字幕2020| 黄色不卡视频| 新精精品久久精品| 丝袜色综合| 伊人久久久日韩一区| 日本精品人妻少妇一区二区| 青青青操| 色呦呦、国产精品| 极品少妇99| 狂操嫩妻视频一区二区三区| 久热91| 国产免费永久精品无码| 欧美综合区| 免费毛片在线播放| 国产女人成人精品视频| 爱av免费| 91精品久久久久久77777| www.国产高潮精品| 亚洲综合色婷婷| 亚洲激情在线一区二区| 女同性恋久久| 五月婷婷无码| 久久伊人在线五区| 久久久久斤小| 黄页网站成人免费| 亚洲精品自拍| 丰满人妻一区二区三区四区| 在线人人人人人人精品超| 国产第25页在线观看| 中文字幕少妇色| 99精品网站| 91草草草| 欧美日韩妖精91com| 999色欧美中文字幕| 大香蕉中文201| 欧美偷拍| 国产av强奸美女| 国产精品一二三区18| 国产一区二区免费福利片| 亚洲免费成人在线高清无码视频| 久久9视频| 亚洲免费精品一区| 男人天堂 天天射| 亚州精品人妻一二三区| 青娱乐淫乱1314| 老熟女乱子伦中文字幕一区二区 | 69人妻精品一区二区绯色| 日韩久久激情精品| 97网址www| 欧美久久婷婷| 一本色道久久综合精品婷婷| 亚洲一区日韩精品| 999岛国大片| 高树玛利亚无码流出| 九七人妻在线| 女人综合网| 懂色天天爱天天日天天射天天澡| 啊啊啊不要好疼视频| 九热大香蕉| 男人的天堂久久| 午夜a成v人电影| 破苞ⅩXXX性无码动漫无码| 情色日播放AV| 国产精品农村妇女| 人人做人人妻人人夜视频| 亚洲精品一卡二卡三卡福利视频网站 | 人妻无码后入| 午夜欧美神马久久久久| 天天α片| 综合少妇网| 999久久久久久久久| 日本淫乱女一区二区三区视频| 精品日韩中文在线| 亚洲欧洲偷拍一区| 国产日韩中文字幕欧美| 在线观看一级α片刺激高潮视频| 国产久久久久久久久一区二区| 人妻天天夜夜爽一区二区| a人片中文字幕一区二区| 校园激情狠狠四射| 在线观看黄色电话| 欧美综合网1| 日本欧美不卡| 秋霞曰韩R级| 亚洲一区二区 麻豆传媒| 九九九九九精品| 亚洲精品乱码线路中文字幕| 大香蕉十区| 欧美精品庄| 911粉嫩人妻| 99re在线视频| 岛国片国产成人亚洲播放| 9 7超碰在线免费观看| 欧美激情内射| 人妻人人做人人澡人人爽欧美一区| 视频在线观看一二三区| 亚洲综合在线第一页| 大香蕉五月天婷婷| 日韩无码人妻中字久久三区四区| www.色操逼| 97天天插| 日韩性爱网址| 91美女小视频| 日本人体九九九九九九| 日本一区二区亚洲综合| 在线人妻熟女一区二区三区四区五区| 免费AV中文网在线观看| 96AV久久久| 蜜臀久久99精品久久久久久酒店 | 九九九久久久久| 国产亚州高清国产拍精| 久久精品国产久精国产| 亚洲欧美精品福利在线| 欧美性夜| 综合网~91综合网| 试看60秒 爽| 后X久久| Sekablack无码一区| 白丝AV网站| 久操凹凸视频| 国产麻豆一区二三区| 国内毛片无码一级毛片| 亚洲欲色| 午夜性| 天天视频综合在线观看视频| 久九九九九九九九热| 欧美亚洲| 亚洲黑人在线| 欧美 亚洲 综合 制服 另类| 9999久久久久| 明星性猛交ⅹxxx乱大交| 夜夜嗨av午夜成人| xxxx网站亚洲精品| 97国产超碰| 精品人妻伦一区二区三区久久| 欧美另类色图片| 欧美成人A天堂片在线观看| 欧美激情在线观看视频| 国产成人精品午夜福利| 欧美亚综合色图| 国产免费久久久久| 国产午夜在线观看| 亚洲,欧美,综合网| 久久久久一本一区二区青青蜜月| 手机午夜电影神马久久| 国产热av| 日韩人妻网站| 97精品综合| 日韩综合无码色欲vv| 综合亚洲网| 日韩资源网| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 亚洲精品久久久久毛片A片拉屎| 97AV在线免费观看| 99.色网| 草草影院在线视频| www九九热| 日韩激情啪啪| 日本高清_区二区三区| 色y情视频免费看| 97精品视频| 色色97爱| 久久久久国色αv免费观看| 色悠久久久av| 蜜桃丰满熟妇av无码区不卡| 亚热日本熟女| 97国产色图 | 亚洲精品毛片在线观看| 为用户提供免费看黄网址在线观看| 97在线视频免费观看| 好爽视频在线观看| 天天综合-91入口| 91亚洲综合在线| 日韩欧美女求操每天更新| 欧成人在线| 国产97在线播放| 激情内射| 国产欧美另类久久久精品课程| 青青草大香蕉视频| 亚欧美色| 久久久精品电影| 岛国激情视频在线观看| 国产一区二区精品久久99| 操操操日本的逼| 91成人久久| 影音先锋国产精品| av天堂影视中文在字幕在线中文| www鬼畜国产男人的天堂| 久久久久久中文字幕中文字幕最新| 国产不卡精品91| 国产精品久久泡妞网站| 亚洲天堂男人天堂网| 极品销魂美女一区二区| 操逼无码操逼| 八人操人人摸人人看| 国产在线视视频有精品| 精品超碰中文在线| 丁香婷婷激情五月天无毒不卡| 久操影视| 97 色综合| 国产精品99精品视频网站| 色官网色综合| 91粉芽高清在线一区二区| 亚洲一区二区三区麻豆传媒| 色在线69堂| 欧美色另类| 国产视频一区二区三区在线免费观看| 无码人妻丰满热妇又大又粗| 丝袜美腿欧美| 亚洲综合情色| 97久久精品| 93人人操人人| 熟妇人妻精品一区二区视频色欲| 日韩精品人妻中文字有码在线| 加勒比综合在线| 亚洲欧美日韩制服另类| 天天操天天舔| 欧美色图私拍91| 噜噜瑟| 午夜福利激情在线视频| 五月丁香六月激情| 日韩一级二级三级免费看完整版国语版| 殴美色网| 强奸乱伦大香蕉网| 91色黑人少妇| 久久久91| 嫖老熟女A片一二三区| 日本免费一区二| 国产91丝袜 在线播放| 思思热免费在线视频| 日本三级韩国三级99| 中文字幕第23区| 国产精品999aaa| 韩国黄色片精品久久久| 亚洲精品1区| 久久性爱视频免费看| 色婷网| 精品综合久久久久久97| 八戒午夜福利理论片| 国产11页| 亚洲资源一区| 熟女视频久久| 久久久久深夜无码| 无码黑人精品一区二区三区三| 国产欧美一区二区| 久久久久久久97| 日本天天操| av天堂加勒比| 欧美日韩操逼嗦吊| 亚洲国产福利视频| 丝袜美腿制服人妻二区中文字幕 | 成人国产二区三区在线,男女精品。| 手机在线人成免费视频| 日韩精品9区| 亚川综合视频| 天天看高清麻豆| 一个色导综合| AV丝袜少妇| 天天爽夜夜爽夜夜爽精| 91av天美性媒精品视频| 91AV入口| 亚洲 欧美 小说| 99e久久国产精品| 亚洲蜜臀懂色| 亚洲精品国产熟女| 好屌色综合| 成年人黄色小视频网站| 久操影视| 亚洲av强奸乱伦| 亚洲黄色电影| 91天天日| 伊人久久综合影院精品久久久| 亚洲色图a| 国产一区免费午夜视频| 超碰97久久国| 久久久九九网站| 熟妇色99| 综合网~91综合网| 日韩图区 偷拍| 久久久久极品| 激情五月天色播| 久久大黄片| 日本东京热大香蕉a片| 国产传媒操逼视频| 午夜福利合集| 青青草自拍视频在线播放| 中文字幕日韩专区精品系列| 天堂综合| 夜夜爽爽爽| 免费黄色片。| 久草毛片| 亚洲熟妇无码一区二区三区| 无码av永久免费专区网站| 大逼色网站| 亚洲情色五月天| 操迟操逼在巾线Fre看| 97精品人妻一二三四| 91女在线观看| 一区二区三区黄片免费观看| 无码粉嫩白虎一线天b区| 人妻天天爽夜夜爽爽| 色欲蜜臀AV| 综合色好色| 九九九九九九九九九九九九九九九女| 色色五月天激情| 国产精品ⅴ无码大片在线看.| 亚洲色棕合| AV天堂男人的天堂| 色婷婷狠狠18禁| 黄色人人| 麻豆美女丝袜人妻中文| 97欧美色综合| 天天综和| 99色视频| 国产精品无码av| 91搡老女人老妇女老熟女歌词翻译| 精品一二三区四视频| 色丁香五月婷婷| 亚洲囯产精品女人久久久| 天天亚洲| 亚洲欧洲激情| 亚洲欧美九九九| 狠狠操天天干| 亚洲古典另类欧美在线| 9国产超碰| 熟妇一区二区| 67914在线兔费成人视频| 色婷婷婷五月天激情四射| 长长久久88视频| 福利在线黄片| 国产一区二区精品久久99| 边做饭边操逼逼| 午夜精品久久久久久久久久久久久| 97干综合网| 啊啊好多水| 国产精品熟女AV中文字幕在线播放| 狠狠爱综合网| 日韩欧美经典在线观看| 欧美日韩在线国产在线| 国产精品视频自拍在线| 狠狠操,使劲操| 日本操逼视频免费| 东京热天堂网| 69一区二区三区| 玖玖久久久| 人妻精品一区二区| 欲色综合| 黄色工厂这里只有精品| 天天综合~91| 香蕉国产97| 极品少妇久久久久| 999热日韩精品| 在线色资源| 蜜桃臀一区二区三区久久| 人人操人人射人人干| 日韩资源网| 超碰久久网| 欧美综合网1| 亚洲一二三四区在线免费看视频| 色网综合网| 久久久精品中文字幕麻豆| 精吧天堂| 青草伊人网| 亚洲风情在线观看| 大色综合| 免费a级毛片av无码久久精品中文字幕| 亚洲av性爱电影| 无码137片内射在线影院| 久久亚州精品成人Av无| 九九热久久99精品re| 日韩激情啪啪啪| 尤物一级在线免费观看| 婷婷99狠狠躁天天躁| 亚码激情| 欧洲亚洲人妻无码中字久久三区四区| 亚洲吊色| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 一直超碰| 999久久芭蕾| 日韩在线电影| 岛国1区2区3区在线观看| 女人被男人桶爽视频网站| 欧美亚洲日本视频久久久| 久久xxxx| 免费看污网站| 熟妇激情| 综合久久97| 成人aⅴ一区二区三区| 十八禁视频网站| 美女在线H91| 97天天在线| 极品另类| 色婷婷九月天天综合 | 天天色天天干天天射| 婷婷色中文字幕| 日本97久久久精品| 九九九偷拍| 免费成人在线观看91| 国产激情在线| 在线综合 亚洲 欧美中文字幕| 日本熟妇色熟妇在线视频播放| 果冻传媒A片麻豆熟妇人妻| 国产精品一二三区18| 激情五月天社区| AV一二区| 欧美的精品的视频| 黄色AAAAAAAAAAA大片| 人妻啊啊人妻啊啊| 少妇激情AV| 视频一区二区三区精品| 激情av| www.男人天堂| 91亚州| 国产又色又爽又舒服的三级视频| 国产白嫩精品久久| 99少妇| 亚洲AV噜噜狠狠网址蜜桃动漫| 麻豆2区1区天美| 天美传媒精品久久视频| 婷婷丁香九月| 欧美天天综| 超碰99re| 熟女被操视频网址| 嗯嗯啊啊好大好爽| 国产v片在线免费观看| 色五月婷婷在线| 在线色资源| 台湾成人无码AV| 亚熟在线| 国产毛片毛片4p懂色| 99无码视频| 夜夜黄| 亚洲二区精品在线观看| 一牛一区二区三区久久| 亚洲一区日韩精品中文字幕 | 9久久久久| 色婷网| 亚洲天堂少妇| 黄片免费看黄片免费看| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 超碰2017| 亚洲午夜免费狠狠干| 久久久日本电影| 五月综合视频| 四虎影视精品| 久久极品伊人| 欧美东京热青青草| 日本大片日本一区二区免费高清| 久久婷婷一区| 色婷婷九月| 这里都是精品| 免费夜夜爱黄色视频毛片| 花花AV导航| 婷婷色一区| 亚洲一区日韩精品中文字幕| juliaann精品熟女一区| 国产捆绑一区| 激情文学 国产一二三aV| 国产在线能看的你懂的| av午夜玫瑰| 日韩精品在线观看观看| 国产欧洲精品亚洲午夜拍精品| 无色无码| 中文字幕激情小说| 久久久影院| 久久精品国产亚洲妲己影视| 亚洲国产精品久久久男人的天堂| 视频黄色国产一级| 久肏视频字幕| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 97精品一区二区视频| 亚洲视频,小说| 久久精品国产亚洲AV高级北京| 快播久久人人aV| 天天舔天天| 亚洲啪啪视频免费| 男人精品天堂一区| 大香蕉丝袜一级片| 国产精品人妻免费精品| 亚洲诱惑| 激情久久久| 黄色免费网| 色香综合天天影视综合 | 干b在线性社区| 91影库| 亚州五月| 亚洲AV乱码专区国产噜噜亚洲| 精品国产无码中文| 日本精品加勒比海一区| 大香蕉伊人一区在线观看| 日韩欧美国产一区二区三区四区| 97久操| 5252色欧美在线| 国产午夜无码片在线观看影视| 99re这里只有| 粉嫩少妇自慰在线| 五月天啪啪| 国产亚洲性生活视频播放| 97人妻人人躁人人玩人人| 江都AV在线| 人人操人人摸人| 欧美巨大性舒爽顶到了| 东京热AV男人的天堂| 欧美嗯啊……在线观看视频免费| 亚洲人妻中文高清| 久久狠狠色噜噜狠狠狠狠97| 欧美一区二区三区黄色影视| 色女女女导航| 超碰成人国产| 午夜一级免费毛片| 九月伊人中文字幕| 毛片麻豆91糖心精品毛情片| 久久久999网站| 岛国精品视频在线观看| 午夜a成v人电影| 熟女少妇视频| 欧美色图在线视频少妇| 国产精品亚洲四五区在线观看| www.色综合| 日本高清_区二区三区| 搡老熟女免费视频| 欧美九九九九九| 美女丝袜激情小说| 欧美国产视频| 欧美中文字幕男人天堂久久精品 | 成人情色一区二区| 91强热人妻| 亚洲啪AⅤ永久无码| 超碰97亚洲| 天天综合~91| 影音资源男人日韩| 美女诱惑在线一区| 无码人妻丰满熟妇奶水区毛片| 精品国产乱码久久久久久久久1 | 欧美熟妇人体| 亚洲欧美校园另类春色| 婷婷色导航| 婷婷AV一区二区三区| 操逼操逼逼操操逼91| av一区二区三区四区| 日本精品一级二级三级| 啊啊啊啊啊啊好多水| 国产激情在线| 91精品久久久久| 日韩人妻无码不卡网站| 欧美性高潮| 加勒比aⅴ| juliaann欧美丝袜办公室| 超碰九九| 久热伊人| 亚洲在线a| 日本一区不卡| 免费在线看黄片av| 国产 日韩,欧美 自拍| 免费在线看黄片av| 天天影视色香欲综合网小说| 欧美精品三级黄片| 乱伦日本中文自拍| 亚洲春色欧美激情自拍| 国产又猛又粗又爽又黄| 欧美日韩黄片精品在线| 亚洲精品乱码线路中文字幕 | 97少妇人妻中文字幕久久 | 天堂中文日本在线观看| 亚洲色图殴美色图激情乱伦| 色欲日韩欧美在线一区| 99九九久久| 欧美亚性天堂| 操香逼| 久久99精品九九久久久婷婷| 97超碰中文字幕| 大香蕉草草| 91亚洲在线| 日韩三级在线观看网站| 国产精品爱欲| 91在线精品| 97电影院超碰| 97久精品| 亚欧美综合网。| 免费视频观看60秒| 一区二区三| 操迟操逼在巾线Fre看| 强奸乱伦av电影| 麻豆久久久一区二区| 亚洲AV乱码专区国产噜噜亚洲| 久久久∴| 97欧美资源| 秋霞Av理论一级在线| 亚州免费啪啪视频| 综合色播| 天天天乱色综合全| 日本久久久久久久久久| 啊啊啊在线观看| 天天做日日做天天欢。| 中文高清一区二区的| 欧美日韩精品久久| 风韵犹存大大大大香蕉| 国产9 9在线 | 亚洲| 丁香五月天堂| 麻豆精品A片免费观看| 欧洲站一级二级三级h| 91无码西班牙视频在线| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 性生活久久久久久久久久| 日夜尻逼网| 级做a爱无码性色永久免费| 一区在线观看中文字幕| 亚洲永久AV无码精品秋霞| 亚洲狠狠入| 操逼日批| 激情四射婷婷四五月天| 天天天做天天天爱天天天爽| 日韩无码一级黄色av片| 日日摸天天爽夜夜欢| 亚洲精品成人| 大香交| 麻豆一区二区AV天美| 欧美性爱无码一区二区三区| 艹我哪美一区无码| 天操天操夜操夜月月年年操操| 国产强奸AV在线| 人妻少妇色综合| 大香蕉青青9| 久久这里只精品免费福利| 在线不卡视频| 97草草| 岛国黄| 日han少妇无码| 91精片| 五月婷婷激情网| 午夜久久久| 探花一区二区三| 特级大荫道BBwBBwBBW| 国产成人五月天丁香花| 成人三级片无码| 无码人妻精品一区二区三区九九 | 色五月首页| 日韩色图 一区二区| 国产成人无码a| 欧美久久婷| 男人的天堂 在线一区| 丁香五月影院| 欧美色另类| 狠狠操天天干| AAAAAAAAA黄片| 久久久穴999| 亚洲欧洲日本精品中文a∨| 中文字幕国产精品1区| 女人久久久| 视频二区美腿丝袜制服人妻欧美 | 日本3级一区二区免费| 尤物视频偷拍免费| 国产偷拍自拍在线视频| 91无摭挡| 国产日本久久免费精品| 日韩欧美天堂| 一区二区三区精品视频| 蜜桃臀一区二区aV| 无码抄逼网| 欧美日韩一二三| 五月天精品| 9118禁| 欧洲免费一区二| 家庭乱伦国产精品| 欧美另类自拍 | 伊人久久88国产女| 亚洲色宗合| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 亚洲自拍另类丝袜综合| gogogo免费高清看中国国语| 蜜桃色院一区久久| 亚洲一卡2卡3卡4卡乱码网站| 嫩草黄页| 日韩无码专区| 97免费在线观看| 美女97超碰| av网页一区二区三区| 日韩丨制服丨中文|在线| 高清无码国产亚洲| 亚洲熟女综合一区二区| 天堂日本亚洲欧美| 免费αⅴ在线观看| 久久激情视频| 夜夜中出国产| 中文日本免费高清| 色偷偷2020免费视频播放| 欧美亚洲丝袜人妻制服99| 国产一级舔足在线观看| 日韩精品人妻中文字有码在线| 国产极品一区二区三区三州| 伊人网高清| 欧美少妇性乱| 狠狠色色| 人妻干天天| 麻豆天天躁天天揉揉AV| 91视频观看网站| 国产一区二区三区导航| 午夜精品久久99蜜桃的功能章节| 国产美女精品| 久99| 久久黄色视频一区二区三区 | 乱伦1色页| 人人操人人肉久久精品| 欧美日韩婷婷中文| 婷婷丁香久久| 国产绿奴视频在线观看| 俞拍久久国应视频| 九区国产| 中文字暮97| 围产精品一区二区三区视频播放| 97干97色| 伊人嫩草| 精品一区二区麻豆| 日本 欧美 亚中文字幕| 中日亚韩免费视频| 操国产高清| 亚洲天堂少妇| 久久久中文版| 97干日韩| 日本色色色| a v网站在线播放| 无码天堂| 怡红院久久老司机| 色阁阁AV综合网| 96AV久久久| 性吧在线视频| 色色色色网站| 欧美,日韩综合久久| 肏逼视频日本| 欧美 亚洲| 91中文字幕在线观看| 久久久久9| 国产污视频麻豆传媒一区二区| 农村妇女一级二级三级视频| 日韩黄色一区二区三区| 无码人妻精品一区二区中文| 91美女视频在线观看| 欧美另类丝袜熟女| 熟女91网| 加勒比东京热五月天天堂网| 男人天堂久久日韩| 午夜精品99久久久久传媒| 激情综合亚洲| 乱老女人一区二区视频| 国产极品一区二区三区三州| 国产精品毛片?v一区二区三区| 免费AV中文网在线观看| 男人久久天堂| 久久啊啊| 91九色丨风韵犹存| 东北女人高潮视频| 高精欧美色| 怡春院久久| 日韩99999| 唯美清纯 妖精视频| 97久久久网站| 日韩有码中文字幕女同性恋| 99999亚洲另类| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 操逼逼无码| 为用户提供免费看黄网址在线观看| 日日干夜夜骑| 999九九精品| 人妻天天爽| 91碰碰| 九99久久| 欧美色交| 清纯唯美第一页| 大逼色网站| 91欧美网| 一区二区三区视频| 五月丁香黄色网| 亚洲日韩人妻中文字幕一区| 91国产操逼视频| 内射小黄片| 日韩欧美国产一区二区三区四区| 一区二区三区黄片免费观看| 黄色小视频日本txt| 亚洲欧美国产日本一区二区三区| 久/久精品99看9| 爆乳免费黄网站|