久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码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
返回資訊列表
草莓精品视频在线免费观看| 国产熟女免费观看久久| 超碰 另类 欧美| 亚洲成人在线高清| 日本高清视频xxxx| 超碰97网址| 国产麻豆福利av在线播放| 蜜臀AV一区二区三区| 日韩人妻大香蕉| 操逼天美3区| 天天色综合影视网| 欧美一二级| 久久人妻丝袜一区二区三| 日本人妻伦在线中文字幕| 四虎免费视频| 麻豆AV96熟妇人妻| 国产最新AV| 国产91精品福利在线| 后入人妻无码| 超碰色美女| 欧美伦乱爱| 人人操AV| 色五月大香蕉| AV九九| 日韩在线性爱免费视频| 国产精品亚洲色婷婷久久久| 亚洲欧美人妻| 91色夜| jiujiujiujingpin| 亚欧中文字幕在线视频| 亚洲天堂综合AV| 国产亚州高清国产拍精| 一个人免费HD91视频| 美女熟妇色| 蜜臀久久99精品久久久久久婷婷| 亚洲第一页综合在线| 91国产美女丝袜足交精品视频| 久99热| 男人高清无码一区二区| 国产女人和拘做爰视频 | 欧美色五月| 免费中文在线| 51一区二区三区| 萌白酱自拍视频| 香蕉国产精品麻豆亚洲欧美日韩| 超碰色老头| 密臀在线一区尤物| 久操免费观看| 天天久久| 国产精品自拍视频| 中文字幕亚洲永久精品| av日韩国产一区二区| 极品销魂美女一区二区| 日韩激情电影中文字幕| 国产av美女被艹的乱叫| av在线不卡一区二区三区| 天天懆天天日| 欧美 日韩 亚洲 春色| 日本高清_区二区三区| 欧美亚洲尤物久久| 激情丁香婷婷| 国产丝袜美女诱惑| 影音先锋一区二区在线资源| 国产一区二区久久| 亚爽爽爽爽爽爽爽爽| 区一在线观看| 新精精品久久精品| 日韩有码回春沙龙第一页| 美女上床网站| 波多野结衣之双飞调教在线播放| 日韩免费高清大片在线| 影音先锋乱| 午夜色婷婷| 天天干,夜夜爽| 国产原创自拍| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 97看操| 97精选久久| 天天夜夜rb| 九九九九热| 国产成年女人免费视频播放a| 激情小说图片亚洲首页| 免费簧片在线观看| 九九九九九九九精品视频| 亚洲性爱高潮影院| 蜜臀99精品国产高清在线观看| 东北女人高潮视频| 26uuu欧美日韩| 日本午夜福利影院| 超碰人妻中文在线| 97这里只有精品| 麻豆国产视频精品观看| 欧美男人一区| Aa东京男人的天堂| 少妇第一页| 久久久九| 国产精品自拍xxxx| 蜜桃成人1区2区3区| 欧美日韩亚洲天堂网| 色九九久九九| 午夜AV人气不卡| 一区二区三区在线资源| 欧美日韩国产色五月综合在线| 激情四射婷婷四五月天| 日韩三四五区| 丁香五月久久| 蜜伊人色综合97| 超踫中文字幕| 天天综合网一91网| 午夜福利在线视频1000| www国产无码| 欧州一区二区三区四区| 婷婷亚洲综合| 福利操逼| 偷拍欧美激情| 天天影视网综合少妇| 欧美少妇性爱网站| 丝袜亚洲91| 2021国产成人精品久久| 亚洲熟妇极品| 在线洲亚线| 9久久精品| 夜夜高潮夜夜爽国产伦精品| 一二三啪啪专区| 国产精品极品美女视频| 欧美日韩国产高清在线一二三区 | 亚洲色欧美| 久草国产在线视频| 欧美天天谢综合网| 色诱avtt| 国产sv美女内射| 伊人色综合网电影| 国产熟女高潮一区二区三区| 国产真实野战在线视频| 神马久久免费电影观看| 亚洲无码一区二区三区三州| 亚洲综合伊人无码久久| 婷婷91| 嗯~啊~轻一点 视频| 欧美日韩操逼嗦吊| 情色大香蕉| 色婷婷综合网站| 欧美性第1页| 伊欧美综合视频| 加勒比综合九九99视频在线播放| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 亚州欧美另类| 熟妇熟女一区二三区| 超碰97人妻在线| 99爱久久视频频| 天天看精品动漫视频一区| 人妻天天爽夜夜爽精品2| 91色色网站| 做爱福利视频一区二区| 日va操| 9997se| 五月婷婷性爱| 影视综合无码少妇| 亚洲欧美天| 美國A片| 91天堂丝袜美腿| 久久久中文| 屁股久久久久久| 精品国产网站| 欧美日韩操操操| julia国产在线 | 久久av成人无码免费| 亚洲综人| 91暧暧| yellow网站免费观看日韩高清无码| 97亚洲欧美日韩| 天美精品原创av片国产| ai欧美亚洲小说| 国产后入清纯| 国产精品夜夜夜| 思思热在线观看| 亚洲啪AⅤ永久无码| 国产精品视频在线观看| 国产嫩草精品A88AV在线| 天天日天天搞天天干| 极品美女嘿咻| 欧美性爱系列| 91黑人狂躁丰满熟妇| 国产精品无码AV网站| 亚洲精品a人片在线观看视| 欧美一级久久久久久久大片动画| 欧美精品丝袜久久久中文字幕| 亚洲图片偷拍视频区| 99视频自拍区| 理论久久婷婷网8| 风间由美日韩欧美久久| 欧美色综合网| 久久的网站啊啊啊啊啊| 久久嫩草国产成人一区| 日韩女模中文造逼| 干b网| 极品色www影院| 日本三级一区二区 在线| 天天舔九色婷婷| 大香久久| 97精品全部| 九一性生活免费视频| 欧美亚洲韩国视频十五区| 久久久久久久伊人精品| 成人蜜乳小视频网站| 色路综合| 国产家庭乱伦性爱视频| 天天综合有色网| 91精品综合久久久久久五月丁香| 日韩国产乱子伦App| 人妻一区二区三区视频| 麻豆国产97在线| 人人操人人肉久久精品| 夜夜欧美| 欧洲综合色| 久久青娱乐| 精品人妻一区春色| 秋霞鲁丝午夜无码一区二区三| 歐美一級亂黃99在綫精品| 99激情视频| 高清在线偷拍自拍视频| 久久久婷| 91色黑人少妇| 99热精品国产| 久久久久久国产精品| 欧美性爱一级操| 亚乱色| 全免费a敌肛交毛片免费| 大香蕉一区二区在线观看.| 青草草免费网站av| 老司机天天操| 亚洲 欧美 手机在线观看| 国产无吗在线播放| 亚洲av无码成人精品国产| 日韩精品怡红院| 亚洲日本大香蕉1| 欧美天天综合站| 蜜桃臀 后入 一区 二区 三区 在线| 亚洲男人bt天堂| 91国产精品在线看| 久久综合精品一区二区三区| 日韩钢筋无码高清啾啾啾| 天堂资源欧美| 国产精品对白内射| 91丝袜人妻| 乱伦熟女论坛| 秋霞视频一区二区| 亚洲s色图| 一区二区三区看视频| 啊啊啊久久久视频| 骚逼高潮久久精品| 欧亚洲精品有视频| 欧美少妇一区二区三区| 亚洲国产欧美另类自拍| 精品一区二区亚洲国产| 91精品国产综合久久久蜜臀酒店| 97人人超| 蜜臀无码一区二区| 免费操逼视频下载| 91久久久老司机| 美女操逼福利视频| 五月婷婷六月丁香| 97av,com| 97超碰国产亚洲精品| 九九热视频在线观看| 丝袜亚洲综合| 欧美亚洲中文| 91粉嫩萝控精品福利网站_精品影音先锋国| 男女一级A片大黄,一进一出| 亚洲aw毛茸茸在线| 青草精品视频一日本久久久久网站| 超碰人妻97| 午夜超爽| 97网址www| 91亚洲狠狠色| 久草成人| 婷婷久久五月天| 97超碰亚洲| 97碰久久| 久久人妻视频网| 超碰97首页| 国产精品人妻免费精品| 日韩性爱网址| 99色日| 777超碰| 久久久久久精品免费看A级| 少妇二级| 啊啊啊啊好疼| 插欧洲美女欧美精品| 97色爱| 99热销国产这里有精品| 91色色综合| 91人妻熟女| 欧美强奸一区二区诱惑| 人妻大香蕉| 亚洲 欧美 偷拍 唯美| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 亚洲国产精品久久久久婷婷老年| 你懂的在线观看区国产| 在线啊啊啊啊| 欧美高清色| 深爱五月婷婷| 麻豆成人影音在线| www.五月天| 亚洲丝袜二区在线| 日本色色视频网站| 性色av一区二区| 精品亚洲成人免费在线| 有码人妻系列| 欧美一级美片在线观看免费| 免费看污网站| 国产操逼逼网| 久久69| 久久久蜜桃一区二区三区| 色噜噜国产精品视频一区二区| 在线播放中文字幕| 伊人国产AV| 六月丁香久久| 欧美 亚洲 在线| 亚洲日韩AV视色| 欧美色网络| 99久热| 久久久九九九| 亚州色站 日韩电影| 91免费看一区二区三区 | www久久国产精品| 极品粉嫩一区二区| 国产特级毛片AAAAAA高潮流水 | 91亚.色| 亚洲AV不卡在线观看尤物| 边做饭边操逼逼| 大香蕉伊在线久草麻豆天堂故事| 巨爆乳一区二区爆乳区| 91视频综合在线| 日本在线不卡一二区| 麻豆天美在线| 五月天伊人| 久综合国内精品自在自线| 色踪合AV| 亚洲午夜免费狠狠干| 秋霞色色影院| 男人天堂网手机版婷婷| 婷婷久久综合久| 狠狠操,使劲操| 天天摸夜夜操视频| 精品久久久久,69国产成人精| av影片在线观看不卡| 香港成人一级视频在线青青草| 少妇人妻好深太紧了vr91| 狠狠爱夜夜干| AV天堂丝袜| 日韩97精| 日本中文字幕在线电影| 草莓精品视频在线免费观看| 少妇精品| 60秒免费小视频| 5278欧美一区二区三区| 人人摸人人入| 蜜桃臀一区二区三区久久| 激情一区二区三区在线观看| 香蕉热人人精品| 国产91丝袜 在线播放| 色香欲天天天天综合色| 爽 好舒服 无码刺激久久| 97超碰人人模人人拍人人| 97精品一区二区视频在线观看| 欧美欧美少妇| 日本性爱视频一级| 国产高清视频无码在线| 97精品97久久| 精品国产污一区二区三区| 日本2020一区二区| 国产精品永久免费10000| 九热中文字幕| 国产AV高清AV无码| 国产做?爰片久久毛片?片美国| 在线天堂资源亚洲| 中文字幕欧美日本乱码一线二线| 美腿丝袜偷拍亚洲欧美| 欧美色偷拍| 欧美激情五月天| 青娱乐国产精品| 黄色无码高清黄色无码网站| 美女黄页网站| 国产精品电影推荐| 久草五月| 大香樵伊人网| 2011国产精品| 强乱老妇中文字幕| 99国产在线 精品 视频| 中国国产精品一区视频| 激情国产乱伦Av| 天天久久| 亚洲啪啪综合?v一区综合精品区| 夜夜夜爽www精品视频| 国产精品色| 免费观看日本操逼视频| 五月天亚洲网| 精品国产三级av韩国在线| 日本大香蕉综合网| 麻豆av一区二区| 超碰综合97在线| 亚洲天堂日本| 亚av顶级裸体一区二区三区四区五区 | 亚洲网站一区二区在线| av在线一区二区三区| 啊a一区在线| 青青草精品| 午夜久久一区二区无码中出| 在线人妻熟女一区二区三区四区五区| 丁香五月社区| 夜夜嗨一区二区| 97天天摸天天碰| 在线观看一卡二卡| 国产嫩草精品A88AV在线| 欧美精品在线观看| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 激情文学88| 色色99| 亚洲 国产 精品一区| 九九九久久久久| 午夜精品久久久久| 久久久久久免费电影| 一区二区三区男人的天堂| 九九九久久久W精品| 亚洲欧美不卡线| 欧美日韩精品国产91| 久久人妻熟女一区二区| 欧美曰韩国产精品| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 啊啊啊啊,啊啊好多水| 在线观看啊啊啊啊啊| 欧美96精品在线| 国产区日韩区在线观看| 国产高清26uuu| 色婷婷五月综合激情中文字幕| 国产男女无套视频免费观看| 国产免费大片| 人妻少妇精品无码专区二区密桃| 色吧91| 欧美十八禁视频| 91粉嫩萝控精品福利网站_精品影音先锋国 | 欧美v日韩v亚洲v最新在线| 亚洲欧美日韩二区视频| 大香蕉520| 最新av在线| 国内毛片四区| 中文字幕日韩人妻视频一区二区三区 | 亚洲成人福利电影免费| 这里是精品| 亚洲精品蜜桃久久久| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 国产免费一区| 色屁屁影院www国产| 欧美成人一区二区三区在线播放| 9久久精品| 91久久堂| 日韩免费av片高清无码| 亚洲AV无码黄色强奸| 国产四虎在线| 青草一区二区| 国产 三级自拍| 天天干天天日天天射黄色片| 国语少妇精| 日韩 欧美 另类 人妻| 大香蕉十区| 日本女人久久久| 啪一啪免费视频| 久久国产精品,久久国产| 老司机香蕉| 人妻精品视频一区二区| 激情文学 亚洲图片| 在线看的av| 午夜天天碰综合视频| 清纯唯美综合| 无码国产精品午夜不卡( | 无码逼| 欧美日韩淫加| 天天综合网亚洲综合网| 久9综合在线| 激情接吻视频久久久久久| 97 九色| 欧美性91| 一区二区三区在线资源| 亚洲欧美日韩不卡人妻| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 91色人妻| 亚洲精品黑丝| 日韩成人大片一区二区| 欧美日韩系列| 水野优香在线观看| 加勒比综合网| 啊啊啊好湿久久| 人人妻人人色一区二区三区| 免費黃色視頻觀看一| 青青草中日韩在线| 亚洲午夜av| 天天操天天7| 人人操人人摸人 | 香蕉国产精品麻豆亚洲欧美日韩| 91精品微拍福利| 少妇久久久免费| 思思久热在线精品66| 欧美三级免费伊人| 久久久精品无码亚免费| 亚洲欧美综合网| 人人爱人人操人人性| 男人天堂最新手机版在线青青草| 国产亚州日韩欧美看片| 天天天干977| 97超碰jingpin| 伊人久大| 99热精品青草在线 | 黄色在线网站| 4tube欧美女厕所| 伊人97超碰| 高潮的A片激情扒开一区| 日本孕妇孕交| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 欧美日韩中文字幕人妻| 亚洲精品天天影视综合网| 人妻 丝袜美腿 中文字幕| 欧美淫乱视频| 人妻密肉在线观看| 精品久久无码午夜福利| 麻豆国产成人精品| 操逼视频免费日韩无码| 日韩无码一区二区三区| 伊人久久亚洲中文字幕不卡| 人妻干天天| 国产精品午夜福利| 天天看特黄的免费网站| 丁香五月婷婷色| 国产狂喷潮在线精品| 欧美同性恋 的搜索结果 - 91n| 亚洲精品一区二区三区新线路| 成年人三级黄色片视频| 天天干嫩逼网| 欧美亚洲色的图| 99久久综合| 超碰国产在线| 亚洲欧美日韩免费电影| av天堂加勒比| 精品女同一区| 天天摸夜夜操视频| 91偷拍欧美亚洲| 精品超碰中文在线| 欧美在线播放aaaa| 亚洲无码久久久久久久| 特污精品女优骚货黄色视频在线免费观看| 欧美伦乱爱| 麻豆精品久久久久久久| 99在线精品观看99| 日韩av不卡在线观看| 午夜一级免费毛片| 三级精品三级在线观看| 亚洲中文字幕久久无码精品| 欧美黑人168页欧美黑人167| 91欧美另类| 欧美精品 - 91爱爱| 91肏屄网| 九九毛片这里只有精品| 国产一区96在线| 久久久精品视频免费观看| 岛国福利在线精品播放| 富女玩鸭子一级毛片| 东京热双插| 国产精品久久久| 91无摭挡| 一二三卡欧美日韩人妻免费精品| 国产成人啪一区二区| 无码人妻系列少妇| 国产精品国产| 欧美激情一| 91色人| 欧美色亚洲色| www.男人天堂| 精品一国2| 激情四射五月天| 丰满人妻一区| 亚洲图片 欧美电影| 夜夜爽夜夜操| 天天草天天日| 午夜视频黄| 熟妇综合一区二区三区| 免费看黄片现成| 正在播放国产精品一区| 久操网线| jiujiujiujingpin| 特级丰满少妇一级AAAA爱毛片| 日本三级一区二区 在线| 伊人久久综合影院| 97国产高清视频在线观看| 亚洲免费成人在线高清无码视频| 国产精品美女在线一区| 91爆操视频| 国产久久久久久久久一区二区| 亚洲精品成人| 岛国小电影| 清清草影| 欧美少妇性乱| 精品一级| 网友自拍第一页| 偷拍三区| 男人天堂久久精品| 东北老女人的激情视频| 天天草AV| 亚洲91色| 丁香五六月啪啪| 国产精选三级在线观看| 久久国色天香香蕉| 日日干夜夜骑| 乱伦一二三| 密乳AV免费观看| 五月天激情四射| 91色情黑丝搞鸡在线观看一区二区三区三州 | 伊人久久艹| 91 国产丝袜在线放观看| 精品一区二区三区四区外站| 欧美熟妇色| 日韩精品一区二区高清| 国精精品无码一二三区水多多| 美女露胸露屁股| 2026国产精品视频| 看全色黄大色大片免费视频| 欧美一级黄色18片免费看| 91丝袜在线观看| 久久国产性爱| 男同专区一区二区三区在线| 屌逼传媒| 中文字幕少妇色 | 久久九九99| 狠狠色婷婷777| 欧美老妇女内射网址| 精品人妻久久久| 蜜乳AV.COM| 男人亚洲91首页在线| 久久蜜桃综合网| 91在线观看,天天综合| 欧美亚洲素人制服精品| 深夜啪啪啪视频免费| 亚州五月| 久草免费福利在线播放| 91新在线欧美| 欧美中出| 人妻少妇精品一区二区三区| 久久9999| 在线免费观看高清无码视频| 久久久久成人蜜桃精品| 欧美 日韩第一性色| 黄色AAAAAAAAAAA大片| 歐美一級亂黃99在綫精品| 91操熟女| 97在线免费看| 亚洲97在线观看| 中文字幕日韩综合| 久久粉色| 乱精品一区字幕二区| 综合网少妇| 亚洲中文一区二区三区视频| 91美女視頻| 欧美日本中字另类在线| A啊啊在线观看| 亚洲色图尤物视频| 中文字幕片| 免费观看性欧美一级| 少妇免费视频| 亚洲另类色综合网站| 天天色播亚洲综合网站| 久久中久文96| 欧美黄色手机在线观看| 北条麻妃99精品青青久久| 亚洲男人天堂av| 欧美亚洲中文字幕| 99re6在线视频播放免费精品| 99人人干| 久操免费观看| 丁香婷婷色五月| 少妇专区一二三四五| 国产成久久综合片| 熟妇人妻一区二区三在线| 91春色| 色综合潮| 夜夜骑夜夜操| 绯色AV粉色AV蜜臀AV| 人妻丰满熟妇一区二区三| 夜夜爽爽夜夜精品视频| 激情啪啪拍91| 天天综合官网| 欧美色997| 九九黄色视频在线观看| 91中文字幕制服丝袜免费视频| 日韩啪啪啪啪啪| 深夜福利黄片| 超碰97欧美日韩| 中文字幕在线日亚洲9| 欧美日韩中文视频播放| 婷婷四五区| 国产性爱在线视频一区二区| 超碰偷拍| 大香蕉在线免| 91综合在线| 中文字幕高清精品一区| 97国产精选| 亚洲aw毛茸茸在线| 超碰日韩人妻| 99啪啪| 天天操人人操骚逼网站| 巨爆乳肉感一区二区三区竹菊影视| 五月婷亚洲精品天堂| 中文字幕十五区| 丁香六月综合激情| 色网在线视频观看免费| 上特色A在线| 91美女看B| 亚洲精品日韩国产欧美| 啪啪啪东京| 啊啊啊啊好爽好舒服一区二区易域| 蜜桃视频一区二区三区在线观看| 东京热免费视频| 天天色,天天干,天天干| 免费视频一二三区| 2017,超碰| 天美传媒AV国产在线| 无码99| 精品成人亚洲午夜电影| 天天综合~91| 在线视频资源| 欧美第二页午夜| 女人妻一区| 蜜臀av一区二区三区免费观看| www.黄色在线| 手机在线免费看的av| 亚洲熟女诱惑| 亚洲影视第一页| 麻豆天美国美国产| 亚洲老熟妇xxx| 色五月综合网| 欧美成人黄网色网站| av网页一区二区三区| 人妻偷拍一区二区三区| 久久系列| 欲香欲色综合天天伊人| 色色青青久久| 99热日| 91人妻Pr| www.超碰在线| 国产黄色av大片网站| 91男女| 天天综合网站| 爱我干综合| 韩国一级婬片A片AAAAA| 免费伦费视频在线观看| 亚洲无码com| 男女啊啊啊啊啊| 尤物视频新赏网鲜网色诱网| 死我十八禁| 日韩三级性| 亚洲国产中文字幕| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 97人妻人人躁人人玩人人| 美女91色黄18| 色777999综合| 久久久久幕乱码| 亚洲熟女诱惑| 亚洲天堂2020| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 欧洲一区二区三区四区在线观看| 97超碰总站| 少妇大屁屁| 人妻天堂网| 超碰97亚洲| 日韩黄片视频试看| 欧美日本一区二区a人| 欧亚性爱啪啪| 久99| 人妻激情另类| 久久一区,青青青青草视频在线播放| 欧美成不卡网| 中文字幕第23区| 蜜臀va69| 亚洲欧美第一页| 亚洲最新中文字幕免费| 在线观看日韩av不卡| 日日夜夜干| 精品无人区麻豆乱码久久久| 日日噜噜夜夜久久亚洲一区二区 | 99国产在线 精品 视频| 久久‘黄片视频| 丁香五月色情| 欧美色图亚洲特色| 伊人宅男大香蕉| 99久久久无码国产精品性啊聊| 国产精品久久久久久亚洲色欲| 久操免费在线| jk白丝没脱就开始啪啪| www.激情| 亚洲精品欧洲精品| 亚洲日本大香蕉1| 加勒比海人人操超碰在线| 一级乱伦网站| 国产精品熟女九色九色蜜臀| 国产一区二区在线电影| 99国产精品人妻人伦| 91五月天| 91在线免费精品视频| 狠狠色噜噜狠狠狠狠狠色综合久久| 六月丁丁香| 蜜桃精品一区二区三区久在线| 国产99热| 国产精品久久久久无码AV会牛| 日韩免费性爱视频在线观看| 91美女在线视频| 超碰99在线| 亚洲天堂中文字| 国产久久久9999| 九九九九热只有精品| 国产一区二区三区久久久精品| 亚洲一卡2卡3卡4卡乱码网站 | 99精品国产户外露出| 在线强奷到舒服的无码视频| 蜜桃久久久久久久| 国产精品农村妇女精品| 天天综合网日韩7799| 日本精品人妻少妇一区二区| 色97欧美| 黄色性爱网网| 99热日| 日本潮催一卡操| 日本精品一区三区| 成 人 A V免费视频在线观看| 精品国产无码中文| 国产一区二区三区视频在线看| 情色图区| 97视频www| 久操91视频| 青青草密桃在线播放| 九九热九九热| 激情接吻视频久久久久久| 欧美久久久15P| 国产精品久久久久婷婷二区次| 很很热性爱视频| 欧美午夜视频| 91人妻最真实刺激绿帽| www九九热| 密臀国产在线| AV污污污污| 小草av不卡亚洲二区 | 一区二区无码视频| 99久久久无码精品国产人| 韩国女主播青草福利视频| 婷婷色综合欧美日韩| 丁香五月综合| 日韩欧美女求操每天更新| 免费久久精品麻豆一区二区av| 玖玖大干人妻| 日本欧美国内在线| 97色操| 亚洲福利中文字幕在线| 九九九草| 日韩性爱播放| 亚洲人妻爽爽爽| 欧美极品女人的天堂| 亚洲丝袜诱惑| 女一区二区| 日韩欧美国产一区二区三区四区| 超碰夫妻97| 国产成人一级av88| 日日摸日日碰| 国模精品娜娜一二三区| 精品夜夜澡人妻无码AV| 婷婷五月天激情网| 91露脸熟女专区| 日韩无码AB| 色一色综合网| 曰韩中文人妻视频| 99亚洲人人| 特级丰满少妇一级AAAA爱毛片| 330Dv国产女人终合视频极品人与兽| 日日操免费视频| 99re6国产精品99re| 国产女同视频在线播放| 天天影视之亚洲综合网| 色五月激情网| 高清无码久操视频| 国产视频大全| A V少妇特黄三级| 日韩精品字幕| 中文字幕人妻色偷偷久久皮 | 中文?日韩?免费?精品| 大香蕉综合久久| 亚洲色图亚洲无码强奸乱伦| 亚洲熟女人妻中文字幕一区二区| 欧美色图偷拍另类| 国人欧美精品一区二区| 婷婷五月天激情四射| 欧美激情亚洲情色| 天美国产三级传媒| 男啪女色黄无遮挡免费观看| 91jk色拍| 五月婷婷综合网| 波多野结衣之双飞调教在线播放| 天天综合91在线| yiqicaoav| 天天搞欧美| 青苹果影院男人的天堂| 中文字幕日韩专区精品系列| 九九九不卡| 男女激情中文字幕| 丁香五月社区| 亚洲中文国际强奸字幕| 99久久99久久免费精品蜜臀| 欧美少妇高潮久久91| 熟女乱伦二区| 2017人人操,人人摸| 蜜臀99久| x97av| 97碰碰日本乱偷人妻中文的| 激情五月天综合网| 淫荡少妇免费| 74成人在线| 97视频在线免费观看| 四虎影视永久在线观看精品免费网站| 国产高潮AA片免费看| 1024人妻熟女一区二区三区| 91AV入口| 亚洲欧洲激情卡通另类文学四射小说网站| 91美女国产在线| 一区,二区,三区视频| 91久热这里只有精品| 天天干夜夜一操| 懂色av色欲av蜜臀av| 一二三区操逼国产91| 青青草在线视频欧美| 五月天社区| 抽插无码高清一区| 日本三级一区二区 在线| 亚洲男人久久综合天堂| 久久久久白虎| 91爱| 国产丰满熟夫69mpp| 大香蕉免费3| 久艹日日日| 欧美精品久久| 久久妇| 色翁荡息又大又硬又粗又爽| 毛片视频白嫩| 97色97干| 97视频免费播放| 黄色成年| 97午夜剧场日韩| 天天看片天天爽| 99这里只有精品| 亚洲综合色网| 九九九九九九九精品视频| 最好看的中文字幕在线2018| 中文字幕一区电影在线观看| 欧美一级黄片视频在线| 亚洲高清无毛一区二区| yaouchengrenav| 日韩一区二区精彩视频| 成人26uuu| 欧美se综合| 夜夜欢天天干| 九九九免费视频| 成人五月天丁香激情综合| 操逼逼一区视频| 天天操夜夜操狠很操| 欧美日韩不卡a片| 成人小说视频在线精品欧美| 噜噜噜在线视频| 26UUU欧美激情一区二区| 色屁屁影院www国产| 高潮毛片无遮挡高清免费| 青娱乐亚洲自拍| 久思思热视频在线观看| 国产黄色小视频网站| 国产精品黑人一区二区三区| 国产中文精品一区二区在线观看| 久综合国内精品自在自线| 亚洲阿v天堂无码z2018| 丁香五月性| 欧美78p| 久久神马影院| 夜夜操av亚洲一区二区| 97一区二区三区视频| 欧美手机在线综合| 久久久久一本一区二区青青蜜月| 四方色播| 精品无码欧美三级| 久久久久白虎| 少妇熟女1区2区3区| 国产精品美女视频诱惑| 天天看天天日天天操| 成人午夜高潮av猛片| 亚洲AV人人澡人人爱| 美女91在线观看| 九九免费影片| 欧美黑人熟妇精品91| 在线观看中文字幕| 亚洲在线网站| 日韩性爱小视频| 国产精品嫩草影院午夜两性 | 欧美顶级黄片AAAAA在线免费看| 日韩九区| 天美一二三在线观看Av| 国产传媒日本欧美专区| 亚洲自拍青操视频| 91在线视频国产网站| 一区二区视频在线播放| 青青操青娱乐| 蜜臀va69| 精品国产Av无码久久久亚洲| 人人扣人人操| 97视频免费在线| 人人做,人人操,人人摸| 91热爆在线| 熟啊v色欧美热| 熟妇人妻丰满久久久久久久无码 | 欧美色图欧美| 欧美精品99久久久| 在线五区| 久久人人爽爽人人爽人人片αV| 志村玲子视频一区二区| 色欧美色交综合| 亚洲天堂人妻熟妇视频| 男人精品天堂一区| 欧美操人视频| 人人综合| 久久亚洲AV无码白度| 欧美激情性爱视频网站| 性性久久| 欧美一区二区观看在线| 日韩 欧美 国产 麻豆| 夜色AV无码手机在线影院| 久9爱经典视频| 五月丁香色色网| 白嫩少妇| 极品内射| 日韩性爱网址| 熟妇激情| 亚洲天堂AV在线播放| 欧美有码亚洲中文字幕一区二区三区四区 | 2020中文字幕在线观看| 精品亚洲国产成人AV制服丝袜| 国产精品久久久久久夜夜夜夜| 亚洲最大AV网| 啪啪性爱免费视频| 一区二区不卡免费| 奸色色 男人天堂 天天射| 国产一区二区三三视频| 九九九九亚洲| 欧美日韩少妇色情| 蜜臀少妇一区二区| 国产探花精品在线| 翔田千里AV无码秘 三区| 野狼激情网| 一级特级aaaa毛片免费观看| 神马久久久久久| 天天操熟妇| 久久久久久久97| 亚洲凸凹超碰成人| 91色爽欧美| 欧亚综合一卡二卡中文字幕| 国产色精品午夜大片| 性爱综合网| 国产精品成人在线| 久久欧美性爱视频| 亚洲成人性爱在线观看| 国产日逼视频| 大香蕉www.超碰| 久久久精品91八戒| 最新亚洲黄色免费电影| 内射夫妻三片| 96精品在线| 亚洲成人久久美女| 精品九九| 99精品无码| 午夜色婷婷| av资源在线观看少妇| 国产专区第一页| 日本熟妇人妻一区二区三区| 97天天摸天天爽| 人人爱夜夜爱| 深夜激情无码| 国产成人精品日本视频| 亚洲二区精品在线观看| 静品嫩模一区二区| 美女自卫慰黄网站免费| 色色亚洲| 99热亚洲天堂| 五毛骚逼极品美女怕怕| 五十路人妻在线| 无码二级三级| 欧美精品91| 91久久国外网| 91日日| 国产97综合| 天天影视色香欲综合网小说| 加勒比久久综合网高清| 999狠狠综合| 91精品导航| 性色av网站| 日韩三级网址| 北京专精特新企业招聘信息| 亚洲色情在线影视| AAAA级日本片免费视频| 亚洲第一狼人丝袜美女另类| 五月丁香色综合| 99婷婷| 青青草原综合久久大伊人精品| 国产a级精品| 九九九九免费高| 77国产精品| 精品超碰色| 中文字幕一区二区三区高清| 五月婷婷色色| 国产午夜视频| 久久久久久97| 99热综合| 久草在线| juliaann精品熟女一区| 午夜小电影在线插入淫高潮| 99久久网站| 2017大香蕉国产精品久久| 欧美亚洲激情| 九X超碰| 国内精品久久人妻性色av| 亚洲 国产 精品一区| 日韩久久艹| 翔田千里A片一区二区| 91日日| 综合欧美日本三级| 欧美综合色站| 影音先锋乱| 欧美亚洲成人在线一区二区三区| 乱欲一区二区| 久久久久成人网| 97超碰天天| 爱做久久久久久| 97 色综合| 风月影院男女十八禁| 超碰人人超在线观看| 99九九精品| 亚洲97在线观看| 久草线上视频免费看| 强奸乱伦中文字幕AV| 9999久久久| 加勒比人妻综合| 国产亚州日韩欧美看片| 色欧洲| 久肏视频字幕| 亚洲性少妇| 99青草| 婷婷亚洲五月***久久| 香蕉国产精品麻豆亚洲欧美日韩| 国产视频一区二区在线观看| 中国少妇XXXX做受| 91精片| 超碰97极品9|