日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
嗯嗯嗯啊啊在线观看| 国产女大学生AV| 麻豆国产av网| 老熟妇乱轮| 欧美九九爱| 亚洲色图 欧美| 大香蕉啪啪啪| 思思热在线视频在线| 色女网日韩| 黄片qw| 密臀在线免费观看| 370p日韩欧美亚洲精品| 欧美日韩亚洲国产中文永久天天看 | 人人操人人操人人人操| 巨乳特殊服务按摩| 五月婷婷激情综合| 国产精品亚洲色婷婷久久久| 加勒比伊人综合| 中字乱伦AV| 精品久久久久久久| 久久久性爱视频| 国产一区二区三区影片| 欧美性生活男人的天堂| 日韩91网| 久草精品一区 | 国产精品色色| 亚洲国产日韩欧美熟妇在线| 欧美成人一级免费电影| 日少妇视频| 色妇91| 视频二区美腿丝袜制服人妻欧美| 中文字幕一区二区免费在线| 欧美日韩日产免费网站看| 欧综合网| 99re6在线视频精品免费完整版安卓版| 丁香五月综合| 国内偷自视频区视频综合| 久久后入制服| 天天夜夜久久| 久久综合久色欧美综合狠狠 | 久都青青视频| 中文字幕亚洲欧美在线不卡| 亚洲欧洲综合视频在线| 炮色五月| www.天天干| 97福利视频| 久久亚洲AV无码专区首页| 99re99| 欧美 亚洲 另类 综合| 91大学精品激情戏| av中文字幕在线熟女| 国产亚州高清国产拍精| 色婷婷丁香五月| 能看的av| 啊啊啊轻点在线观看| 久久欧洲| 大香蕉一区二区在线观看.| 91被操| 大香蕉线| 天久久久噜噜噜久久国产精品爽爽 | 91久久久老司机| 十八禁网站在线| 久久久精品国产亚洲伊人| www四虎| 亚洲日韩青青草色月| 熟女网站最新| 国产精品免费久久久久久久久久| 国产一级操B视频| 色色色色日本| 国产偷拍自拍在线视频| 岛国成人av在线播放网址| 国产高清26uuu| 亚洲精品99| 熟妇人妻一区二区| 99操逼| 国产有码一区| 天干天干天干天天做| 五月婷亚洲精品天堂| 亚洲午夜蜜臀| 综合影院永久入口国产| 精品久久人妻成人网| 无码99| 久神马| 97神马久久| 翔田千里AⅤHD无码| 天天插天天操| 人人妻人人色一区二区三区| 欧亚乱色熟女一区二区| 青青久操| 欧美 亚洲精品首页| 91美女视频在线观看| 国产路线专区| 国产精品探花在线| 日日夜夜草草草| 一二视频神马久久传媒| 亚洲国产成人精品999| 欧美视频在线视频免费va| 最新精品久久蜜桃| 日韩极品无码B| 啪啪一区| 性欧美第一页| 91丨九色丨国产丨人妻在线 | 大色综合| 日本三级久| 神马九九九| 99在线免费公开视频| 亚洲有薄码区日本系列中文字幕| 中文字幕伊人| 精品视频一区二区| 夜草欧美| 国产夜夜艹| 精品十八在线观看| 久久大香蕉| 99re视频在线观看这里只有精品| 夜夜嗨一区二区三区三州加勒比| 亚洲综合另类小说色区亚洲成av人片在www| 午夜AV人气不卡| 91国产丝袜足交精品视频| 三级色影综合网| 日韩在线观看中文字幕视频| 国产91丝袜 在线播放| 91大学精品激情戏| 亚洲资源站| 国产精品激情久久久久久久| 在线洲亚线| 国产精品无码久久久久2025| 亚洲码和欧洲精品激情系列| 人人 操人人 操人人| 欧美亚男人的天堂| 波多野结衣AV无码一区| 99综合自拍| 人妻干天天| 69视频福利导航| 在线午夜成人无码视频| 大香蕉色网| wwwxxx日本爽| 中文字幕精品专区搜索结果91| 国产 亚洲 丝袜 制服| 久久亚洲日韩国产欧| 国产AV久久久蜜爱影集| 超碰97国产欧美| 久久婷婷一区二| 日本羞羞的视频在线播放| 久久水蜜臀亚洲AV无码精品| 无码av永久免费专区网站| 91天天综合在线| 久久,精品一二三| 快播久久人人aV| 自拍鲍鱼一区在线高清观看免费| 色汉综合| 欧洲精品网| 欧美精品999| 久久久久久久六六 | 精品国产www久久| 2017大香蕉国产精品久久| 久草免费在线视频| 国产精品久久久久无码Av网曝门| 神马久久69| 中文字幕aⅴ在线视频| 美女好片色日本| www.色婷婷色综合| www国产无码| 97视频在线视频| 91美女丝袜诱惑视频| 色天使亚洲综合在线观看| 免费男人的天堂| 天天干2区3区| 婷婷综合网| 一级做a爰片久久毛片图片| 国产又粗又长的视频| 富二代亚洲精品99| 99视频内射三四| 伊人久久综合影院精品久久久| 学生妹天天看| 97日视频| 免费啪啪啪网站18岁| 女人天堂av在线播放| 男人的天堂在线| 欧美制服网站美腿丝袜| 青草视频在线看看看看看看看看看| 日韩激情电影中文字幕| 亚洲无码国产探花在线观看| yazhououmeizongya| 亚洲色图 欧美热图 清纯唯美 另类自拍| 手机在线视频国内精品| 少妇六月天| 亚洲丁香花色| 精品久久久久久中文| 狠狠干91| 天美传媒AV在线| 超碰一区二区| 久久久久ab| 亚州操操穴网| 久久手机好看网站| 亚洲男人的天堂亚洲| 天天日B夜夜干B时时操B| 亚洲无码精品AV久久久| 少妇干B| 青青草五月份天| 麻豆精品三区视频| 超碰97首页| 级品肉射| 中文字幕综合人妻| 2019午夜福利视频| 91影视亚洲| 亚州春色| 后入福利视频| 久久久久久中文字幕中文字幕最新| 免费簧片在线观看| 囯产操逼片| 久久免费精品视频免一| 国产女性无套 免费观看| 69一区二区三区 | 不卡中文字幕aⅴ在线| 啊啊啊好想要| 男人下部插入女人下部| 国产久久视频| 天天天乱色综合全| 蜜桃久久久久久久久久久久| 69丨亚洲丨精品丨入口免费播放| 日本熟妇自慰性高潮一区二区三区| 色香在线| 高清孕妇孕交 交孕妇| 超碰 国产熟女精品一区| 久久久天美| 在线小说视频一区| 久久国产精品91| 人妻熟女av国产网站| 操婷婷逼| 中文字幕日产av人| 亚州欧美一区| 午夜精品久久一区二区| 成人性爱av| 久操视频资源站公开| 天天躁日日躁XXXXYY| 日本黄色精品专区网站| 强奸国产在线| www.91色综合| 日韩 欧美 校园一区| 国产风韵犹存熟妇三区| 久久久久久久91| 91成人高清在线观看| 久草视频在线视频在线视频在线观看| 超碰在线成人| 国产精品永久免费10000| 欧美色视频在线| 久久久精品无码亚免费| 极品色社| 国产精品国产| 亚洲色图综合| 日操粉逼逼| 九九热九九热| 欧美综合综合| 福利视频一区二区微拍| 一区二区三区四区五区高清无码永久视频| 91久久久老司机| 丝袜美腿av女优在线| 收看日本人日bb| 极品极品色影院| 中文字日本乱码| 激情婷婷丁香网| www熟女乱伦com| 婷婷啪啪| 午夜久久久| 欧美AAAA黄片| 丝袜六区| 欲色综合| 91精品人妻电影| 人妻精品一区二区全免费| 精品熟妇视频一区二区| 黄色AAAAA欧美| 中文字幕日韩国产传媒欧美精品| 香蕉精品二区二区| 8050午夜少妇无码| 啊啊啊好疼| 亚洲国产一区二区日韩专区| 日日日啊啊啊| 97欧美视频| 婷婷五月天色色| 亚洲男人的天堂网| 亚洲啪啪视频一区二区| 一区二区视频你懂的| 91色综合| 三级片大波波| 日韩性爱一级片| 碰碰在线视频| 天堂成人网| 国产精品久久久鸭无码的功能| 干B| 在线岛国新天堂8| 夜夜中出国产| 三上悠亚在线毛片91| 天天射影院| 蜜屁av| 伊人久久婷婷| 亚洲91色| 日韩美女久久一区二区三区| 极品国产内射| 97中文字幕色| 3d成人精品一区二区| 亚洲资源网| 亚洲αv一区二区三区| 狠狠爱AV| 91在线视频免费中出| 成人精品无码| 大香网伊人久久综合网eew| 久久透逼视频| 99热18这里只有精品| 日韩欧美一级特黄大片| 少妇蹲下露出大唇5| 丁香五月天视频| 极品色| 亚洲免费97免费| 综合在线导航一区| 色爱天堂| 亚爽爽爽爽爽爽爽爽| 无码操逼网| 天天综合网视频91| 午夜天堂网| 一类av片在线看| 中出20p| 啊啊啊 在线观看| 国产精品高潮呻吟av久久4虎| 丝袜无码a片| 亚洲乱码国产乱码精网站| 怡春院久久| 天天综合有色网| 亚洲欧美中文一区二区三| 九九九九精品在线| 久久这里精品国产99丫e6| 亚洲无码超碰免费| 国产又粗又长又大的视频| 97国产超湿| 久久精品久久九九精品| 天天射夜夜骑| 亚洲影视第一页| 综合久欧洲| 精品人妻美妇91job| 欧美色女人| av线电影| 午夜福利久久久噜久噜久久综合 | 青娱乐福利99| 超碰欧美97资源| av婷婷色网| 婷婷AV一区二区三区| 夜草网站| 99啪啪| 亚洲五月婷| 久操91视频| 97ai亚洲| 久久久久久九九九九九九| 人妻天堂综合网| 十八禁的黄污污免费网站| 午夜美女福利视频| 色吧91| 日产精品久久久一区二区| 久久久久久久久久久999| 五月丁香网站| 亚洲欧美经典一区二区| 日韩一级特黄av毛片| 亚洲综合另类| 欧美色性情| 日本97久久| 和协影院中文字幕三区| 91亚州欧美| 国产欧美伊人| 亚洲青青青视频在线| 亚洲欧美中文日韩视频中国语 | 97色色色综合网站| 91美女在线视频| 久久这里都是精品| 国产久久久9999| 91一区二区| 色吧综合网| 欧美精品自慰系列寂寞少妇 | 按摩中文字幕| 热天堂一区二区| 日韩熟妇二区| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 日韩色| 中文精品一区二去| 人妻偷拍一区二区三区| 91视频精品| 黄色无码高清黄色无码网站| 啊啊啊啊啊啊在线观看| 久久精品人妻一区| 国产AAAAAABBBBB| 国产91福利小视频在线观看| 亚洲国产精品无码AV久久久| 在线观看成人性爱免费小视频| 一级AV性爱| 中国操逼无码| 色综合天天| 日韩亚洲中文字幕在线| 日韩欧美亚洲一区二区三区影院| 性做久久久久久免费观看软件| 日韩黄色一区二区三区| 久久99热这里只频精品6学生| 99热免费| 人人爱夜夜爱| 欧洲自拍第一页| 亚洲综合有码| 91精品国产91久久青草 | 91色碰| 97超久碰| 好爽要喷了| 在线视频资源| 亚洲精品乱码线路中文字幕| 中国乱伦一区二区 | 久久亚洲一区女同性恋中文字幕| 91色交| 99老司机精品视频在线观看| 国产成人综合网| 欧美78p| 91丝袜熟女| 精品人妻15区| 国产91av在线播放| 一区在线国产播放| 欧美黑人与女人91~| 亚洲视频二区 | 97超碰磁| 亚洲欧洲综合视频在线| 欧美日韩人人精品| 五月天人妻综合| 欧美综合自拍| 8050午夜少妇无码| 91色图片| 欧成人精品H无码| 精品一区二区成人| 亚洲日本男人天堂网| 97欧美色综合| 亚洲熟伦熟妇AV无码春色| 日韩av一级黄片| 老熟女区| 日本一区二区三区四区五区六区七区八区九区| 91伊人久| 久久黄色网址| 丝袜美腿操av| 久草网站免费在线观看| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 91内射| 91狠狠综合久久久| 五月天欧美色图| 性无码专区2020| 色婷婷电影网| 青青草好吊| 日韩精品在线放| 亚洲精品色| 美国三级日本三级久久99| 一级乱伦网站| 猛交交| 欧美—性—交—色| 最新欧洲欧美日本激情网站| 性欧美天天| 99视频这有这里有精品| 精品妇操一区二区三区| 另类图片欧美激情综合| 91熟女熟妇视频网站| 超碰久草| 无码日韩网站| 天天搞欧美| 日本视频在线观看污污污| 亚洲欧美日韩有码| 色吧5亚洲| 大香蕉伊人色偷偷在线| 啊啊啊啊啊啊在线| 日韩AV片| 97精品免费视频网站| 丁香五月电影| 九九九网站| 密桃99999| 亚洲AV无码乱码| 久久极品一区二区| 女沟厕偷窥piss小便| 爱爱动态120秒| 亚洲美女AV无码| 大稥蕉免费视频这里只有精品| 91性片| 中文字幕在线观看丝袜| 欧美超碰97| 国产久久久9999| 无码137片内射在线影院| 任我爽视频在线观看| 精品人妻一区二区三区四区石在线| 韩国女主播青草福利视频| 国产成人欧美精品在线| 97超碰资源网| 久草视频分类在线| 亚洲丝袜少妇在线| 1区2区3区中文字幕日韩| 亚洲h片在线免费观看| 桃色人妻在线视频| a在线观看| 午夜毛片亚洲精品片国产久久久| 亚洲男人的天堂一区二区| 十八禁视频一区二区| 四虎在线播放| av大香蕉| 嗯啊视频免费在线观看| 中文字幕av一区二区三区人妻少妇 | 伊人久久综合精品欧美| 国产suv精品一区| 久久极品一区二区| 亚洲免费成人在线高清无码视频| 激情文学亚洲| 玖玖爱综合| 日本操BAV| 97色碰| 少妇99| av优播| 国产精品无码av| 综合亚洲欧美| 日韩欧美偷拍美女视频| 五月丁香亭亭| 国产 亚洲 丝袜 制服| 久久岛国| 欧美色图在线视频少妇| 97蜜桃综合| 国产精品宅男免费| 亚洲欧美日韩制服另类| 白嫩妹子国产骚| 久久超碰97中文字幕| 亚洲图片欧美在线视频| 色操逼网| 国产精品爆乳懂色蜜乳| 久久风骚城市人| 亚洲视频,小说| 91人妻爽爽人人做人人澡| 国产精品亚洲高清在线| 日韩一级二级三级免费看完整版| 久久精品一区一起草| 目产99999久久999| 91黑丝少妇| 东京热免费视频| 亚洲黄色a级片| 熟女激情综合网| 91高潮| 亚洲图片视频小说| 伊人午夜福利视频| 天天看高清麻豆| 国产污视频麻豆传媒一区二区| 99啪啪| 国产高清无码一区二区三区四区皇冠| 国产女同视频在线播放| 色欲Av人妻精品一区二| 曰韩人妻中文字幕在线| 蜜臀视频网站| 91亚洲综合| 色欲av国内精品久久久久久| 青草精品视频一日本久久久久网站| 91久久国外网| 欧美成人国产精品| 91欧美丝袜| 九九九九97| 国产精品一区二区后入| 9999亚洲精品| 久久综合av| 97丝袜亚洲在线播放| 日韩美女高潮喷水视频| 久久久久久久久久久久久久久久9| 韩日男人的天堂| 99啪| 亚洲色91C| 亚州综合色图| yazhouzaixian| 欧洲一区二区| 密臀视频三区免费网站| 三上悠亚在线毛片91| 大学生美女口爆| 丁香婷婷五月| 手机在线中文字幕国产| 日韩在线观看字幕精品| 91free福利| 国产伦精品一区二区三区视频女| 北京专精特新企业招聘信息| 久久中出在线| 日韩av情韩国爱禁区av一区二区| 麻豆天美AV传媒第一页| 日本色日夜干| 亚洲无码成人精品| 天堂中文资源在线bt| 日韩操人| 蜜桃中文字日产乱幕4区| 一牛一区二区三区久久| 国产女主播视频在线观看| 漂亮人妻被强中文字幕hd| 国产精品日日摸夜夜添骚逼| 中文字幕精品一区二| 亚洲美女自拍偷拍视频| 天美传媒国产原创中文字幕亚洲欧美另类 | 韩国三级色呦呦| 九九视频黄色片| 唐山老熟妇露脸啪啪叫| 懂色AV一区二区三区| 欧美另类自拍 | 一区二区乱码福利| 91爆操视频| 91欧美高清| 视频二区熟女人妻| 成人线上超碰| 视频分类 国内精品| ,国产乱人伦精品一区二区三区| 97在线青| 91天天| 欧美性爱视频免费一区一A| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 偷拍欧美综合| 中文字幕伊人| 中文字幕美女91| 91超碰人人操| 无码人妻精品一区二区三区九九| 麻豆成人影音在线| 夜间福利片1000无码| 亚洲人成色9999精品久久| 一二视频神马久久传媒| 亚洲av综合伊人久久| 国产高潮AA片免费看| 欧美A√综合网| 亚洲图片欧美| 99色婷婷| 四虎精品亚洲| 福利在线观看一区二区| 青青草精品| 狠狠91| 一区二区日韩欧美久久| 怡红院网站在线视频| 亚洲国产婷婷在线播放| 麻豆影音天美视频| 精品国产av一区二区三区四区入口 | 狠狠色一区二区中文字幕| 亚洲精品九九九| www.超碰| 久久在肏| 蜜桃精品一区二区三区久在线| 色综合一区二区三区| 伊人五月天| 视频黄站| 岛园激情| 超碰9 7女人| aaaa黄片| 天天搞欧美| 日韩女模中文造逼| 日韩电影免费网站麻豆视频| 欧美亚洲另类在线蜜桃| 中文久久96| 乳欲人妻办公室奶水| 国产亚洲精品美女| 欧美大香蕉同搞| 激情人妻另类| 国产 日韩 另类 视频一区爱| 内射卯月麻衣| 丰满人妻av一区二区三区| 色99久草| 狠狠狠狠狠干| 91视频在线观看18| 日本三级小说中文字幕| 91国产操逼视频| 久久的网站啊啊啊啊啊| 日韩中文字幕国产| 亚州中文字幕超碰97| 国产女人和拘做爰视频 | 91大神精品长腿在线观看网站| 96AV久久久| 中文日本免费高清| 久欲AV| 91操人| a'v在线资源| 欧美色一二三| 亚洲女毛多水多21P| 亚洲毛片久久| 午夜性| 国产精品宅男免费| 春色91| 久久熟妇五十路一区| 国产精品999zyz| 日本一线产区和二线产区伦理片| 搡老女人老熟女91老熟女综合网| 国产亚洲 中文欧美久久| 大屁股人妻女教师撅着屁股| 69久久久久久久久久久久久| 国内精品伊人久久久久影院会| 国产99999| 操逼精品视频| 婷婷综合激情| 国产精品探花色| 天堂av最新电影网| 九九九综合精品| 亚洲成人福利电影免费| 78久久| 国产噜噜噜噜噜久久久久久久久| 香蕉综合网| 日本性爱欧美性爱| 密臀在线一区尤物| 亚熟hd视频在线| 91狠狠综合久久久| 久久亚洲欧美中文字幕国语| 欲色综合| 少妇色综合| 中文字幕一区 二区三四五 区日 日骚| 国产极品精品美女视频| 成人性交免费视频| 中文子幕一二三| 亚洲男人的天堂一区二区| 午夜欧美女人操逼| 级做a爱无码性色永久免费| 人妻丰满熟妇av无码区蜜桃| 91熟女综合| 嗯嗯嗯啊啊啊在线免费观看| 国精精品无码一二三区水多多| 成人久久久| 91中文字幕在线观看| 国产精品久久久久久久久久久久久久久久久久 | 亚洲精品无码少妇久久| 人妻干天天| 黑人娇小av在线播放| 91久热| 天天干天天爽| 近亲乱伦一区二区| 级做a爱无码性色永久免费| 夜夜高潮夜夜爽夜夜爱爱一区| 2000亚洲男人天堂| 国产精品熟女AV中文字幕在线播放| 玖玖草久草99蜜月一区二区三区| 国产天美欧美| 99色天堂| 自拍大香蕉乱插| 人人操人人插人www| TS人妖另类精品视频系列| 超碰吊日色| 欧美综合自拍亚洲综合图| 亚洲欧美一区二区不卡视频播放| 97久久久久久久精| 亚洲AV小说| 99国产人成精品| 色噜噜婷婷| 久久综合九九| 久久婷婷五月天| 婷婷五月天成人网| 狠狠综合| 丰满人妻一区二区三区免费,| www色色色com| 人妻AV 中文字幕的| 伊人久久婷婷| 亚洲有码 欧美精品| 一区二区偷拍拍视频| 婷婷久久综合| 天天影视网综合少妇| 啊啊啊啊一区| 殴美,日韩国产伦精品| 精品久久久九九九孕妇| 超碰国产情侣自拍网| 韩国一区二区精品亚洲| 毛片视频白嫩| 欧美精品久久96人妻无码| 久久婷婷在线观看视频| 艳尻美人妻| 国产欧洲精品亚洲午夜拍精品| 欲色啪| 天堂亚洲欧美| 日韩成人高清一区二区| 亚洲精品成人动漫在线| 久久夜黄色无码A级大片| 国产一区二区欧美日本| 婷婷综合| 亚洲综合影视| 欧洲亚洲人人爽爽视频| 97ai亚洲| 国产中出内射一区二区| 欧美色视频在线| 色五月综合网| 精品视频专区| 97在线观看视频| 亚洲加勒比| 再深点灬舒服灬太大了添视频| 手机看av网站在线看| 乱人伦 国语对白:视频直接看| 91扒丝袜综合在线| 少妇蹲下买菜露大唇0| 青娱乐91| 亚洲国产精品有声| 日韩一区二区精品视频| 色牛aV| 福利伊人玖玖国产| 日本欧美成人片AAAA| 97国产亚洲中文在线| 亚洲风情综合网| 国语对白露脸XXXXXX| 欧美熟女操屄| 亚洲男人天堂网久久| 999九九九九国产动| 翔田千里AV无码秘 三区| 在线看片国产精品每日更新| 91丨国产丨白浆| 少妇久久久免费| 狠狠婷婷亚洲中文综合久久| 搡老熟女老女人老熟妇免费视频| 午夜久久一区二区无码中出| 亚洲图片欧美另类综合免费视频大大香| 精品九九九九九| 日韩乱伦视频| 久久蜜色情在线视频xxx免费观看| 麻豆一区二区三区在线看| 亚洲国产91精品一区二区久久| 91丨九色丨东北熟女| 天天操人人操骚逼网站| 久久婷婷电影网| 99操逼| 区自美91| 欧美黄色大片在线观看| 超91综合网| 天堂av最新电影网| 亚州免费啪啪视频| 九九英色视频| 国产1024在线播放| 色蜜AV| 九九九九亚洲| 操逼操操操91| 91青青在线视频| 综合五月婷婷亚洲一区| 久久夜夜夜夜| 成人一道本免费视频| 婷婷色一区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 黑人天8A∨高清网站| 亚州男人天堂| 天天综合精品| 国产精品久久久久9999小说| 操逼网站视频漫画国产| 亚洲精品人伦一区二区| 国产精品视频麻豆入口| 91精品成人| 啊啊啊啊啊操我视频| 色吧91| 18精品一区| 日韩亚洲欧美中文字幕| 国产av白丝| 97在线免费视频| 日韩伦理久 久久 清纯| 色在线视频导航| 美腿色图| 欧美一级美片在线观看免费| 亚洲国成人情色好看电影| 韩国免费播放一级毛片| 欧美亚男人的天堂| 视频一区二区三区精品| 九热大香蕉| 日韩精品一区二区日韩| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 強姦亂倫a| 色噜噜人妻丝袜AV资源| 久久黄色视频一区二区三区| 欧美 亚洲 另类 综合| 日本免费专区| 亚洲春色欧美| 97香焦色区| 中文人妻av高清一区| 二三四区精品| 天堂种子在线www网资源| 春色91| 2000亚洲男人天堂| 多毛小伙内射老太婆 | 8x福利精品第一福利视频导航| 上床不卡网站| 亚洲日韩美女中文字幕乱| 亚洲第一页综合在线| 九九这里只有精品| 人人模人人看| 91欧美性| 一本道综合色图| 激情小说图片亚洲首页| 国产成人精品一区| 国产熟女少妇一区| 国产欧美精选激情视频| 在线观看啊啊啊啊啊| 欧美精品人妻视频| 欧美日韩亚洲一区二区在线观看 | 91超碰人人操| 欧美精品精品一区二区| 蜜臀无码一区二区| 96久久科窝| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 国产一国产一级毛片古装| 青青草国产盗摄一二三区| aⅴ日韩成人电影av在线免费看av大全| 成人性交午夜免费片| 性生活久久久久久久久久| 久草福利在线资源站| 亚洲中文字幕在现观看| 超碰在线1234区| 久久精彩视频9| 日韩三级性| 极品色社| 亚洲性爱无码乱伦av| 国产强奸乱伦无码视频| 91超碰在线观看| 欧美视频第二页| 东京热男人的天堂网| 乱伦av麻豆| 亚洲国产成人精品久久久国产成人一区二区 | 一区麻豆 高清中文字幕| 欧美很很操视频| 国产精品 久久久精品一牛| 99国产女人| 欧美一区二区三区成人性生活| 99国内精品| 久操婷婷| 国产亚洲日本精品在线| 中文字幕第9页萱萱影音先锋| 999国产精品999久久久久久| 欲香欲色天天天综合和网| 久久综合18p| 长长久久曰曰夜夜成人网| 日韩av影片在线观看| 涩涩涩综合| 日本伦乱九九九综合| 午夜在线播放| 色色97爱| 午夜福利合集| 久久久久极品| 熟女精品一区二区在线观看| 美女裸体麻豆天美蜜桃91| 欧美日韩情色一区二区| 丁香久久| 色色五月丁香| 欧美成人黄网色网站| 亚洲第一狼人丝袜美女另类| 黑人精品XXX一区一二区| 欧美天天射| 96久久久久| 久久久极品| 91色亚洲| 久久久久久久| 久久内射| 啊啊啊啊啊在线| 97国产超碰| 91成人18| 91综合色| 午夜福利国产欧美日韩夜夜| 日韩三级伦理中文字幕| 国产午夜精品理论片a大结局| 校园春色五月天| 香蕉人欧美综合| 91夜色| 91免费看一区二区三区| 日韩熟女无码| 色视频蜜乳| 操www| 日日操丁香五月天| 国产 三级自拍| 97人人超| 亚洲五月丁香花狠狠干一区二区三区| 亚洲中文字幕久久无码精品| 国产后入式在线观看| 天躁夜夜躁2021| 九热久| 狠狠操使劲操| 中文字幕一区二区三区字幕| 久久五十路熟女人妻| 综合影视国产无码| 欧美性爱五月天| 女人爽到高潮久久久| 97色插| 欧美白嫩在线放| 丰满人妻一区二区中文| 精品女同一区二区三区| 97碰久久| 黄色片A级一区二区三区| 日韩人妻一二三区视频| 日本操BAV| 久久精品人体AV| 中文字幕88av在线| 日韩人人精品| 女人综合网| 国产一级高跟丝袜| 色婷婷丁香| 午夜欧美J进J出白浆流出久久久| 日韩精品三级片长长久久| 无套后入双马尾| 国产一区二区三区高清视频| 成人a大片在线观看| 婷婷五月天成人| 亚洲城人男人的天堂| 亚州大图综合色图| 91狠狠综| 黄片在线免费在线观看| 久久精品免费| 国产AV天美传媒一区二区三区 | 欧美性天天影院| 天天噜| 成人免费福利在线观看| 中日无幕一二三四区| 国产久久男人天堂| 久久精品国产Aⅴ| 日韩黄色成人性爱| 久草新免费| 男人天堂资源| 91小视频| 一及黄久一点| 久久人妻熟女一区二区| 日韩无码黄色片| 伊人97色天使| 精品国产乱码久久久| av绯色| 91扒丝袜综合在线| 97这里有精品| 欧美人妻一区| 美国久久一二三四| 91老熟女视频| 天天插天天操| 91艹| 国产精品毛片?v一区二区三区 | 97色综合中文网| AA特级绝黄| AV在线资源| 日产操逼| 91校园春色长篇| 午夜视频久久久| 操逼操逼逼操操逼91 | 精品人妻1区| 久草视频制服诱惑| 亚洲精品少妇| 婷婷六月色| 超碰精品97| 亚洲精品国产精品乱码不99| 99精品久久久久久| 欧美色视频在线| 国产AV人人 夜夜人人澡| 精品性爱| 91在线视频免费中出| 啊啊啊好多水| 欧美色三级片91| 精品福利| 九九天堂| 欧美影院一区二区三区| 亚洲nv男人的天堂网| 九久久九九久视频| 色五月婷婷中文字幕| 97伊人超碰| 丁香色五月 97干| 欧美专区17页| 亚洲国产无码精品首页久久久| 天天情欲宗合网| 亚洲精品a人片在线观看视| 天美传媒av在线| 操逼视频免费日韩无码| 丰满人妻av一区二区三区| 欧美日动态视频| 日韩人妻有码免费视频| 欧美91在线+|+欧美| 欧美黄色片在线播放| 九九久久99| 国产美女裸体秘 永久无遮挡| 青青操在线亚洲视频观看欧美在线 | 国产精品午夜福利视频| 宗合情欲网| 自拍丝袜美腿人妻| 亚洲黄色视频在线观看视频| 中文字幕加勒比海高清无码免费视频| AAAA欧美日韩| 97在线观看免费视频l| 亚洲图片欧美制度| 亚洲欧美日韩制服另类| 爽爽爽免费视频| 国产黄色影片在线观看| 天天色踪合| 国产在线精品偷| 夜夜精品视频| 日韩精品99久久久久久中文字幕| 精品少妇人妻av久久免费| 国产精品高朝久久久久久久| 久久草大香蕉| 久久精品国产精品一区| 成熟熟女国产精品一区二区| 91粉嫩萝控精品福利网站_精品影音先锋国 | 91老妇女| 人人操AV| 翔田千里无码一区| 91久久国产综合精品| 国产成人精品日本视频| 清纯唯美亚洲综合| 狠狠躁天天躁日日躁| 亚洲中文字幕精品久久久久久直播| 九九热九九| 亚洲AV无码久久精品蜜桃小说| 探花一区在线| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 91蜜桃传媒精品久久久一区二区| 日本三级久| 操逼逼中文字幕| 黄页| 天天综合网AV91| 99热精品在线| 五月婷婷六月丁香网址| 97亚洲色图| 大香蕉男人的天堂| 婷婷在线视频| 午夜精品五区| 国产一区二区三区高清视频| 台湾佬中文娱乐网久久久久久久久久com | 97国产天堂岛| 91久久久久免| 性爱乱伦网址| 在线毛片片免费观看| 精品一区二区三区蜜桃| 淫乱图区| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 国产高清精品福利| 日韩成人性日韩成人性爱视频在线免费观看 | 好舒服视频| 国产suv精品一区二区四| 日韩性爱视频免费在线| 中文字幕日韩精品久久| 91综合网站| 啊啊在线| 蜜臀无码一区二区| 91在线色| 北条麻妃99精品青青久久| 久久亚洲av成人无码国产| www.大香| 亚洲国产一区二区日韩专区| 丰满人妻一区二区三区蜜桃视频| 大屁股熟女一区二区三区| 91亚州欧美| 后入内射蜜桃臀| 超碰亚洲欧美日韩无| 五月天婷婷色色| 国产综合操逼高清| 老熟妇综合| 亚洲宗合电影| 性色avv| 艳美熟妇先锋一二三区| 国产精品午夜AV完会免费 | a人欧美综合天堂麻豆| 91丨九色丨东北熟女| 国产亚州精品美女久久久免费| AV一区观看| 欧美十八禁视频| 视频国产成人精品日本亚洲18| 精品国产乱码久久久| 人妻夜爽夜夜爽| 另类老少妇| 亚洲中字慕不卡| 91精品国产长腿丝袜美女| 屁股久久久久久久久| 国产视频大全| 综合久久99亚洲人妻中文在线| 91国产大片| 97公开久久| 国产亚洲人妻综合日韩 久久| 九九亚洲视频| 这里有精品| 青青草密桃在线播放| 精品丰满人妻一区二区三区免费观| 91丨九色丨大屁股| 精品一区二区三区蜜桃臀赵总 | 日本新免费二区三区| 九九九九精品一区| 久艹99| 一本大道青青| 亚洲综合在线第一页|