日韩精品一区二区三区在线视频放-无码中文字幕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无码免费| 91网站在线播放| 使劲用力艹少妇视频一区二区 | 在线性黄高清免费视频| 日韩三级性| 亚洲欧美黄| 国产强上视频在线观看| 九九热超碰97亚洲最新香蕉| 天久久久噜噜噜久久国产精品爽爽| 亚洲美女av无码| 亚欧国产无码精品在线| 狠色婷婷久久一区二区三区_| 亚洲动态色图| 97色伦欧美| 校园春色 亚洲| 中国乱伦一区二区| 欧美色自拍| 欧美精品成人在线播放| 啊啊好多水| 热99这里有精品综合久久 | 一区二区三区成人高清视频| 欧美在线大香蕉| 五月丁香激情四射| 五月久久HDAV| 亚洲另类春色| 9久久9综合| 亚洲av青草久久一区二区| 少妇超碰在线| 91精品老女人| 亚洲精品久久久久毛片A片拉屎| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 成人97人人超碰人人| 在线99热| 人人操人人肉久久精品| 日韩草久视频| 久久亚洲中文字幕视频| m欧洲一级午老| 好淫网一二三视区| 九九热午夜欧亚国产视频| 天操老女人| 国产家庭乱伦表演| 免费97视频| 国产宅男宅女在线观看| 福利大香蕉| 中文字幕在线高清男人的天堂| 日本高清一本二本免费不卡| 韩日精品四区| 美女被啪到深处抽搐视频| 屌逼麻豆| 强奸乱伦麻豆| 九九九色| 欧美日韩中国x| 人妻乱仑一区二区三区| 夫妻日逼| 色综合1991| 人妻嗯啊啊在线播放| 2017av无码免费无线播| 欧美精品偷拍| 999国产精品999| 超碰到97情色| 高清有码一区二区| 69视频入口| 中亚黄色三级大片| 国产成人AV麻豆| 天天影视网综合少妇| 日韩精品人妻中文字幕久久久| 欧美在线第五页| 日日碰狠狠添天天爽超| 探花精品 一区二区| 久久人妻97久久久久久久| 园内精品自拍视频在线播放| 日本韩高清无砖码22o| 亚洲 欧美 另类 日韩 人妻一区 | 污到发麻的视频 国产| 国产女s强制榨精视频| 极品AV网站在线观看| www.激情| 亚洲精品a人片在线观看视| 久草大| 日韩乱码Av| 久久riav中文精品| 屁股久久久久久久久久| 伊人青青草久久| 亚洲色综合| 高潮毛片无遮挡高清免费| 东京男人天堂| 亚洲成人在线资源| 欧美 综合 亚洲| 亚洲日韩AV视色| 嫩草影院性色| 免费操逼视频下载| 超97在线精品视频| 日韩操逼HD| 超碰免费97| 亚洲天天自拍| 麻豆区久久久久亚| 夜夜 中文视频rt| 九九九综合精品| www.婷婷六月天| 欧美精品 - 91爱爱| 国产福利精品98视频| 超碰97资源网亚洲| 四虎AV在线播放| 熟女高潮合集-永久久久-成人AV| 熟妇最新先锋一二三区| 91蜜臀熟女| 久久丁香| 丝袜美腿欧美| 欧美性爱另类综合| 中文字幕 国产 精品| 曰韩精品视频一区二区| 欧美日韩国产高清在线一二三区| 午夜无码精品免费看性色| 免费观看网黄| 国产丁香精品露脸视频| 亚州综合| 午夜福利免费精品视频| 久热一区二区| 天天伊人| 免费精品无码一级毛片牛牛影视| 精品国产99999| 色原狠狠天天天| 91欧美丝袜| 麻豆精品三区视频| 欧美大片一区二区三区| 国产天天噜一噜久久久| 99精品无码| 国语精品av| 中文字幕一区二区三区50路| 99久久精品国产系列| 亚州欧美色图| 亚洲精品人妻在线| 亚洲97成人在线观看| 被男人吃奶很爽的毛片| 国产人妻天天干精品| 日本操逼视频免费| 久久这里是精品| 国产小u女在线观看| 亚洲成?V人片在线观看福利| 怡红院一区二区熟女人妻| 激情看片网站| 啊啊啊啊啊好大好舒服想要| 亚洲人人夜夜澡人人爽| 搡老女人老熟女91老熟女综合网| a一区二区三区乱码在线| 在线观看精品国产免费| 亚 欧 美 综合| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 91色黑人少妇| 人妻另类| 草莓精品视频在线免费观看| 黑人精品成人一区二区三区| 欧美日不卡| 天堂射| 欧美久久婷婷| 美女91| AAAA欧美日韩| 大香蕉专区| 女人天堂AV五区在线| 亚洲熟女乱色| 视频在线观看青青99国产| 大香蕉宅男伊人| 精品十八在线观看| 久久曰曰| 少妇一级无码精品| www久久国产精品| 国产精品盗摄 偷窥盗摄| 欧美|91色综合| 亚洲黄网在哪免费看| 色综合网1| 国产精品网站www| 一区二区亚州激情久婷婷欧美| 黄页| 无码免费精品高清| 日本 免费 一区二区三区 久久香蕉 | 丁香五月影院| 天天综和| 人人干人人操人人爱| 无码人妻1727| 亚洲精品 欧美精品| 色妺妺AⅤ| 国产一级特黄大片处女| 亚洲图片欧美日韩| 亚洲午夜精品久久久中文影院| 亚洲综合91| 干婷婷综合网| 欧美女同在线| 把腿张开老子CAO烂你| 麻豆国产原创AV色哟哟| 美女91在线| 久久啊啊啊| 欧洲一级性爱视频在线观看| 欧美视频激情久久久久久| 超碰人妻久久| 亚洲少妇喷视频看| 欧美性夜| 日本一级二级三级网站| 天堂麻豆天美| 韩国一级婬片A片无码天美 | 2020中文字幕在线| 操高情无码| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 波多野结衣先锋影音| 水澄无码AV| 成人三级片一区二区三区视频| 啪啪资源网| 欧美精品 - 91爱爱| 超碰免费人妻在线| 91丨九色丨东北熟女| 久久久久久免费电影| 在线岛| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 激情熟女12P| 色女综合| 亚洲第一精品在线视频| 丝袜高跟澳门91视频| 秋霞久久亚洲精品成人| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 成人av在线播放| 色九九九| 久久久免费的精品| 久久精品国产97欧美精品亚洲 | 午夜九九| 国产精品大香蕉| 丰满人妻-区二区三区免费看 | 国语精品对白| 95精品在线| 无码人妻1727| 精品久久久久,69国产成人精| 啪啪自拍九九综合| 射欧美综合| αⅴ天堂| 九九九精品美女| 一品道视频一区二区三区| 女人天堂av在线播放| 性感美女91影视| 八戒无码国产午夜福利| 亚洲人人夜夜澡人人爽| 69精品少妇一区二区三区蜜桃| 亚洲熟女综合一区二区| 午夜欧美J进J出白浆流出久久久| 熟女乱伦A| 国产精品对白自产拍| 97超碰国产精品| 天天综合~91| 人人操人人精品影片| 九九内射在线| 69国产对白刺激| 精品一国2| 狠狠综合| 国产精品福利资源在线尤物| 5252色欧美在线男人的天堂| 久久国产视频专区一二三| 懂色天天爱天天日天天射天天澡| 97伊人| 青青草大香蕉在线视频| 亚洲最新av无码成人精品区| 熟妇女伦乱视频| 亚洲自拍欧美国产首页网曝| 成人av动漫在线观看| 最新无码国产| 欧美色91| 亚洲污污网站| 成人天天看站长推荐| 欧美很很操视频| 久久国产AⅤ| 一本大道久| 97免费视频网| 中文字幕日韩国产传媒欧美精品| 久久高清欧美国产| 吖在线不卡一区二区国产剧情| 日韩三级av片| 人人妻天天做天天爽| 午夜福利在线视频1000| 极品美女福利在线观看| 老司机午夜福利视频一区二区| 日韩精品中文字幕二区| 中文人妻av高清一区| 国产精品伦理| 男人天堂无码| 久久噜| 色诱中文字幕| 后入美女国产| 亚洲高潮少妇| 中文字暮97| 一,爱啪啪,在线免费视频| 丁香五六月啪啪| 色香天天| 99re免费| 少妇久久久久久久久| 69久久| 九九九九免费高| 亚洲综合在线高清| 久久婷婷在线观看视频| 五月香婷婷| 中文激情网| 久久婷色| 性色一线| 91色艳| 中文字幕二区日韩天堂| 殴美牲| 91丝袜人妻| 久操在97| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 欧美亚洲影视| 亚洲熟妇熟在线电影视频| 亚洲精品久久久久久久久豆丁网| 久久久人体| 精品一区二区啪啪啪| 少妇超碰在线| 白嫩嫩一区| 开心五月激情网| 99热精品在线| 懂色综合久久久| 天天天天天超碰| 91操人| 啊啊啊啊网站| 亚洲欧美人妻| 日韩综合无码色欲vv| 欧美日韩激情无码专区| 东京热精品97综合网| 亚洲男人天堂2013| 在线v中文字幕一区二区三区| 九九这里只有精品| 国产福利夜| 天天狠| 亚洲性综合9| 亚洲永久永久永久永久一级一级一级精品 | 操逼逼一区视频| 中文字幕天天天天天| 无码视频一区二区| 蜜臀久久99精品久久久久电影| 91免费看一区二区三区| 手机午夜电影神马久久| 久久婷婷热| 久久国产精品91| 日韩草久视频| 亚洲国产精品乱码在线观看| 国产久久久久久| 96麻豆精品一区二区三区| 男人的天堂VA| 足交视频老司机| 国产精品电| 传媒在线观看一区二区三区| 国产午夜精品在线观看| 黄片www.| 少好三P| 国产网站在线播放| 国产二区三区免费视频| 97亚洲欧美| 久久风骚城市| 91精品人妻偷情| 一本一道波多野毛片中文在线| 色综合av男人天堂| 人妻加勒比东京热| 日日天天久久啊啊aaa| 亚洲限制级在线| 亚州国产成人精品女人久久| 午夜男女爽爽大片免费观看| 亚洲夜夜欢无码一区二区| 久久久影院| 日韩淫色网| 欧美人妻制服| 日韩欧美午夜视频在线| 啊啊啊好大好湿| 草草影院日本第一页| 亚洲美女精品九九视频| 内射中国少妇高清视频免费视频| 亚洲色图日韩精品| 中文字幕少妇色 | 国产乱人伦AVA麻豆软件.| 精品视频日日夜夜| 99AV| 96免费视频在线| 免费中文在线| 欧美性第一页| 亚洲成人在线乱码色午夜| 欧美情色男人的天堂| 五月婷婷色色| 日本肏逼视频在线观看| 美国一区二区三区视频| 天天日夜夜爽| 亚洲91网站| 久九色| 一区二区视频在线播放| 色爱欲亚洲| 五十路熟女人妻一区二区在线观看| 日韩精品一区二区日韩| 啊啊啊好舒服好爽啊啊啊视频| 天天做天天爱| 天天操天天插| 亚洲AV色图一区| 成人av影院在线观看| 一本正道久久熟女| 清纯唯美综合亚洲| 日本亚洲熟女视频| 亚洲日韩精品在线播放| 日本操逼视频不卡直接放| 91综合色噜噜| 精品无码不卡视频| 26uuu国产成人综合| 乱伦a片视频| 美国黄片aaa| 草莓精品视频在线免费观看| 日韩精品人妻一| 一区二区三区黄色片a| 秋霞一级A片黄色视频| 综合亚洲网| 蜜桃视频成a人v在线| 97精品中文字幕| 国产无马视频| 999国产精品999久久久久久| 99热这里是精品| 中文字幕激情小说| 色悠久久久av| 日韩视频小说在线观看| 亚洲官网在线| 一级免费精品| 91精品人妻一区二区三区蜜臀| 欧美综合另类| 波多野42部无码喷潮在线观看| 丁香色狠狠色综合久久小说| 欧美亚洲尤物久久| 久久激情网| 人妻夜夜爽天天爽麻豆三区网站| 91 亚洲情侣偷拍 久久| 91 丝袜在线观看| 久热热| 亚洲国产精品无石码久久| 人妻精品视频一区二区三区| Blackedraw视频一区二区| 97碰在线视频| 97精品久久久久中文字幕| 日韩99999色| 久热婷婷| 欧美72网页| 亚洲校园激情| 在线洲亚线| 婷婷国产精品一区二区| 一本色道无码DVD中文字幕| 99国产在线 精品 视频| 九九热在线视频| 99国产精品久久久久久久成人热| 亚洲不卡一| 91被操| 九九久久99| 色婷婷婷五月天激情四射| 青久久| 亚洲人码13| 日本阿v天堂在线观看| 日本www操操操| 人人操AV| 一本一道波多野毛片中文在线| 97在线资源| 男人的天堂2019AV| 黄色一区二区秘书性感| 麻豆久久一区二区三区| 粉嫩久久久极品| 插入综合网| 欧洲免费一区二| 综合欧美日韩在线| 亚洲精品97久久| 狠狠久久亚洲欧美专区| 26UUU欧美激情一区二区| 亚洲精品一区二区精品| 国产农村妇女精品| 日本欧美亚洲高清在线看| 99啪啪| 蜜桃臀AV在线| 色月天AV导航| 久久久免费一级黄片| 夜夜 中文视频rt| 99精品久久久久久久婷婷| 日韩大香蕉AV影片| 日夜久久久九九九久| 91丨九色丨大屁股| 97色伦欧美| 欧美日韩国产精品久久色婷婷| 色人久久| 开心五月婷婷激情| 日韩一级特黄av毛片| 色香综合| 亚洲淫乱骚妇AV| 天天日B夜夜干B时时操B| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 99久久婷婷国产综合| 夜夜狼人妻| 另类专区在线观看| 色啪网| 久久久中文版| 国产大片精久久久久久| 综合av影片| 狠狠干精品一二三四五六2022| 91超级碰碰| 一区二区三区精品视频| 久久av成人无码免费| 国产亚洲色婷婷久久99精品91| 久午视频| 麻豆国产97在线| 免费岛国一级片| 一区三区啪啪| 国产精品经典一卡久久久| 五十路人妻在线| 人妻精品一区二区三区| 乱论91| 亚洲 中文 女同| 欧美成人贴图| 久久久97| 综合婷婷| 怡红院成人av| 亚洲AV秘 精品久久老牛影视| 国产精品久久久视频| 春色校园综合网| 亚洲综合贴图91 | 久久r精品| 亚州综合在线| 久久直播国产| 大香蕉丝袜一级片| 国产人妻一区二区三区欧美毛片| 日韩欧美中文字亚洲慕| 97国产人人| 国产91精品在线免费| 激情熟女12P| 久久精品国产96精品亚洲拳交| 江都AV在线| 亚洲综合小视频小说在线观看| 东京热视频网| 亚洲一卡2卡3卡4卡乱码网站| 欧州色图区| 欧美日韩222| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 超碰国产精品久| 亚洲精品一区中文字幕乱码| 新97国产超碰| 国产亚洲深夜激情| 啊啊啊啊在线播放| 爱妃国产亚洲视频中文字幕| 亚洲情色 自拍| 亚洲97久久精品亚洲| 日欧亚洲二三区大片不卡| 色综合色综合网| 亚洲日韩精品久久久久一区壹牛| 国产欧美日韩在线观看麻豆传媒公司 | 亚洲系列第一页| 黑人精品欧美一区二区蜜桃| 97精品视频免费| 色综合久| 国产一区二区三区视频在线看| 偷窥自拍亚洲色图| 色色色999| 艹精品| 亚洲学生妹高清av| 欧美影音在线| 熟女自慰久久久| 欧州一区二区三区四区| 在现视频女上位好爽| 97超碰中文在线| 26uuu国产成人综合| 欧美亚洲厕所精品偷拍91 | 亚洲人精品久久久| 一区二区不卡| 日韩在线人妻网站| 久久久久国产精品喷潮免费观看臀 | 超清福利精品视频在线| 综合九九| 97色色婷婷| 清纯唯美亚洲| 麻豆91熟妇人妻中文字幕茄子| www.99热在线只有精品| 天天干一干| 校园春色AV天堂| 天天综合日韩网| 久久久人妻| 欧洲精品欧洲精品| 蘋果手機免費看成人Av| 老女人老91妇女老热女| 久久原创中文| 亚洲色棕合| 日韩无码人妻中字久久三区四区| 日韩99神马视频播放| 亚洲性爱高潮影院| 婷婷色香| 亚洲精品国产拍免费91在线| 男人的天堂kva| 日本阿v天堂在线观看| 国产无码成人无码| 91在线美女| www.婷婷五月天| 国产高清精品一区二区三区毛片| 东京热亚洲一区二区| 久久五月份| 一二三四视频在线社区中文字幕| 人妻 欧美亚洲| 欧美成人国产精品| 丰满人妻-区二区三区| 福利视频网站| 国产日韩欧美亚洲精品95| 久久久久久久国产视频| 丝袜剧情| 3P乱轮视频| 2019天天干天天操| 岛国网址国产 | 久久草草欧美精品| 国产精品一区二区三区免费视频| 国模无码人体一区二区三| 久久男人天堂| 一本色道久久综合亚洲二区三区| 丰满欧美放荡少妇在线| 粉嫩久久久久| 果冻传媒A片麻豆熟妇人妻| 伊人网在线观看| 狠狠躁AV| 你草精品在线视频| 日本天堂在线播放| 欧美黑人168页欧美黑人167| 人妻少妇精品久久久久久| 亚洲高清欧美总合| 屌逼传媒| 91综合色噜噜| 色色色欧美| 大茄子熟女AV导航| 熟女自慰久久久| 亚洲 欧美 另类 日韩 人妻一区| 手机av亚洲丝袜美腿日韩第一页二页| 欧美日动态视频| 综合色好色| 中文字幕欧美日本乱码一线二线| 青娱乐蜜桃臀AV色婷| 动漫爆乳3D奶水一区在线观看 | 亚洲综合九九| 俺去也婷婷| 久草新免费| 久9久9久9久9久9久9| 97天天| 激情无码日韩| 九九热精品视频在线观看| 国产怡红院| 国内一区二区三区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | jizz啪啪| 奇米狠999| 26uuu欧美| 91国产精品在线看| 欧美在线综合| 蜜臀久久99精品久久久久久酒店 | 久久久久久九九九九-美女久久久久久久-成人AV | 国产精品久久久久久照片| 婷婷亚洲综合| 久久久久深夜无码| 欧美极品美女aaaaaa级黄片| 怡红院一区二区熟女人妻| 欧美精品在线观看| 春色综合网| 在线无码操| 啊啊啊啊啊啊啊在线| 天天综合-91入口| 国产成人在线观看综合| 色综合 加勒比| 最新中文字幕精品在线| 性爱AV天堂| 无码人妻一区二区三区色欲aⅴ | 手机在线视频国内精品| 日韩精品99999| 日本媚薬中文字幕在线| 99亚洲精品| 日韩三级av片| 国产精品老师| 久久内射| 观看免费区二区三区二| 超碰日韩人妻| 久草综合视频| 中文字幕日本久久| 女色综合| 亚州九九九精品视频| 操高情无码| 91日韩网站| 伊色综合天堂色97| 内射小黄片| 色婷婷婷五月天激情四射| 亚洲成a人片在线观看中文!!!| 天天综合色电影| 黑人操一区二区| 亚洲一区日韩精品中文字幕| 福利大香蕉| 蜜桃av综合网发布| 永久免费av无码网站国产app| 亚洲一区亚洲天堂| 91美女中出| 久久永久无码人妻视频| 91女优在线观看| 水澄无码AV| 欧美一级黄片免费播放| 欧美翘臀视频网站一区二区三区| 亚洲欧美日产国产91毛片| 志村玲子视频一区二区| 免费的黄片wwwwww| 久久这里只有精品9| 综合激情一一91| 亚洲欧洲第二视频在线观看色图| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 婷婷香蕉欧美在线一区二区三区| 抽插无码高清一区| 97人妻免费中文字幕| 日韩精品一区二区人人人| 日本精品久久久久久久| 亚洲视频,小说| 97网址www| 黄色网址久久精品欧美喷水| 久久性视频| 三男一女不戴套的A片| 精品欧美日韩在线观看| 亚州成人a∨| 欧美久久毛片基地| baisiav| 日韩啪啪网| 夜夜操美女| 国产操逼视频在线观看| 久久久9 9 9精品| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 久久久9品一区二区三区| 国产成人亚洲精品自产在线| 国产精品麻豆成人AV艾秋| 婷婷五月天av| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 成人黄页| 97超色| 99热18这里只有精品| 欧美最大综合网| 久久男人网| 色偷综合| 亚洲日韩精品一区二区| 青青草综合在线| 可免费观看的av毛片中日美韩| 人乳av| 亚洲人妻在线一区| 日本五十路熟女一区二区| 久久6热视频免费观看| 天天射网| 亚洲操操操无码| 69少妇一区二区| 婷婷五月天网| 国产乱青青草久久| 精品午夜福利| 丝袜综合色图| 国产成人在线观看网址| 午夜小电影在线插入淫高潮| 凸凹视频在线观看| 人妻插插人妻人| 九九av| 综合网少妇| 艹比视频国产精品| 欧美色图片91| 极品尤物女神在线观看| 91在线美女| 超碰成人人人爽人人爽| 99熟女| 欧美青青视频| 蜜乳AV.COM| 日欧美色| 91精品久久久久久| 综合色色婷婷| 五月天九九日国产精品一区二区三区| 999久久久免费精品国产牛牛| 97婷婷色| 久久系列| 宗合情欲网| 操www| 中文字幕AV片| 91小视频| 日韩欧美水蜜桃人妻| 激情五月天插| 日日日啊啊啊| 美国一区二区三区视频| 中文字幕一区二区三四五区日日骚| 性爱Av免费| 日韩不卡网操逼中文字幕日韩| 国产AAAAAABBBBB| 91肏屄网| 一区二区精品日韩欧美在线观看| 91欧美偷拍| 国产区91柔拿会所技师| 99视频自拍区| 五月天伊人| 成 人片 黄色大片| 欧美亚洲清纯| 中文字幕视频在线观看一区二区| 精品视频一区二区| 蜜桃传媒一区二区亚洲| 五月丁香社区婷婷日韩欧美精品影院| 日本免费二区三区| 男人久久精品| 亚洲精品丝袜-不卡成人免费……| 国产精品久久久亚洲第一牛牛_在线观看 | 亚洲se91| 久久久九九| 手机在线人成免费视频| 99re久久| 天堂综合| 欧美中文字幕男人天堂久久精品 | 炮色五月| 无码视频黄色网战| 日本成人A片免费看| 久久久555| 超碰97资源网亚洲| 91jk色拍| 色91综合网| 人人妻人人狠人人| 久久精品日韩| 性色AV蜜色av色欲av| 极品美女嘿咻| 精品夜夜澡人妻无码AV| 一级一性爱免费视频| 九九操久久国产免费视频| laoshunv91| 校园春色综合色| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 99热思思| 久久久久久久一级黄色打同平台| 国产欧美日韩在线不卡第一页| 综合久久六月久久婷婷| 三男一女不戴套的A片| 色网色网色网色网色网色| 色综合1991| 97超碰人操| 99re6在线视频精品免费完整版安卓版| 91扒丝袜综合在线| 97久久精品亚洲| 99青草| 成人A片男人的天堂| 99热在线不卡| 精品制服美女中文一区二区三区| 亚洲欧美91√| 夜夜高潮夜夜爽国产伦精品| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 91亚州| 污污污8888| 欧美性,色九九| 在线人妻熟女一区二区三区四区五区| 91xingse| 日韩人妻网站| 免费一级欧美片片线观看| 秋霞一级视频在线观看免费| 97精品在线| 久久一区二区三区入口| 日韩精品影视| 午夜理论片在线观看免费| 天天躁狠狠躁av| 亚洲精品aa久久伊人| 久久透逼视频| 高清成年美女黄网站免费大全| av天堂电影网| 久久成人国产精品| 婷婷综合激情| 国产第二页| 国产丰满少妇久久久精品影院| 日韩欧美亚洲国产日韩| 色97综合中文字幕| 久久久久亚洲熟妇熟女| 九九久久精品| 97在线播放 | 99热婷婷一区二区三| av在线观看不卡网站| 国产精品老熟女一区二区| 婷婷探花久久精品一区| 中文字幕乱在线伦视频中文字幕乱码在线 | 激情文学小说一区二区 | 久热这里只有精品9| 乱伦1色页| 亚州操操穴网| 老熟女综合| 日本在线一二| 久久伊人影院| 久久精品欧美一区蜜桃| 欧美日韩狠狠爱| 亚洲欧美精品一区天堂久久 | 国产十八禁视频| 九九综合九九综合| 天操天操夜操夜月操月年年操| 玖玖草久草99蜜月一区二区三区| 精品久久久久久AV无码| 97在线无精品| 亚洲欧洲日韩中文字幕一区| 国产精品久久久啊| 人妻久热在线| 欧美激情性爱视频网站| 天天摸天天舔天天操| 亚洲视频精选| 96爱综合| 内射小黄片| 亚洲资源网| 91九色在线| 综合另类| 日韩亚洲97| 天天干美少妇一区| 国产在线激情视频| 欧洲亚洲人妻无码久久三区四区| 国产精品一区二区三区,亚洲综合| 淫纸中9区| 青青草亚洲一区 | 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 国产精品麻豆成人av| 嗯嗯,啊啊,国产精品| 人人潮人人摸| 国产精品久久久久久久久久二区三区| 天天综合91在线| 久久97精品久久久久久久不卡| 亚洲AV资源| 色婷久久| 秋霞久久亚洲精品成人| 亚洲毛片基地专区| 欧美人妻熟女在线| 久久香蕉超碰97国产精品 | 日韩91网站| 国产中文字幕在线观看| 日韩欧美偷拍美女视频| 六六久久日韩不卡| 岛国毛片在线观看免费| 久久久久97| 久久一区二区三区四区五区| 一本色道久久综合狠狠操| 亚洲第91页| 欧美日韩国产传媒在线精品| 婷婷精品| 婷婷综合五月| 国产成年免费大片黄在线观看| 亚洲国产精品成人综合| 女沟厕偷窥piss小便| 国产精品com| 国产强奸AV在线| 51国产午夜精品视频| 伊人网免费视频| 人人操人人插人www| 欧美十八禁导航成人| 国产精品自在线发布| 色综合久| 韩国女主播青草福利视频| 激激五月| 热热热热日日漂亮永久永久国产日| 欧美嫩性色| 久久精品老司| 在线 欧美 亚洲| 综合 亚洲 欧美| 欧美裸体美女日麻屄| 国产乱伦性爱区| 国产成人精品日本亚洲语言 | 91亚洲人电影| 黄片qw| 99热导航| 热久久无毒不卡| 夜夜夜爽www精品视频| 东北毛片| 一二三四视频中文字幕在线看| 伊人网综合在线视频| 蜜臀国产AV中文字幕| 色欲人妻一区二区在线| 欧美在线亚洲| 八戒午夜福利理论片| 中文字幕精品一区二区精品| 91校园春色长篇| 91男人天堂网| 欧美伊人久久综合网| 五月丁香网站| 熟妇激情| 啊啊啊爽爽| heyZO天然素人无码AⅤ专区| 日本大片日本一区二区免费高清| 亚洲和欧美裸体美女双飞视频| 欧美色网络| 亚洲免费人妻在| 欧美激情久久久久| 97色97好| 97超碰人人操人人操| 亚洲日韩精品在线播放| 精品人妻一二三四区视频| 欧美日韩一二三| 五月色综合| 综合亚洲网| 99热只有| 色香综合| 东京热男人的天堂网| 97玖玖人妻| 樱花蜜乳av| 95精品在线| 69精品| 天天综合网一91网| 亚洲综合大片| 欧美日本中字另类在线| 日韩人妻精品中文字幕| 午夜视频好爽啊| 91国精产品| 综合久| 欧姜老司机| 日韩小电影| 亚洲最新av无码成人精品区 | 一二三四视频中文字幕在线看| 欧美se亚洲| 午夜一区| 97超久碰| 99久久久无码国产精品性男| 男人的天堂激情| 美女写真| 狠狠操使劲操| 亚洲综合小视频小说在线观看| 日本操逼视频导航| 中文字幕人妻丝袜乱一区三区| 欧美人人AAA| 校园春色综合网| 91激情综合| 东北女人av| 超碰人人色| 久久首页| 国产精品久久久久9999小说| 国产亚洲一黄| 久久亚州精品成人Av无| av天天在线| 国产区性爱在线视频秋霞豆| 日韩99999| 欧美 传媒 麻豆 日韩 偷拍| 亚洲偷拍自拍在线视频| 囯产精品久久久久久久久久梁医生 | 国产精品久久成人免费| 久久这里精品国产99丫e6| 综合操逼| 国产精品一区二区校花| 东北毛片| 97草草| 欧美中字不卡| 中文字幕78| 人人爽夜夜操| 无码91| 人妻激情偷乱视频一区二区三区| 日韩激情啪啪| 熟女人妻一区二区三区| 美女极品一区二区三区| 天天操人人操狠狠插| 亚洲 小说 欧美 激情 另类| 黄骗免费网站| 97久久网| 男女性无套 免费九一| 日韩一级性爱无码| 中字幕人妻一区二区三区| 女人与公拘交酡2020视频| 国产亚洲深夜激情| 18禁精品网站在线看| 免费AV中文网在线观看| 日韩强奸av| 欧美麻豆成人同性GⅤ在线| 美女一区二区国产精品| 97最新在线播放视频| 激情五月天丁香| 久久国产精品一级二级三级| 影音先锋中文字幕日本好一区二区| 国产 无码 一区二区| 大香蕉乱伦视频网| 免费簧片在线观看| 天美麻花大全视频| 欧州色图区| 91丝袜美腿网站| 二色av| 欧美无圣光在线| 中文字幕在线第二页| 97超碰巨乳| 久久久久久久9最新免费视频观看| 久久大陆| 欧美激情区| 9999亚洲电影| 婷婷超| 久久黄色性爱视频| 六月色色| ..日韩av毛片精品久久久| www.久久最新地址| 98一区二区精品| 精品久久久九九九孕妇| 加勒比AV网| 日本精品一区二区不卡| 十八禁av无码免费网站APP| 韩国成人精品久久久免费看| 亚洲中文字幕妇伦久久| 999国产精品999久久久久久| 国产欧美日本亚洲精品| 激情网五月天| 91天美免费| 亚洲av影院在线观看| 艹精品| 欧美日日网| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 免费男人的天堂| 欧美aaaaaaa| 丝袜综合| 国产精品大屁股999| 老熟女乱子伦中文字幕一区二区 | 亚洲91射| 少妇xx精品| 欧美97日韩精品| 国产精品毛片?v一区二区三区| 激情露脸爱| 三级激情网站| 亚洲综合成人网| 欧美se综合| 在线国产探花| 天操天操夜操夜月操月年年操操| 视频在线观看免费一区二区三区| 少妇高潮99p| 一个色导综合| 狠狠穞A片一區二區三區| 色色五月天婷婷| 蜜乳中文字幕a在线| 久久m| 午夜理论片在线观看免费| 一二区在线观看视频| 丰满人妻一区二区三区四| 大屁股人妻女教师撅着屁股| 后入式在线免费观看60秒| 免费AV播放| 亚洲五码一区二区三区| 日日躁天天躁狠狠躁| 亚洲 欧美 中文 日韩超碰| 黄色免费网页无码| 大干人妻| 日韩噜噜69| 久久国色天香香蕉| 亚洲一区二区性爱电影| 亚洲欧美97√| 福利天堂| 人人妻人人色| 久久精品亚洲成a人天堂| 欧美淫乱视频| 99综合自拍| 91黑丝露脚| 男人的天堂午夜av| 欧美中文综合| 超碰91在线| 九九九999久久久网站| 超碰97欧美在线| 欧美亚洲丝袜人妻制服中文99| 国产美女激情| 99re8免费高清在线| 九九内射在线| 我爱大香蕉| 亚欧毛片基地国产毛片基地| 91丨人妻丨国产丨丝袜| 日韩美女高潮喷水视频| 国产乱婷婷精品二区三区| 久久久久久亚洲精品不卡人乳| 91麻豆天美国产欧美| 国产一区二区视频在线播放| 玖玖资源综合在线视频| 国产白嫩漂亮KTV在线| 欧美色视频在线| 国产区91柔拿会所技师| 精品久久久久久久| 久 久无码人妻AV| 51久久夜色精品国产麻豆| 色臀AV| 91五十路| 无码国产Av| 伊人久久婷婷| 99视频内射三四| 人妻久久久久久久久久久久久久久|