亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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
返回資訊列表
色综合色欲色综合色综合色综合| 亚州情色j区| 国产毛片在线| 91强在线播放| 99啪啪| 丰满人妻一区二区三区| 九九久久一区二区三区| 中国AV美女| 日本色色色色色视频| 青青草久久在线| 夜夜草网站| 99re99| 中文字幕在在线观看网站| 思思视频免费看网站| 夜夜春夜夜操| 欧美色图片91| 翔田千里av一区二区三区| 青春草莓视频在线观看网址| 视频在线中文字幕| 91日产桃蜜| 亚洲国产精品久久久久婷婷青年| 国产欧美一级在线观看| 久久9久| 91色图片| 操人91| 国产黄色视频久久| 欧美色院| 色97欧美| 新怡红院| 激情婷婷黑人91| 天天干天天日天天射黄色大片| 91黑人无码激情在线| 亚洲AV麻豆Aⅴ无码电影一| 10000部十八禁看电影| 日本在线播放不卡一区| 在线观看亚洲专区| 色屁屁影院www国产| 久久人妻一区二区三区高清| 曰本熟女视频| 色哟哟的毛片| 成年女人18级毛片毛片免费观看| 色yeye成人免费视频| 无码久久国产| 欧美1区二区三区公司| 97网址97| 成人在线永久| 亚洲人精品久久久喷水| 国产乱婷婷精品二区三区| 亚洲婷婷五月天| 中文字幕在线观看永久| 日本理论在线| 综合操逼| 97中文超碰| av天堂5| 日韩精品一区的| 色色色欧美| 福利色色| 99热思思| 激情九月婷婷| 闷骚老熟女15P| 五月婷婷色| 国产精品小视频一区二区三区| 日本欧美国内在线| 91九色丨国产丨爆乳| 国产AV天美| 亚洲国产蜜臀系列在线观看| 少妇淫妇久久久久久久| 欧美日韩中文字幕人妻| 成年女人黄网站| 久操精品网| 91狼人| 操美女人妻| 岛国1区2区3区在线观看| 男人的天堂2010| 天堂精品小草| 夜夜嗨一区| 欧美亚洲小说| 欧美丝袜制服久久| 国产白嫩精品久久| 欧美人妻制服| 日本久久久精品电影| 97超碰超欧美。| 97免费在线观看视频| 丰满美女一级毛片在线播放| 五月天婷婷欧美三区| 久久久久久久久久久久久久久久9| 色悠久久久av| 亚洲国产97在线精品一区| 99热这里只有精品18| 亚洲天堂一区二区久久| 九九RE视频在线精品| 日韩亚洲美州欧洲综三区一品在线| 无码男人天堂| 国产久久成人| 欧美三级一级| 亚洲综合20p| 天天色播亚洲综合网站| 伊人久久大香线综合无码| 欧美性爱精品一区二区| 男女真人网18| 日日A∨| 77777亚洲蜜臀精品久久综合蜜臀| 爱爱久久| 超碰99在线| 3028国产精品| 日韩二区三四区五区六区在线看| 伊人性在线视频| 先锋色眉乱伦资源| 国精品一区二区三| 成人一道本免费视频| 日韩欧美女优电影| 欧美色图 人妻| 色吧5亚洲| 免费αⅴ在线观看| 今日头条成人一区二区三区四虎精品| 9Ⅰ老熟女| 97久久视频| 久久↗↗| 亚欧性爱ab| 国产精品久久久久久久久久久久久久久久| 久9re热视频这里只有精品| 色吧综合网| 97久久久久久久久久| 久久精品国产72国产精品福利| 99热导航| 岛国视频一二三区| 亚欧操逼片在线观看| 亚洲欧美中文一区二区三| 国产免费久久精品99re韩国| 久久激情亚洲精品无码?V| 久久99深爱久久99精品| 六十路日本| 久久男人| 中文字幕精品人妻丝袜| 人人看欧美性爱| 日本精品久久久久久久| 偷看洗澡一二三区美女| 色约约一区=区三区| 国产强奸乱伦xd| 人妻无码后入| 唐山老熟妇露脸啪啪叫| 欧美暴力猛交| 成人蜜乳小视频网站| 久久e6只有精品| 午夜男女爽爽爽影院视频| 爱欲AV| 亚洲一区二区三区播放在线| 射综合网| 亚洲男人的天堂网| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 欧成人在线| 日韩一级二级| 午夜福利免费福利视频| 久久女人| 射丝袜大香蕉| 天天综合影院91| 国产精品婬乱一级毛片彝族| 夜夜高潮夜夜爽夜夜爱爱一区| 啊啊啊不要好疼视频| 久久久一区二区三区三州| 日韩成人色图| 强奸乱伦AV网址| 日本精品一区二区三| 26uuu欧美| 国产高清成人免费视频| 超碰 av 女人天堂| 激情开心五月天| 免费看国产曰批40分钟怎么下载| 亚洲成成熟女人综合一区二区| 久久手机视直播| 欧美日韩香蕉| 欧美特大AA级黄片| 超碰在线一区| 天天操天天舔| 综合自拍| 麻豆精品三区视频| 97在线欧洲| 天天插天天插| 免費黃色視頻觀看一| 亚洲一区在线观看欧洲| 怡红院久久老司机| 亚洲天堂少妇| 成人天天爽| 亚洲天堂女优在线| 黄页大片在线观看| 五月天色色网站| 日日噜噜夜夜狠狠视频无| 东京热毛片177b2viP| 亚洲人妻色图| yy少妇精品久久| 日韩精彩免费| 99爱久久视频频| 大香蕉啪啪啪| 99久久婷婷国产综合| 中文字幕中文字幕一区二区| 国产视频一区二区免费| 麻豆一区在线| 久久內射| 日韩懂色网| 亚 欧 美 综合| 无码聚合| 亚洲日本韩国在线| 一区三区啪啪| 精品一啪| 免费一级毛片在线视频观看| 国产精品制服丝袜清纯唯美| 九九干| 永久免费av无码网站国产app| 久久丝袜| 国产视频第二页| 九九九不卡| 超碰97国产欧美| 骚货操死你| 97碰碰色| 久久在线观看免费视频| 黄色成人网久久久久久| 久久av成人无码免费| 国产欧美精选激情视频| a网站免费观看| 啊啊啊久久| 欧美一区二区日韩传媒搭讪精品| 人妻出轨一区二区三区| 10000部十八禁看电影| 91精品丝袜久久久久久无码人妻| 欧美色日本| 亚洲图片 激情小说| 少妇3P性爱自拍| 青椒国产97在线熟女| av在线一区二区三区| 久久久精品视频免费观看| 国产热RE99久久6国产精品首| 人成午夜免费大片| 美腿色图| 久久精品综合| 免费国产电影一区二区| 天天操天天舔| 熟妇人妻一区二区三区| 中文字幕一区日韩精| 翔田千里AⅤHD无码| 丰满人妻一区二区三区四区| 日本91白丝| 美女黄页| A一级色女| 熟妇色99| 久久九九视频九九视频| 狠狠 91| 97精品97| 人妻精品一区二区| 久热在线精品免费观看| 另类小色呦| 亚洲色图大香| 少妇色综合| 九九九成人| 91看黄片| 亚洲色啪| 日日夜夜模| 9丨久久九九九 | 日本www操操操| 五月天婷婷基地| 97精品第3页| 男同专区一区二区三区在线| 黄aaaaaaaaaaaaaaaaaa色网站| 2020中文字幕| 97操97干| 久久综合婷婷| 欧美日韩97在线| 91综合色| 亚洲精品性爱片| 亚洲午夜av| 日韩不卡网操逼中文字幕日韩| 久久久久久九九九九九| 亚洲欧美日韩精品久| 99re不伦| 妇女性内射冈站HDWWWCOM| 欧美 亚洲 偷拍自拍| 欧美亚洲高清不卡| 三级日韩一区二区三区| 爱啪精品一区| 人人人摸人人| 91AV老熟女视频| 久久精品无码专区| 人妻丝袜无 码视频专区| 99热精品青草在线| 后入式免费视频| 国内自拍 日韩激情 99| 久久 久久国内精品亚洲| 无码最新| 精品国产乱码久久久兰草影视| 啪啪视频免费在线观看| 9久久9综合| 欲香欲色| 一道本东京热加勒比一区二区三区 | 91色插| 国产激情片在线观看| 大香蕉在线SuP| 国产AV精久久| 超碰欧美在线欧美| aaaa少妇高潮大片| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 亚洲第91页| 亚洲精品毛片在线观看| 久偷拍欧美日韩三区| 亚洲啪啪视频一区二区| 好爽要喷了| 国产精品人妻无码久久久互動交流| 激情四射五月天| 天天爱天天操| 亚洲色图久久成人| 中文字幕一区二区三区高清| 97中文综合| 婷婷久久大香蕉| 在线不欧美| 欧洲Au麻豆| 一个国产在线综合网站| 淫穴高潮色图| 九九九久千久久激情蜜桃在线看| av天堂精品久久| 久久久三区二区一区| www色婷婷| 91亚洲电影| 日韩情色AV| 久久毛卡| 黄色操人| 日本道人妻久久久在线不卡色视频| 欧美精品999| 日韩欧美日韩| 97伦乱| 国产乱码久久| 亚洲国产91精品一区二区久久| 欧洲精品网| 国产亚洲在线| 五月婷婷六月丁香网址| 97网色| 久久仑合| 人妻啊啊人妻啊| www亚洲免费| 丝袜美腿操av| 国产亚卅97| 久久久久久AV无码免费网站| 国产综合日韩伦理| 欧美人妖内射| 日本精品一区二区三| 欧美中文字幕男人天堂久久精品 | 欧美一级A片在线看视频性色| 在线综合网| 久久超碰av在线| 啪啪视频mP4| 亚欧性爱ab| 久久精品国产精品一区| 友优传媒精品在线一区二区| 日日骚精品视频| 1区2区3区在线视频| 日韩精品一区二区三区色欲| 色色网91| 天天看精品动漫视频一区| 一本大道久| 日韩欧美偷拍美女视频| 亚洲色图20p| 99色热| 人妻99p| 国产精品久久久久久无码红治院| 日韩无码一级黄色av片| 热久久99999| 夜夜操2028| 激情五月婷婷综合| 日本在线播放不卡一区| 免费观看的黄色的网站| 精品国产91av一区二区三区 | 色色色色网站| 色色激情五月天| 手机在线人成免费视频| 天天色,天天干,天天干| {男男暴菊gay无套网站| 亚洲日韩在线a不卡99精品| 性猛交| 男人的天堂va在线| 亚洲无992tv| 女生久久网| 亚洲高潮影院| 久久久偷拍| 99re6在线视频播放免费精品| 久久网亚洲| 久久骚| 免费超碰97久久| 青久久| 在线小说视频一区| 一本色道久久综合狠狠操| 尤物AV免费网站| 久久久久久免费电影| 久久久草草精品| 18精品一二区| 欧美天天干| 91中出| 91P0RNY大屁股人妻| 欧美爱三级日韩久久| 午夜视频久久久久一区| www..com操老师| 可以在线观看AV的网站| 毛片电影一区二区三区| 日本九九久久99播| 日日噜噜夜夜久久亚洲一区二区 | 麻豆久久久一区二区| 国产亚洲色停停久久99精品91| 久久97精品久久久久久久不卡| 亚洲天堂资源在线| 91精品无码久久久久久久| 精品一区二区三区国产 | 久久超碰爱| 人妻日日夜夜精品| 91久久国产综合精品| 欧洲自拍色图gif在线| 精品国产乱码久久久影院| 精品人妻少妇| 色哟哟AⅤ| 亚洲天堂中文字| 中文字幕 国产区| 乱人伦 国语对白:视频直接看| 97天天摸天天碰| 青青草啪啪网| 天美传媒AV在线播放| 370p日韩欧美亚洲精品| renqi久久久久久久久久久久| 青青草吊丝| 941超碰| 欧美综合天天| 国产精品探花在线| 大香蕉伊人网WWWn0n| 啊啊啊啊啊啊啊网址在线观看| 人妻天堂网| 五月婷婷六月丁香网址| 一色网男人的天堂| 少妇高潮喷水无套久久久久久| 夜夜躁狠狠躁日日躁av| 国产精品探花在线| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 亚洲国产综合久久久性感熟妇| 涩涩久久精品| 无遮挡男女激烈动态图| 国产精品老师| 天天日美女的B| 中文字幕后石码三区四区| 日韩色| 亚洲、日韩、综合、另类| 天天综合,91入口| 91丨九色丨国产丨人妻在线| 黄页18禁| 91这里只有精品| 日本精品成人无码| 欧美国产操逼| 天天干人人干天天日97| 日韩懂色网| 九七超碰| 超碰97欧美在线| 日日躁天天躁狠狠躁| 欧美日韩性爱无码| 超碰一区二区| AV不卡在线| 躁躁日曰躁2020| 2020久久免费视频| 97天天搞在线| 亚洲国产成人精品女人久久久| 丁香婷婷大香蕉| 超碰在线在公开超碰在线在公开| 五月天丁香婷婷综合网站| 蜜臀色乳| 中国大陆国产高清AⅤ毛片| 色婷婷蜜臀av| 老司机天天操| 国产AV人人夜夜澡人人爽麻豆| 亚洲性爱免费电影| 久久综合久色欧美综合狠狠 | 特级毛片特黄久久免费看| 青青草成人视频在线观看二区| 天天视频网站黄| 中文字日本乱码| 成人免费视瓶| 中文字幕人乱码中文字的预防方法 | 四虎影视国产精品| 五月婷婷爱六月丁香色| 97这里有精品| 欧美有码亚洲中文字幕一区二区三区四区| 97操| 超碰碰激情97+久| 天天搞在线综合网| 少妇九九九九| 天美麻豆精品视频99| 国内毛片欧美香蕉精品| 夜夜骑天天燥| 久热9| 丝袜美腿av女优在线| 精品大久久| 黄色av网站在线播放| 土豪酒店各种姿势玩弄极品幼稚| 九九色图| 欧美爆乳精品一区二区| 天天综合网~91入口| 欧美日韩国内不卡| 秋霞色色影院| 蘋果手機免費看成人Av| 亚洲操逼网| 在线a亚洲视频播放在线| 中文字幕精品久久久久人妻红杏ⅰ| 99re公开精品免费视频| 亚洲色性| 美日韩在线不卡人妻| 亚洲乱熟女一区二区三区大香蕉| 97国产超碰| 久草精品一区| 成年女人一区| 殴美大黄片| av网站免费看| 成人情色综合网| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 国产97在线播放| 97综合在线观看| 91人妻尻屄视频| 99无码狠狠久久| 青青青草伊人精品| 欧美日韩人人早| 色婷视频| 女人高潮大叫一级毛片| 免费αV在线视频| 久久久女人| 欧美色图 人妻| 精品久久青青草| 亚洲 欧美 手机在线观看| 欧美日韩国产成人高清| 亚洲熟女人妻中文字幕一区二区| 日本中文字幕一区| 啊好爽受不了无码| 男人的天堂啪啪啪啪啪蜜桃不卡| 色呦呦呦在线观看视频| 99re热有精品视频国产| 97视频免费在线观看| 大香蕉2017| 久久久国产精品亚洲精品| 夜夜操91744565| 激情文学网伊人| 天天躁日日躁XXXXYY| av天堂精品久久| 99无码狠狠久久| 亚洲资源一区| 欧美97网| 0755午夜福利视频| 一卡二卡三卡| 91男人综合| 久久久精品一区二区| 媚薬在线视频麻豆| 亚洲综合性网址| 伊人国产视频| 校园春色中文字幕AV| 人妻天天爽夜夜爽精品2| 蜜臀久久久久久999| 成人情色一区二区| 老女人爆菊| 96AV精品| 美女的肌被草喷水视频| 欧美色图私拍91| 国产传媒1234区| 丁香五月天久久精品视频一区二区三区| 中文伊人大香蕉视频| 理论久久婷婷网 8| 欧美精品在线观看| 韩国女主播青草在线| 青青操在线亚洲视频观看欧美在线| 日韩av熟女一区二区三区成人| 大香蕉免| 亚洲男人天堂2013| 国产夫妻性生活视频| 伊人久大| 天天操夜夜操| 亚洲欧洲综合av在线| 人人妻人射| 日本道久久综合色色| 国内自拍 日韩激情 99| 丝袜 亚洲 偷拍| 91亚洲精品青草| 国产亚洲欧洲在线观看| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 嗯嗯啊啊的视频| 九九九成人| 国产无码精品久久久久久| 天天弄天天操| 激情AV| 9热9热综合网| 久久久久极品| 日本一级真人黄色性爱视频| 无遮挡一级毛片视频免费的| 性做久久久久久免费观看软件| 狠狠狠狠狠狠| 成人在线视频一区| 欧洲视频在线| 黄色av网站在线播放| 再深点灬舒服灬太大了好硬好爽| 久妇网| 久草成人影片| 亚洲自拍偷拍视频在线| 成人免费不卡在线视频| 伊人97色天使| 日韩欧美麻豆| 又粗又长又爽在线观看| 青青草中文-久久青草精品一区二区三| 热天堂一区二区| 中文字幕av片| 国产操逼视频在线观看| 在线只有精品| 天堂综合| 激情 欧美 亚洲 小说| www.91色| 五月天加勒比啪| 97亚洲综合影院| 黑人精品成人一区二区三区| 三上制服丝AV| 久久少妇| 97色色色| 安微少妇操BBB| 尤物黄色在线观看网站| 嗯嗯嗯,草死我| 精品久久97| 日本人妻伦在线中文字幕| 国产亚洲精品精AV.| 久久xxxx| 干妹子| 日韩簧片免费看| 天天日老熟妇| 蜜臀99久| 色色婷婷丁香| 日本加勒比无码专区一二三| 狠狠色噜噜狠狠狠狠2018| 天美麻豆精品视频99| 欧美色图欧美| 人妻22p| 日本精品一区二区三| 另类小说综合网| 嗯嗯嗯不要不要免费视频| 91n欧美| 久久久久婷婷| 操久久久久| 最新日韩黄片| 99精品无码| 天天色综亚洲91污| 天天天操天天天爱| 久久精品三级影视| 欧美亚洲韩国视频十五区| av无码av无码专区| 亚洲资源网| 色综合av男人天堂| 色777999综合| 99在线精品观看99| 色香av| 亚洲。日韩。欧美| 13小男生GAY自慰脱裤子| 嗯啊啊啊轻点视频| 干我久操| av线电影| 国产一级αv免费看片| 性欧美| 久久人妻精品| 新亚洲无码| 亚洲精品国产AV天美传媒| 眼镜人妻101.com| 久操在97| 欧洲熟妇xxXx欧美老妇裸体| 亚洲 在线| 99热亚洲天堂| 成人乱人伦一区二区| 久久九操在线观看| 日本色婷婷| 国产1024在线播放| 麻豆国产成人精品| 久久九九网| 人人操,人人液| 东京热精品97综合网| 精品国产久热在线观看| 91国模| 精品久久久久久久久久久久| 强奸乱伦av电影| 精品久久久久综合无码| 欧美白嫩女HD| 五月丁香婷婷色| 男女性无套 免费九一| 日日做夜狠狠爱欧美黑人| 久久婷婷色| 欧美中文字幕日韩在线| 午夜精品久久久99热蜜桃的功能特点| 欧美亚洲影视| 日韩丝袜二区| 久久久久久久强迫| 人伦四五区| 青青草日逼视频| 成年人性爱日韩| 久久久久国产精品久久久| 夜夜嗨绯色| 国产少妇肉丝在线观看| 日韩激情啪啪啪| 2017天天插| 国产偷人妻精品一区二区在线| 婷婷亚洲综合| 国模艳艳啪啪一区| 亚洲国产97| 插入粉嫩少妇视频| 大香蕉伊人网WWWn0n| 99热这里只有精品地址| 东京热视频网| 色妇综合网| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 色操逼网| 亚洲精品97| av影院十区| 超碰日韩美妻| 美女毛片999| 欧美精品另类人妖xxxx| 91九色网| 亚洲偷拍自拍在线视频| 国产探花精品在线| 久久性爱精品一区| 老司机福利青青草| 搡老女人老91二区| 国际精品久久久| 俺也射| 亚洲综合射| 啊啊啊好舒服好爽啊啊啊视频| 国产原创自拍| 六月婷婷综合| 激情av| 婷婷综合激情| 色婷网| 妺妺跟我一起洗澡没忍住| 无码丰满熟妇一区二区浪潮AV| 亚洲无码 国产无码| 久久人| 欧美日韩资源| 97国产超碰| 999999精品| 日韩15p| 97在线免费看视频| 东京热毛片177b2viP| 一本久道久久综合狠狠爱一密臀精| 亚洲狠狠入| 国际精品久久久| 99re这里只有| 97香蕉网| 久久无码一区二区二三区性色| 国产欧美在线观看免费观看| 三男一女不戴套的A片| 久久丁香久草综合网| 欧美性爱18观看| 熟女乱伦A| 日韩不卡毛片Av免费高清| 黄片无码在线制服| 婷婷五月综合在线| 亚洲另类综合欧美| 精品人妻夜夜草| 亚洲少妇色图自慰直播| 精品少妇人妻| 日韩欧美三级| 国产精品 视频| 久久性爱精品一区| 性色av网站| 激情久久久| 黄色二级片网站| 日韩欧美偷拍美女视频| 视频在线观看青青99国产| 日韩大香蕉AV影片| 色欲久久久久综合网| 久久久久久亚洲中文| 国产 v乱码一区二| 国产少妇与亚洲av| 亚洲大胆人体av| 高颜值美女口爆高潮浪叫| 97色网| av在线不卡一区二区三区| 岛园激情| 九一亚洲国产免费| 97伦乱| 丁香七月婷婷| 人摸人人操人| 69精品少妇一区二区三区蜜桃| 午夜欧美J进J出白浆流出久久久 | 亚洲成人美女无吗| 欧美精品人妻视频| 欧美大干日韩| 97国产精品视频| 欧美顶级黄色大片免费| 青青网三级视频| 九九九九免费视频| 日韩性爱啪啪视频| 无码抄逼网| 天美一二三在线观看Av| 亚洲丝袜在线观看| 高潮毛片无遮挡高清免费| 在线播放成人网站| 在线情色电影 91大 | 国产精品交换一区二区| 精品人妻一区春色| 青青草国产欧美非洲黑人| 99久久e免费热视| 香一区二区三区| 96超碰网| 蜜臀操逼黄色视频操的好爽| 人妻美腿丝袜制服诱惑综合天堂-| 成人情色综合网| 亚洲天堂一区二区久久| 在线啊啊啊啊| 日日躁夜夜躁狠狠躁超爽| 丰满岳乱妇一区二区三区 | 一本色道综合久久欧美| 99自拍视频| 色香综合天天影视综合 | 91粉芽高清在线一区二区| 屁股久久久久久久久| 人妻一区二区三区视频| 人妻少妇蜜桃视频欧美一区| 少妇人妻在线| 亚洲综合精品国产一区| 青青草男人天堂| 国产一区二区免费福利片| 人人喜人人妻| 校园春色亚洲| 亚洲丝袜色| 日韩在线电影| 九九九九九九九精品视频| 无码二级三级| 亚洲九区| 欧美宗合网| 九九热在线精品视频| 亚洲精品熟妇1区2区3区。| 三级三级三级a级全黄三| 亚洲天堂人人妻| 亚洲三区视频| 久久精品99久久久久久| 亚洲91在线播放影院| 色九九九综合| 国产精品欧美日韩久久| 中国的操老妇女| 亚洲色 国产 欧美 日韩| 很很很很操| 操逼操逼逼操操逼91 | 在线国产探花| 男女啊啊啊啊啊| 99久久久99久久91熟女| 91亚洲欧美激情| 玖玖人人爱| 国产午夜精品理论片a大结局| 观看免费区二区三区二| 1000部熟女视频在线观看| 欧洲乱码视频| 黄页视频网站野外| 桑老女人九区| 又黄又爽在线观看视频| 91在线视频国产网站| 二区熟妇韩日| 可以在线观看的黄色网址| 亚洲男人综合网| 不卡啪啪视频| 日日超碰亚洲| 久久久∴| 亚洲高清在线| 欧美AAAA黄片| 久久噜| 日本免费中文一区二区三区四区| 久久夜夜| 欧美色色人| 天天爽夜夜操| 翔田千里AⅤHD无码| 尤物视频偷拍免费| 亚洲男人天堂2019| 一区不卡在线观看av| 久久天堂网| 久久久久骚| 亚洲va有码在线天堂| 狠狠入| 自拍视频大全亚洲专媒视频/一区二区三区 | 人妻精品一区二区| 国产欧美日韩臀| 国产高潮AA片免费看| 日本久久女同性恋视频| 丝袜高跟澳门91视频| 麻豆 欧美 日韩| 粉嫩不卡一区二区性爱| 激情色图| 欧洲站一级二级三级h| 国产精品91一样| 91天堂色男人的天堂| 97免费在线| 搡老女人老91妇女熟女| 欧美少妇大量自拍视频在线观看| 思思热国产在线视频| 久久久久久久唑| 九九九九九九九九九九精品视频| 久热免费视频| 看黄片视频免费| 操屄日韩| 久久99九九九九6666免费观看软件| 夜夜国产一区| 欧美精品成人亚洲| 色色色色电影网| 中国一级操逼视频| 国产后入| 加勒比aⅴ| 亚洲色图综合网| 天天综合网91入口| 婷婷五月天伊人| 国产一区二区三区导航| 国产Av超碰| 色图综合网| 激情综合 婷婷五月 红杏| 亚洲偷拍欧美激情| 啊啊啊不要啊啊受不了了视频在线| 久久久九97| 超碰精品在线| 99热在线观看| 操逼操逼逼操操逼91| 亚洲AV无码乱码| 91夜色| 大香蕉中文在线| 天美av在线| 伊人嫩草| 蜜臀一二三区| 日韩人妻精品| 亚州男人的天堂| 九九九九九用不成了| 啊好爽受不了无码| 香蕉一区二区三区在线视频 | 国产欧美在线观看免费观看| 麻豆精品.欧美精品.日韩精品.| 性色高清..……| 日韩中文9| 超碰到97情色| 五月天亚洲网| 少妇熟女视频一区二区三区| 久久久成人精品| 少妇内射视频| 中文字幕精品亚洲熟女| 色香综合天天影视综合| 激情四射婷婷六月天| 亚洲偷拍欧美激情| 国产亚热在线久久| 人人操人人精品影片| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 清纯唯美综合| 超碰97 线线 在现| 亚洲色91| 青娱乐福利99| 天天干人人干天天日97| 久久人人舔人人爽舔人人av片| 思思热在线cao| 欧洲一级性爱视频在线观看| 欧美性爱另类综合| 欧美激情综合色综合啪啪五月| 五月婷婷五月天| 中文一区二区婷婷视频| 一区麻豆 高清中文字幕| 狠狠夜色午夜久久综合在线| 97精品中文字幕| 九九热只有精品| 少妇久久久久久久久| 日本伦乱九九九综合| 国产黄片精品在线| a在线视频免费观看| 人妻少妇精品一区二区三区| 97一区二区蜜臀| 97网址97| 欧美激情专区| www.伪伪| 久久丁香五月天| 大香蕉伊人网WWWn0n| 亚洲天堂日本| 国产97亚洲| 熟妇的味道HD中文字幕| 久久一区二区三区入口| 天美麻豆精品视频99| 大香蕉一人在线| 东京男人天堂| 亚洲日韩精品久久久久一区壹牛| 午夜120视频在线观看| 激情五月激情综合网| 日本一片一区| 夜夜黄| 91av一区二区在线观看| 国产激情综合| 日本大香蕉| 久午视频| 屁屁影院一区二区三区国产| 小草三级久久观看| 国产热av| 亚洲无码国产探花在线观看| 日韩一级欧美一级在线观看| 精品国产污一区二区三区| 亚洲自拍偷拍视频在线 | 亚洲 无码 偷拍| 99性爱在线观看| 日本 成 人 小说 电影 一区二区| 97超碰色屌| 亚州综| 东京热男人的天堂精品| 91久久精品国产| 熟女91网| 在线无码视频| 久久a久久| 96超碰网| 强奸乱伦动态污图免费| 日本A级视频| 久草在线| 色婷婷av在线观看| 日本久久999| 免费av在线播放二区| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 嫩草影院在线观看精品| 青青草视频久久久久| 91制服丝袜中文字幕| 自慰白浆在线观看| 日韩不卡网操逼中文字幕日韩| 最新国产精品| 日韩免费人妻色情网站| 天堂亚洲精品| 亚洲中文字母在线播放| 无码人妻精品一区二区三区九九 | 亚洲自拍欧美国产首页网曝| 精品人妻一区二区三区日产| 97在线精品| 久久久久久人| 亚洲无码久久久久久久| 在线观看午夜婷婷久久久久清性观看| 三级日韩一区二区三区| 亚洲色堂免费视频| 男人午夜天堂| 殴美牲| 男人天堂网址| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 熟女一区二区| 丰满人妻aA一区二区三区| 天美麻豆精品视频99| 亚洲综合20p| 97天天搞在线| 青娱乐国产剧情av一区| 天天干天天日天天射黄色| 九九九九精品九九九九| 国产日本熟女顶级一区二区三区视频 | 揉揉日日日日| 欧美后进式| 97超碰日韩| 偷拍 亚洲| AV乱伦国产| 东北女人的毛片| 新久久AV| 四虎免费视频| 日韩av乱伦| 酒色综合网| 久极品在线观看| 五月天久久综合网| 亚洲视频二区 | 久久久久久久久久久久欧美日| 在线视频免费播放一区| 日本免费二区三区| 欧美亚洲综合色| 亚洲精品一二牛牛| 自拍亚洲综合| 日韩婷婷| 草草草视频在线免费看| 九九九九九九成人| 操逼网免费无码视频| 男人的天堂va在线| 中日韩久久人妻一区二区| 性影在线视频| 天天欲望网| 免费人人搞97| 8050午夜少妇无码| 国产久久久| 精品999日本| 国产高潮AA片免费看| 污色区网站| 亚洲高清在线se| 香蕉在线一区二区三区| 在线观看无码三级少妇| 亚州,欧美在线| 在线天堂999| 欧美系列在线一区二区| 国产精品播放| 国产妇女精品视频青青草| 六月丁香久久| 九九视频黄色片| 精品国产a∨一区天美传媒| 国产一区二区三区不卡手机在线| 91三级理论片播放器| 亚州综合网| 大香蕉伊然在亚洲91| 熟女丝袜视频| 亚洲AV无码国产精品久久久久| 麻豆天美91| 国产suv精品一区| 久久精品天美| 激情色播| 3P乱轮视频| 91久久久亚洲| 亚洲一区中文字幕| 91/欧美| 中日无幕一二三四区| 99热这里只有精品地址| 亚洲天堂在线怕怕视频| 久热伊人| 九九免费影片| 国产精品视频播放| 嗯嗯啊在线视频| 免费中文在线| 国产在线视频二区| 成人怡红院| 自拍啪啪视频| 九九九九九九九九九九九九九九九女| 你操综合| 国产精品色色| 久久久免费一级黄片| 久久久久人妻二区精品叶可怜| 国产99999| 国产尤物在线三区| 亚洲91综合| 黑人与人妻| 青青草伊人久久| 91亚洲不卡一区| 大香交伊人网| 五月天大香蕉| 91站街按摩店老熟女熟女| 亚洲精品官网在线观看| 久久黄片国产一区二区| 26UUU欧美日本| 九九九热| 亚洲欧美首页| 青草成人免费视频一COm| 97人人夜| 亚洲欧美综合网 | 五月激情天| 一区二区三区机械有限公司| 国产亚洲日本精品在线| 色呦呦呦在线观看视频| 成人精品一区二区91毛片不卡| 一级人妻性爱视频| 搡老熟女免费视频| 20cm女自慰在线日韩欧美| 国产 日韩,欧美 自拍| 91老熟女视频| 久久老女人| 国产精品美女视频诱惑| 国产免费一区2区3区| 碰碰97| 欧美日韩大香蕉| www.yeyecao| 操逼片国产| 殴美在线AⅤ| 日本道久久综合色色| 99热在线观看| 蜜臀久久99精品久久久久久久久| 久久久草成人网站久久久草成人久久久草久久久 | 麻豆熟妇乱妇熟色A片在线看| 被体育老师抱着c到高潮| 欧美成人一级免费电影| 日韩丝袜二区| 日本久久99| 啊好大好舒服| 91丝袜激情在线 |