日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
91女网站| 国产无码一二三区| 久久无码电影| 97天天操天天干| 亚洲美女av无码| 日本在线视频导航| 欧美日韩亚洲五月天婷婷| 亚洲精品蜜桃久久久| 中字幕人妻一区二区三区| 国产一级特黄大片处女| 天天色悠悠激情| 亚洲骚男同com| 成全动漫视频观看免费下载| 最新一二三区视频| 国产一国产一级毛片古装| 国产女人91精品嗷嗷嗷嗷| 欧美性战999| 久久区| 激情综合二| 亚洲人在线| 天天天肏屄肏屄肏屄欧美欧美| 亚洲欧美自拍偷拍| 激情综合av| 日本国产亚洲一区在线观看| 久久久啊啊| 亚洲人妻久久| 99久久这里只有精品| 骚日日av| 久久免费99精品久久久久久| 91人妻丝袜无码| 久久系列| www.欧精品| 久久一区二区蜜桃| 天天天天操| 91亚.色| av绯色| 国内操逼视频二区| 天天日天天搞天天干| 小草精彩毛片| 国语对白露脸XXXXXX| 嗯嗯嗯嗯啊啊啊好紧好大| 久久久亚洲Av| 日韩国产九九精品一区二区三区毛片| 免费簧片在线观看| 99热这里都是精品| 欧美性区| 久精品无码av一区二免费国产在线观看 | 色狠狠综合噜一二三区| 偷拍精品一区二区三区| 色五月综合| 久久久人妻| 日本有码影片下载 | 天美AV片| 秋霞一集毛片观看| 亚洲欧美综合网站| 丁香六月婷婷久久综合| 中文字幕蜜乳av| 天天做天天爱天天爽AV| 亚洲无码99| 亚洲成人贴图| av线电影| 长长久久免费视频| 无码人妻精品一区二区三区99不卡| 天堂国产AV| 国产美女销魂在线观看不卡| 视频在线观看青青99国产| 天天天天天干夜夜夜夜夜操| 亚洲天堂欧美| 日本黄色XXX| 337p大胆噜噜噜噜噜91Av| 日少妇视频| a网站免费观看| 久久久久久九九九九九 | 欧美18 在线观看| Aa东京男人的天堂| 欧美日韩国产色图在线| 91av一区二区在线观看| 无码人妻一区二区三区四区老鸭窝| 久久黄黄| 自拍偷拍 日韩无码| 18+91网站| 老熟妇综合| 日本 情色 1区2区3区| 国产精品青草综合久久| 2017人人操,人人摸| 东京男人天堂| 亚洲激情色片| 久视频在线观看| 欧美v亚洲v日韩v最新在线二区| 久久啊啊啊| 国产精品午夜福利视频| 夜夜操91744565| 中文字幕精品资源在线| 日韩精品一区二区高清 | 免费视频a级毛片免费视频| 久久中出| 日韩综合97p| 日韩操呦呦影院在线观看| 国产按摩一区二区三区| 日韩九区| 国产av美女被艹的乱叫| 人人摸人人添人人操| 亚洲欧美高清无码| 亚洲中文字幕在线视频一区二区| 夜夜爽夜夜操| 色逼综合| 国产白丝网站| 国产丁香精品露脸视频 | 九九热超碰| 性综合网| 97超碰人人模人人拍人人| 超碰吊日色| 99re在线视频国产| 精品久久久不卡一区二区| 中文字幕加勒比海高清无码免费视频 | 91久久精品国产| 久久99午夜精品一区人妻| 日韩欧美福利视频看看| 大香交伊人网| 亚洲涩涩| 男人的天堂一区三区| 91视频伊人| a片偷拍视频| 日本三级精品| 欧美 亚洲| 欧美色偷偷| 青青草好吊色| 亚洲欲| 无遮挡h肉动漫在线观看| 亚洲色 国产 欧美 日韩| 我爱操| 女生看匆91网站| 欧美A√综合网| 97精品综合| 中文字幕一区电影在线观看| 亚洲无码AV九九九| 国产多人在线观看视频| 久久久久免费看少妇A片特黄| 男人的天堂三级| 成人怡红院| 玖玖爱影院| 欧美午夜视频免费观看| 亚洲福利中文字幕在线| 中文字幕老熟妇黄色视频| 九九九草| 国产辣妈在线视频福利| 色五月天AV| 日欧毛片久久| 九九九成人| 亚洲丝袜综合| 国产一区二区欧美日本| 天天综合网站| 狠狠躁日日躁夜夜躁A| 久久禁| 欧洲与亚洲欧美精品中文字幕| 久久久久久久久久久久黄色| 欧美综合自拍亚洲综合图| 欧美色偷偷| 欧美天天综合在线| 久久超碰网| 国产粉嫩蜜臀av一区二区三区| 国产欧美在线观看免费观看| 粉嫩av在线| 日韩图区 偷拍| 亚洲人成网站7777| 日韩不卡av一二三| 欧美日韩国内不卡| 亚洲 国产 精品一区| 黄色欧美性爱视频| 中文字幕jul-617人妻熟女| 夜夜操2028| 十八禁成人网站在线观看| 欧美男人一区| 亚洲综合校园春色| 久久久999国产精品| 91精品国产91久久青草| 首页亚洲国产高跟丝袜诱惑视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲日韩乱码中文无码蜜桃臀网站| 色欧美天天| 亚洲人久久久网| 超碰诱惑| 最新无码国产| 人妻一区二区三区四区视频| 中文字幕一区二区视频在线观看| 久久久五月天| 日韩性爱人人爱人人操| 一区二区娱乐网站| 91欧美性| 久草免费福利在线播放| 欧美日韩免费专区在线| 久久激情视频| 国产成人自拍视频在线| 麻豆区久久久久亚| 欧美日韩操逼嗦吊| 九色97| 7月婷婷综合| 操b网站亚洲无码| av天天在线| 亚洲加勒比色图| 国产深喉视频一区二区| 日韩免费中文字幕视频| 亚洲天堂7777| yazhouzaixian| 亚洲女人91| 99精品久久久久久久婷婷蜜桃| 和协影院中文字幕三区| 精品国产乱子伦一区二区三区,精品一| 全免费a敌肛交毛片免费| 97内射偷拍| 91中文字幕在线观看| 色色色色日本| 女人香蕉久久毛毛片精品| 亚洲无码一二三区| 九九色综合| 97青娱乐超碰久久| 黄色成年| 狠插 制服 自拍| 中文字幕欧美丝袜07资源| 亚洲色图20p| 可免费观看的av毛片中日美韩| 白丝被操91| 久久97资源 网| 伊人热综合| 欧美做爰无码A片视频| 五月天AV资源| 亚洲美乱| 久久αⅴ| 岛国小电影| 高清在线不卡一区二区 视频| 天天色综合天天操| 婷婷美人网| 久久超碰网| 蜜桃在线观看一区二区三区| 天天综合网日韩7799| 野狼激情网| 久久精品成人一区二区三区蜜臀 | 久久后入制服| 樱花蜜乳av| 91亚洲人电影| 久久精品夜色国产亚洲AV| 日日玩天天干| 欧美一区二区三区不卡高清视频| 嗯嗯嗯嗯啊啊啊好紧好大| 静品嫩模一区二区| 思思热影视| 超碰美女97| 九九热av| 中文字幕日韩综合| 日本一久是| 97免费在线| 黄色污污污污污污网站| 久草尤物| 女人一区| 国产亚洲精品美女久久久| 偷拍超碰| 欧美专区在线| 特色a在线上| 亚洲另类在线观看| 黑人精品欧美一区二区蜜桃| 亚洲欧美色综合| 久久精品黄色| 欧亚洲精品有视频| 欧美日韩性爱电影在线| 欧美中文字幕一区 | 国产欧美日韩在线观看麻豆传媒公司| 日本最新免费韩国1区2区视频播放| 国产精品白领在线观看| 91国产丝袜美女| 亚洲色图尤物视频| 久久在肏| 熟女丝袜视频| 嗯啊抽插大香蕉网页| 亚洲在饯| 97超碰色色| 九九国产热| a级成人毛片免费视频高清| 国产精品美女久久久久久网站| 国产免费一区| 人人操人人射人人干| 婷婷四五区| 国产精品午夜福利视频| 奸色色 男人天堂 天天射| 精品一级毛片在线观看| 国产97色在线| 9/A片| 精品美女久久久久| 国产精品久久久九九九| 97色97好| 超碰免费人人| 中文字幕奈奈美被公侵犯| 午夜毛片高清免费不卡| 国产高清精品一区二区三区毛片 | 天天添天天干电影| 日本污ww视频网站| 混色激情av| 欧美v亚洲v日韩v最新在线二区| 外国免费性情大片| 亚洲人妻色图| 欧美色图99| 蜜桃臀AV在线| 天天情欲宗合网| AV色图| 精品久久久不卡一区二区| 91GD.COM| 偷拍偷窥与盗摄视频专区| 俞拍自拍| 日韩女优在线| 亚洲日韩精品一区视频在线| 天天射天天操天天干天天吃2018 | 美国日韩黄色片| 人爽不卡视频| 中文字幕精品乱码| 91女网站| 偷看洗澡一二三区美女| 五月激情啪啪| 人妻人人做人人澡人人爽欧美一区| 三级特黄60分钟播放| 俄罗斯一区二区视频在线观看| 国产强奸乱伦第1页| 日韩免费a级毛片无码a∨| 天天澡天天爽日日AV| yiqicaoav| 天操天操夜操夜月操月年年操操| 久久大香蕉97| 久久久9999| 天堂а√在线最新版在线| 精品人妻1区| 伊香蕉综合久久久久久久噜噜噜 | 热九九精品| 先锋精品av色鲁| 欧美亚洲综合色| 91+欧美| 亚洲色啪| 综合一区中亚洲国产成人综合精品| A片三级无码| 手机在线大香蕉| 婷婷九月丁香| 精品美女久久一二三| 91亚洲狠狠色| 好爽视频在线观看| 日本日逼高清| 69少妇一区二区| 免费一级毛片在线视频观看| 偷拍欧美激情| 色好看av| 精品网站99999| AV天堂丝袜| 成人资源中文字幕在线观看天天| 亚洲欧美国产其他二区| 禁止观看美女黄| AV和黑人在线播放| 精品一区二区三区蜜桃臀赵总| 人人手机欧洲亚洲国产人妻| 屁股久久久久久久| 亚瑟国产精品久久无码| 天天视频综合在线观看视频| 好吊妞转入那个网| 麻豆黄四叶草网站| 色女99一级片在线观看| 成人片视频| 中文欧丝袜诱惑| 91一区二匹| 视频国产成人精品日本亚洲18| 丝袜美腿av女优在线| 97精品免费| 蜜臀久久99精品久久久久久-DVD原版全| 精品无吗m| 亚91网| 国产中文字幕在线点播| 在线色导航| 激情五月婷婷| 中文字幕午夜精品久久久| 麻豆区久久久久亚| 人妻一区视频| 亚州成人A√| 久久东京热久久| 2020久久免费视频| 亚洲国产精品9999在线观看| 日韩国产乱子伦App| 中文字幕55555| 激情小说激情视频| 久久东京伊人一本到鬼色| 婷婷五月天激情网| 日韩78m视频| 91东京热男人的天堂| 久久国产热视频97电影| 淫妻综合网| 久久中文字幕女同性恋一区| 91足交| 日本午夜久久电影| 久操电影网| 色乱二区| 草B在线| 久久久久久久97| 午夜一区二区三区国产| 久久綜合很很很| 欧美狠狠干| 91老司机在线视频免费观看| 福利一级版子| 另类一区| 亚欧美色图| 女人爽到高潮潮喷18禁网站| 一区二区三区网站日日骚| 91操人| 欧美日韩国产三级黄色| 是还免费视频1727我| 人妻中文字幕精品无码| 日韩成人人妻网站| 亚洲天堂热| 麻豆一区在线| 欧美激情视频一区二区| 国产三级多多影院2022国产AA一级毛片无码| 亚洲综合在线视频| 精品二999| 欧美成人免费在线观看| 欧美日韩淫加| 九九草| 99青草| 精品成人亚洲午夜电影| 综合九九| 婷婷丁香五月天综合东京热| 亚洲AV不卡在线观看| 亚洲一区深夜| 四虎精品永久在线观看| 麻豆久久久一区二区| 另类图片欧美激情综合| 蜜臀色乳| 奇米四色影视777久久久| 蜜乳av首页| 欧美色图亚洲激情| 成年人黄色小视频网站| 正宗无毛一线天嫩逼| 久青草影院| 操逼999| 91干熟女| 超碰免费人妻在线| 欧美|91色综合| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 日韩 欧美 另类 人妻| 99综合免费视频| 中文字幕国产在线天堂| 天天看片麻豆| 国产亚州高清国产拍精| 日韩免费av片高清无码| 一道本东京热加勒比一区二区三区| 免费1级a做爰片观看| 麻豆福利视频导航| 神马午夜久久久| 久久亚洲欧美中文字幕国语| 国产精品青青草| 97综合| 五月丁香亭亭| 啪啪综合网| 狠狠中文字幕| 婷婷五月天影院| 成年人免费观看网站| 精品久久久av| 一级久久性爱视频| 久久精品99| 午夜120视频在线观看| 日韩BBN| 狠狠色丁香| 色亚洲欧美| 日韩美女高潮喷水视频| 精品国产人成在线| 国产精品黑人一区二区三区| 97欧美色| 中文字幕二区日韩天堂| 自拍大香蕉乱插| 亚洲国产一区二区入口| 插B在线观看| 六月婷婷一区二区三区| 日本网色| 久久久久久99AV无码免费网站| 天天综合网视频91| 天堂涩涩| 国产成人精品午夜福利| 丝袜美腿制服人妻二区中文字幕| 国产精品内射婷婷一级二| 久久久极品| 亚洲涩图欧美| 久都青青视频| 猛交交| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 久久男人的天堂| 欧亚免费视频| 欧日韩一二三f区| 嗯嗯啊啊操死我| av天天在线观看| 超碰97精品在线| 国产无吗在线播放| 九月丁香婷婷色| 欧美极品美女aaaaaa级黄片| 久久精品操| 欧洲中文字幕| 日韩钢筋无码高清啾啾啾| 亚洲国产成人精品无码专区| 精品在线观看视频在线| 熟女人妻精品一区二区视频| 亚州性9| 欧色性第一页| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 九七人妻在线| 亚洲国产丝袜在线观看| 噜噜噜噜天天狠狠| 大香蕉天天看妹子| 天天插天天操天天摸天天射天天看| 97福利视频| 欧美日韩免费性爱| 夜夜天天噜狠狠爱2021| 日本午夜久久电影| 日韩精品国产精品五码一区二区| 在线色导航| 春色综合网| 操91| 大香蕉欧美伊| 夜夜高潮夜夜爽高清视频一| 蜜桃色院一区久久| 色情综合| 91 亚洲 欧美 日韩 国产 综合| 素人伊尹大香蕉免费下载视频| 东京热毛片调教| 亚洲自拍97| 国产精品盗摄 偷窥盗摄| 国产精品久久久久久照片| 亚州欧美色图| 清纯唯美第一页| 色偷偷2020免费视频播放| 日韩精品人妻中文字幕久久久| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 亚洲情色 自拍| 97碰碰色| 日韩无码黄色片| 亚洲天堂无码| 国产在线强奸视频| 日韩三级伦理中文字幕| 少妇的嫩逼图片| 玖玖超碰熟| 在线黄色污污网站| 久久久久久九九九九九九| 青青草视频在线观看一区二区| 欧洲乱码视频| 日韩中文字幕av在线播放| 最新欧洲欧美日本激情网站| 久久久麻豆精品| 黄色AAAAA欧美| 日本精品一区三区| 超碰碰激情97+久| 九九九九热只有精品| 91美女视频电影| 大香蕉之青青草原| 91美女视频在线观看| 大香蕉99热| 人妻天堂综合网| 亚洲AV不卡在线观看尤物| 熟女中出视频| 男生女生啊啊啊啊| 最新AV在线| 人妻丝袜日本| 日韩探花精品在线视频| 操逼网免费无码视频| 中国亚洲呦女专区| 91爱欧美| 男人的天堂三级| 欧美 日韩第一性色| 激情文学小说一区二区 | 九一屌逼| 九九九九AV| 亚洲色欧美| 亚洲字幕一区二区| 91操人视频| 麻豆精品三区视频| 国产精品爱欲| 婷婷国产精品九区| 99九九久久| 走光一区92下载| 一级做受视频免费是看美女| 免费一级毛片在线视频观看| 男人天堂无码| 秋霞无码av鲁丝片一区| 国产又粗又长又爽又色| 91久久国外网| 亚洲蜜乳av| 中文字幕免费观看| 97网站在线观看| 午夜小电影在线插入淫高潮| 亚州情色j区| 欧美色图欧美| 国内偷拍精品一区二区| 天天综合网国产| 少妇三P| 在线a亚洲视频播放在线| 成人性爱AV在线免费观看| 久久性爱免费送| 色狠人在线99| 久久午夜鲁丝片| 亚洲欧美日韩有码| 亚洲第一视频 欧美风情 日韩| 欧美少妇色图| 小草精彩毛片| 超碰在线人妻中文字幕| 三级片大波波| 国产精品一区午夜福利| 蜜桃臀av在线观看| 中文一区在线日| 伊色久人大在线| 天天视频网站黄| 精彩国产视频播放1区2区| 欧美真人抽搐一进一出gif| 亚洲天堂另类小说男人| 农村少妇久久久久久久| 玖玖视频在线资源一区二区三区| 欧在线一二区| 吉川爱美98堂在线| 风韵犹存大大大大香蕉 | 精品视频免费在线一区| 老鸭窝日丰县女人| 手机午夜电影神马久久| 色婷婷电影网| 久久精品国产亚洲5555| 日本久久综合| JULIA一区二区三区在线播放| 97色欧洲| 亚洲AV乱码专区国产噜噜亚洲 | 国产搭汕a级片| 人人操人人操人人操人人操人人操人人人11.CM| 丁香五月婷婷色| 日本色日夜干| 亚洲免费97免费| 97任你吞精| yw尤物av无码点击进入麻豆| 日韩在线97| 丁香五月自拍| 无码人妻毛片丰满熟妇精品区| 强被迫伦姧在线观看无码网站| 大香蕉综合在线| 大香蕉免费3| 亚洲天堂电影网| 91free福利| 天天看天天日| 啊啊啊啊视频免费| 亚洲视频精选| www.婷婷| 国产91美女视频| 久久伊人网视频一区二区三区| 97超碰国产亚洲精品| 又黄又粗又硬又长又大| 五月丁香黄色网| 在线女人91| 在线黄色污污网站| 久久午夜鲁丝片| 蜜汁欧美| 夜夜操一区二区| 亚洲狼狼干综合1| 97人妻碰碰中文无码久热丝袜| 一区二区三区免费视频入口| 亚洲熟妇白浆无码AV| 亚洲福利中文字幕在线| 午夜福利一区二区影院| 亚洲国产成人综合碰碰三级经典| m欧洲一级午老| 宅男午夜在线视频| 爆乳免费黄网站| 强奸国产在线| 欧美在线天堂| 亚洲中文字幕一区二区| 99热免费| 欧美一区二区三区四区综合| 亚洲综合性感在线| 精品亚洲国产成人精品| 热热色中文无码| 免费97视频| 9久综合网| 丁香婷婷大香蕉| 校园春色综合网| 试看福利| 91av天美性媒精品视频| 亚洲第一狼人丝袜美女另类| 欧美手机在线综合| 老熟妇一区二区三区啪啪| 18精品一区| 亚洲色图超碰在线| 一起草av| 亚洲欧美日韩二区视频| 亚洲AV在线资源| 激情文学网伊人| 亚卅熟女乱色| 91 欧美| 69一区二区三区 | 久久这里都是精品| 天天日天天搞天天干| 超碰在线综合97| 国产激情在线| 97色操| 唯美清纯 妖精视频| 99热99re超碰精品| 欧美日韩精品一区二区三区高清| 久久日韩肥臀| 亚洲大胆人体av| 熟女人妻久久中文字幕一二区| 日本视频在线中文字幕| 激情综合网亚洲| 日韩中文字墓| 九九免费影片| 高清不卡一二三区视频......| 人人看人人插| 操婢日韩| 亚洲成人久久一区二区| 天天欲望网| 久啪| 久久五月视频| 立川理惠无码一区二区| 国产亚洲色婷婷久久99精品91| а√天堂资源官网在线资源| 97精品一区| 台湾肥佬网一区二区三区| 91狼人| 能看的AV| 久久久久密臀一区二区| 96精品在线| 日本不卡高清免v欧美日韩在线观看| 一牛影视久久久一区二区三区| 黄片免费看黄片免费看| 香蕉视频精品亚洲一区二区三区在线播| 人人操人人色网| 性欧美| 91五十路| 操逼免费视频无码国产| 操屄不卡视频| 九九久久久九九| 色网综合网| 欧美性高潮在线| 91国产伊人大香蕉| 中文字幕人乱码中文字的预防方法| 天无日色综合| 少妇高潮九九九九| 26uuu最新| 国产精品免费日韩| 女优视频第10页| 99热99在线| 韩国三级理论在线| 2020中文字幕| 丁香五月激情网| 黄网站黄视频网站进入口 | 思思热在线观看| 性欧美精| 日本人妻天堂网站在线播放| 欧美综合加勒比在线| 97舔舔| 视频二区美腿丝袜制服人妻欧美| 99热亚洲| 午夜天堂精品久久| 超碰九区| 激情小说在线视频| 最新中文字幕在线亚洲| 久久色激情一区二区三区| 性感女人网页在线观看视频| 青娱乐蜜桃臀AV色婷| 国产国产亚洲一二三久久| 亚洲色婷婷综合久久一区二区三区| 婷婷久久五月综合激情| 三级日韩一区二区三区| 国产最火爆久久国产网站网站| 92福利社视频| 快点操死我| 欧洲与亚洲欧美精品中文字幕| 久久国产对白激情浪潮 | 欧亚日韩三区| 久操视频在线观看| 成人av毛片在线观看| 国产成人无码啪| 强奸乱伦av电影| 久久视频少妇美女| 九九操久久国产免费视频| 天天网综合| 亚洲天堂 视频你懂的| 97在线观视频免费观看| 4虎在线视频| 岛国片在线视频网站| 亚洲成人一区二区精品| 亚洲高清视频在线观看| 夜夜做夜夜爽精品视频| 无码av永久免费专区网站| A男人的天堂| 成人26uuu| 日本一本道A级黄色毛片试看60分钟| 强奸乱亚洲| 综合网亚洲1| 亚洲操逼视频网站| 婷婷精品国产欧美精品亚洲人人爽| 亚洲精品熟妇1区2区3区。| 99久久久无码国产精品性啊聊| 99成人| 欧美日韩一干二干| 国产精品呦一区二区三区| 久99热| 91欧美www| 国产精品成人无码av| 欧美日本久久精品一区 | 熟妇人妻精品一区二区| 精品超碰国产| 久久久av爱| 呦呦影院| 熟女在线视频| 欧美色干| 亚洲无吗在线视频| 亚洲图片 激情小说| 探花在线免费观看视频国产一区| 久久久久久国产精品免费网站| 亚洲在钱| 色婷婷影视| 97se综合| 伊人久久大香大香线蕉中文| 亚洲资源网| 九九这里只有精品| 老女人碰碰在线碰碰视频| 欧洲久久一二线| 国产按摩一区二区三区| 伊人一区二区在线播放| 本道在线| 日韩精品一区的| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 韩国免费播放一级毛片| 激情综合网一盗摄| 丁香九月激情| 亚洲欧洲激情| 亚洲另类久操网| 亚洲欧美自拍偷拍| 亚洲国产97在线精品一区| 波多野结衣被操50分钟免费视频 | 口爆欧美91| 91性网| 青青草吊丝| 秋霞蝌科网日本一区| 麻豆色99999| 青青久久手机线视频| 亚洲精品欧洲精品| 成人三级片无码| 国产精品片| 亚洲精品视频在线| 日本人妻最新在线中| 超碰这里只有精品| 综合日本女人伊人| 国产精品农村妇女精品| 青青草视频导航官网| 国产精品久久久三级无码| 97免费视频在线观看| 中文字幕视频免费| 国产精品天美传媒| 欧洲精品一级二级精品综合视频综合| 婷婷在线视频| 中文久久久| 九九玖玖精品| 亚洲欧美日韩夜夜| 国产精品午夜福利| 久久婷婷亚洲| 国产一区免费午夜视频| 蜜臀久久99精品久久久久| 大香蕉欧美国产日韩高潮| 色欧美天天| 亚欧无码在线| 亚洲第一免费视频| 91w欧美| 一牛影视久久久一区二区三区| 在线看免费无码AV天堂的| 色网在线视频观看免费| 亚洲欧洲日本精品中文a∨| 九九九九九用不成了| 日韩精品在线观看网站| 野狼福利社区| 色97欧美| 老司机午夜精品福利视频一区二区 | 97超碰欧美手机| 久久久久亚洲?V片无码V| 啊啊啊啊,啊啊好多水| 99热99色| 亚洲天堂男人| 神马久久免费电影观看| 好屌色综合| 91超级碰碰| 午夜影美女日鸡鸡天天视频国产| 欧美gv在线观看| 青青草久草| 日韩人妻少妇 一区二区三区| 国产av又色又爽又黄| 99re免费视频精品全部| 99热18这里只有精品| 日韩99999色| 99热精品在线观看| 亚洲熟女精品| 麻豆精品.欧美精品.日韩精品.| 91在线美女| 五月婷婷影院| 伊人精品久久网站| 国产AV色黄看到爽| 级做a爱无码性色永久免费| 欧美第二页午夜| 97人肏| 欧美亚综合色图| 久久一区二区三区入口| 中文字幕一区电影在线观看| 亚洲无码一区成人免费午夜| 欧美白嫩女HD| 97超碰总站| 98超碰日本| 亚洲精品一二区| 综合色欧美| 一本色道人妻久久| 中文字幕视频二区| 91nbbbbbb| 美腿丝袜高跟网免费视频免费视频| 999国产精品999| 97色碰| 九九九999久久久网站| 九九成人精品| 天天综合91在线| 厕所偷拍在线| 丝袜美女诱惑 91 视频| 91亚洲黑人| 欧美激情视频一区二区三区不卡| 丁香色色网| 神马久久久久眼| 成人网欧美风情| 国产二区三区粉嫩在线| 日韩精品一区二区三区色欲| 东京热亚洲一区二区| 天美国产三级传媒| 欧美久久毛片基地| 国产不卡片| 亚洲欧美精品一区天堂久久| 亚洲欧美国产成人综合不卡| 欧美一级特黄淫片在线观看| 久草大| 日本道久久综合色色| 九月婷婷久久| 欧亚免费视频| 久久婷婷热| 色婷婷av在线观看| 男人a天堂手机在线版| 日本在线激情一区二区三区| 91社操逼| 自怕偷自怕亚洲精品| 中日韩免费看男女操逼大全| 26uuu欧美日韩| 精品人体无圣光凹凸| 97人人草| 国产高潮AA片免费看| 加勒比无码一区二区三区| 欧美激情久久久久| 久久久久熟女| 91中文字幕制服丝袜免费视频| 久久精品无码熟妇一区二区三区视频导航 | 无码抄逼网| 青青草操逼逼视频| 人妻AV 中文字幕的| 久久综合久久综合人久久夜精品| 国产精彩女在线观看视频| 四虎免费视频| 欧美综合狠| 91精品国产91久久青草| 日韩乱伦影音先锋| 中文一区二区婷婷视频| 9.1小视频| 日韩综合第八区国产精品| 国产精品久久久久无码Av网曝门| 久久性爱大全| 激情久久av一区av二区av| 嗯嗯啊啊操死我| 台湾佬大香蕉| 插穴性爱视频在线观看| 久久天天摸| 婷婷丁香人妻| 日本久久超碰| 东京热一区二区中文字幕| 日本一级二级三级网站| 久久亚洲熟妇在线视频| 精品九九九九九九九九九| 91综合站| 久综合国内精品自在自线| 乱伦色图网址是多少| 国产日韩欧美中文在线播放| 亚洲欧美激情另类色图| 啊啊啊啊嗯嗯在线久久久| 久久美女国产| 亚洲国产剧情少妇激情| 亚洲欧美天堂| 91蜜桃婷婷狠狠久久综合9色| 五月婷婷丁香六月| 日本亚洲vr欧美不卡高清专区| 丝袜美腿丝袜| 青娱乐淫乱1314| 婷婷伊人| 91丝袜| 夜夜草我| 亚洲情色第一页| 精品久久久久久亚洲| 久艹伊人精品综合在线| 亚洲大胆人体av| 骚熟女AV网| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧美中出1| 久久久噜噜噜久久人妻| 密臀在线视频| 天天色天天干天天射| 天堂精品在线| 麻豆熟妇乱妇熟色A片在线看| 亚洲精品亚洲人成在线麻豆| 野狼激情网| 偷拍 亚洲 欧美| 殴美牲| 不卡中文字幕aⅴ在线| 青青11操操操操操操操操| 欧美在线天堂| 欧美日韩中文视频播放| 91九久| 综合久久97| 欧美人妻一区| 黑丝制服中文字幕| 无码国产精品午夜不卡(| 97色综合中文网| 狼天天狼天天大香蕉| 久久大陆| 99精品视频在线观看免费| 欧美劲爆视频一区二区| av2014 日韩在线中文字幕| 欧美日韩中文亚洲v在线综合| 国产精品色| 精品毛片av一区二区| 丁香五月天堂网| 免费人人搞97| 在线洲亚线| 国产专区第一页| 亚洲激情网| 蜜桃臀一区二区aV| 精品人妻一区二区三区四区石在线| 日本福利二区视频| 国产白丝在线| 国产三区免费在线观看| 大香樵伊人网| 岛国激情视频软件| 肉丝无码中文高清| 国产一区二区成人av在线播放| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 日本肉体xxxx裸交| 97超碰9| 精品一区96| av激情亚洲五月天| 欧美十八禁在线看| 欧美色乱| 玖玖玖玖精品国产剧情| 精品久久久久综合无码| 中文字幕一区二区三区人妻少妇在线| 日产精品久久久一区二区| 亚洲无码久久久久久久| 老熟女天天操| 日本色色色色色视频| 视频二区熟女人妻| 日本www操操操| 日本在线伊人啪啪| 久久美女福利是上海美女| 东京热大香蕉| 精品区9| 69国产对白刺激| 欧美三级一级| 试看日韩黄片| 国产日韩精品一区二区三区| 青娱乐老司机视频| 91久久午夜无码鲁丝片久久人妻| 少妇久久久久久| 啊啊啊轻点在线观看| 色噜噜人妻av 中文字幕| 97超碰超碰| 国产丝袜美腿美女麻豆| 九九视频黄色片| 亚洲人精品久久久| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 国产成人在线观看综合| 后入福利视频| 婷婷综合久久| 热久久国产| 日韩亚洲97| 超碰人妻中文在线| 9九九九九视频在线观看| 亚洲综合20p| 青春草A| 岛国片国产成人亚洲播放| 人妻激情在线视频| 欧美在线干| 国产AV久久野战精品| 翔田千里A片一区二区| 大香蕉一人| 男人天堂一区二区| 高潮精品| 另类av天堂| 国产成人亚洲精品无码古代早漏男| 四虎免费视频| 黄呦呦在线| 乱伦3P视频| 天天色天天干天天爱| 青青草原香蕉日本Ap| 天天干天天爽| 亚洲欧美日韩精品久久久一区二区 | 91色情黑丝搞鸡在线观看一区二区三区三州| 久久欧美1卡2卡3| 免费观看性欧美一级| 欧美不卡五十路| 色香av| 激情四射五月天| 毛片电影一区二区三区| 国产欧美日韩一区二区三区| 国产最新小视频在线播放下载| 国产h小视频在线观看免费| 国产欧美另类久久久精品课程| 国产白丝网站| 色爱综合网欧美| 人摸人人操人| 性色AV蜜色av色欲av| 国产9区| AV色图| 天天操熟妇| 九九久久一区二区三区| 麻豆国产96在线| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 91精品伊人久久久大香线蕉91| 欧美大香蕉同搞| 操逼视频色| 欧美v日韩v亚洲v最新在线| 91路www| 亚洲欧美日韩国产丝袜自拍中文| 啊啊啊com| 99久久精品国产高潮| 免费观看日本操逼视频| 伊人性在线视频| 伊人玖玖网| 天美传媒av 在线| 91婷婷| 99精品视频在线观看| 亚洲AV无码乱码在线观看性色| 亚洲影院365| 欧美色97| 精品午夜福利导航| 91大香蕉伊人| 91中出视频| 日韩熟女无码| 正在播放国产精品一区| 国产中文字幕在线观看| 青青草视频在线观看一区二区| 在线人妻熟女一区二区三区四区五区| 天天舔九色婷婷| 色999人与兽| 九九热超碰97亚洲最新香蕉| 插入综合网| 97资源欧美| 嗯啊啊啊轻点视频| 97超碰美国| 五月丁香| 2020国产精品| 丁香五月性| 精品久久久九九九孕妇|