在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

技術解析 | 適用于TeamCity的Unreal Engine支持插件,提升游戲構建效率

龍智DevSecOps ? 2025-02-19 16:12 ? 次閱讀

龍智是JetBrains授權合作伙伴、Perforce授權合作伙伴,為您提供TeamCity、Perforce Helix Core等熱門的游戲開發工具及一站式服務

wKgZO2e1kCuAdOzTAAGUgToDeG4894.png

TeamCity是游戲開發的熱門選擇,大家選擇它的原因包括支持 Perforce、可以進行本地安裝,并提供了多種配置選項。除了將它主要用作通用 CI/CD 解決方案之外,JetBrains 還努力為各種構建工具提供專門支持。JetBrains已提供 Unity 插件數年,去年也正式推出了Unreal Engine 支持插件

在這款新插件的開發過程中,JetBrains一直與多位游戲開發客戶保持密切聯系,以確保它符合從事實際 Unreal Engine 項目工作的 DevOps 團隊的需求。

為 Unreal Engine 游戲設置合適的構建管道可能是一項艱巨的任務,特別是對于那些在平臺獨特性方面經驗有限的人來說。本文,我們將帶您了解基本設置,同時會展示該插件的功能,并演示分布式 BuildGraph 支持等高級功能。

wKgZO2e1kECATckbAAFaI4D2qZM091.png新 Unreal Engine 插件生成的示例構建管道

主要功能

以下是此版插件所提供功能的快速概覽:

  • 專為最常見用例(BuildCookRun、BuildGraph 和自動化測試)定制的專用運行程序。
  • 基于 BuildGraph 描述構建發行版。
  • 即時自動化測試報告。
  • 自動發現構建計算機上的 Unreal Engine 安裝。
  • 兼容最新的 5.x 版 Unreal Engine,還支持 4.x 版本。

演示

在本演示中,我們將為隨 Unreal 提供的兩款入門級游戲 CropoutLyra 設置管道:我們將為構建代理和安裝了 Unreal Engine 插件的 TeamCity Cloud 使用 AWS 基礎架構(EC2 和用于 FSx for OpenZFS)。我們將介紹兩個場景:引擎已安裝在代理上,以及引擎與游戲一起通過源代碼構建。目前,TeamCity Cloud 不為代理提供預裝的 Unreal Engine,但您可以隨時添加您自己的包含所有必需 SDK 的自托管代理。我們將在這篇博文中采用這種方式。

使用 BuildCookRun構建 Cropout

構建 Unreal 項目通常涉及多個?步驟,例如:

  • 采用指定配置針對目標平臺進行編譯。
  • 資源烘焙(將所有資源轉換為可在目標平臺上讀取的資源)。
  • 將項目封裝為合適的分發格式。
  • 等等。

當然,之后還要進行測試!首先,我們來看一個簡單的場景,并使用標準 BuildCookRun 命令在一臺計算機上按順序運行所有階段。對于此場景,我們將使用撰寫這篇博文時可以獲取的最新普通版 Unreal Engine,并通過 EGL(Epic Games 啟動器)進行安裝。將代理成功連接到 TeamCity Cloud 服務器后,我們可以在 Agents(代理)標簽頁中看到它。

wKgZPGe1kGmAYn27AACvagB0k88498.png

現在,我想簡單探討一下代理的一些屬性。

wKgZO2e1kHmADCMJAAB32Hdvy0I541.png

查看上圖,我們可以看到代理發現了引擎及其版本(如您所見,我們的計算機上安裝了多個引擎)。請記下此信息,因為稍后我們會將此信息用于構建步驟配置。現在,常用的方式是將您所有的配置以代碼形式存儲在源代碼控制系統下(也就是“配置即代碼”)。在 TeamCity 中,您可以使用 Kotlin DSL 執行此操作。當然,您還可以使用傳統 UI 配置,但今天我們將使用第一種方式(由于 YAML 已得到廣泛使用,并且已成為事實上的標準,我們已將它添加到最近發布的 TeamCity Pipelines – 如果您還沒有查看,請查看)。用于在 TeamCity 中構建 Cropout 的 Kotlin DSL 配置如下所示:

unrealEngine { engineDetectionMode = automatic { identifier = "5.4" } command = buildCookRun { project = "cropout/CropoutSampleProject.uproject" buildConfiguration = standaloneGame { configurations = "Development+Shipping" platforms = "Mac" } cook = cookConfiguration { maps = "Village+MainMenu" cultures = "en" unversionedContent = true } stage = stageConfiguration { directory = "./staged" } archive = archiveConfiguration { directory = "./archived" } pak = true compressed = true prerequisites = true } additionalArguments = "-utf8output -buildmachine -unattended -noP4 -nosplash -stdout -NoCodeSign" }

所有設置的作用都一目了然,但有幾項設置需要進一步說明:

  • engine detection mode

我們可以在此處指定“automatic”或“manual”。前者假定您已經在代理上安裝引擎并在系統中注冊。我借此機會澄清一下“注冊 ”的含義:當您通過 EGL 安裝 Unreal Engine 或通過源代碼構建 Unreal Engine 時,此操作會寫入目標計算機上的某些文件(如果使用的是 Windows,則會寫入注冊表)。這基本上就是自動檢測模式的用途。我們讀取這些文件并發布標識符作為代理屬性,這樣一來,您稍后便可使用這些屬性為構建選擇合適的代理。“手動”模式允許您設置 Unreal Engine 根文件夾的準確路徑,當您通過源代碼構建時可能會用到該路徑。稍后我們將介紹這部分內容。

  • build configuration

通過調整此參數,我們可以指定所創建構建的類型,它是單機游戲、客戶端、服務器,還是既是客戶端又是服務器組件。根據所選的值,插件將應用 -client、-server、-noserver 標志,并相應地管理 -clientconfig、-serverconfig、-config、-targetplatform 和 -servertargetplatform 參數。

到現在為止都沒問題。現在,該添加一些自動化測試并運行最終管道了。

unrealEngine { engineDetectionMode = automatic { identifier = "5.4" } command = runAutomation { project = "cropout/CropoutSampleProject.uproject" execCommand = runTests { tests = """ StartsWith:JsonConfig Input.Triggers.Released """.trimIndent() } nullRHI = true } additionalArguments = "-utf8output -buildmachine -unattended -noP4 -nosplash -stdout -NoCodeSign" }

如您所知,使用 Unreal Engine 自動化框架時,通常使用以下自動化“子命令”之一執行測試:

  • RunAll – 這是一個非常簡單的命令,能夠運行所有必需的測試。
  • RunFilter – 借助此命令,可以執行使用一個指定篩選器(包括 Engine、Stress、Smoke 等值)標記的測試。
  • RunTests – 這是最通用的命令,因為您可以使用該命令指定要運行的測試列表(包括使用 StartsWith 的前綴篩選器、運行組篩選器和簡單的子字符串匹配)。

我們嘗試在 Kotlin DSL 中保留相同的用詞,以便 Unreal 用戶對此感到熟悉。還要指出的是,插件會即時解析測試結果,并以 TeamCity 自帶的正確顯示的格式呈現測試結果。

wKgZO2e1kMeAQrAPAADFGJBLxCQ350.png

以下是構建結果示例:

wKgZO2e1kNeARQx6AABARu3PMRo059.png

在下方,我們可以看到發布到工件存儲的游戲二進制文件。默認情況下,工件會發布到內置存儲;但 TeamCity 還支持多種外部存儲選項。在云環境中,可以配置發布到 S3。

wKgZPGe1kOSAQtSEAADSpBSWTR8548.png

UI 中的最終配置將如下所示:

wKgZPGe1kPKAB_Y3AAFaFJOh2HA080.png

下面是測試運行的步驟:

wKgZO2e1kQGAcX3uAAEpp1JkpMM601.png

由于我們已啟用 Kotlin DSL 配置并禁止在 UI 中對其進行編輯,所有設置均被禁用。

使用 BuildGraph 構建 Lyra

我們將逐步過渡到使用 Lyra 的更復雜示例。由于它是一款多人游戲,我們來構建 Linux 服務器(據我們所知,一切高性能游戲都應在 Linux 上運行!)以及 Windows 和 Linux 游戲客戶端。在前面的示例中,我們在一臺計算機上按順序運行了所有步驟。這一過程通常需要大量時間。但還有一種更好的方式,即 BuildGraph。這是一種 Unreal 方法,以聲明方式(或幾乎以聲明方式)將構建描述為一組具有依賴關系的任務。隨后,構件圖的不同部分可以共同執行,或拆分到不同的計算機上。后一種方式可以顯著加快整個構建過程的速度,特別適合大型復雜項目。BuildGraph 的優點是它會自動管理作業之間的所有中間工件。您只需要共享存儲。構建 Lyra 時,我們會將此共享存儲用于兩個目的:在單個構建中的節點之間共享數據,以及維護共享派生數據緩存 (DDC)。我們之前提到過,我們還將通過源代碼構建引擎。您通過源代碼構建引擎可能是出于多種原因,但就我們的特定情況而言,我們這樣做是因為無法使用任何方式通過引擎(從 EGL 安裝)構建 Linux 服務器(至少在撰寫這篇博文時無法實現)。這是因為此特定引擎版本未提供相應文件和 SDK。好的,序言介紹完畢 — 我們來看看代碼。項目結構和 Perforce 中的相應流如下所示(假設您已從 Epic 的 Perforce 獲取 Unreal Engine 源代碼):

wKgZPGe1kRqAZeLLAAe5F33M5-0446.png

下面是我們將用于構建的 BuildGraph XML 腳本的節選。腳本的這一特定部分給出了編輯器的構建方式以及編譯所需的工具, 其中還包含幾項測試。在我們的簡單示例中,這些測試采用硬編碼。在真實場景中,您可能會將測試列表傳遞給腳本并采用更復雜的邏輯。

... ... ... ...

有關完整語法的描述,請參閱 Epic 網站。這里,我們本質上要做的是通過選項 EditorPlatforms 迭代傳遞給腳本的平臺列表,并為每個平臺構建編輯器。這部分代碼的一個有趣的功能是代理節點的 Type 屬性。

在文檔中查看此表:

wKgZPGe1kUGANJsYAAENwIGvEC0647.png

因此,為了在特定代理上運行一組任務,您可以修改此字段。撰寫這篇博文時,為了確保一切正常運行,本部分需要對構建代理進行一些配置。也就是說,您應當在代理配置文件中定義兩個屬性:

  • unreal-engine.build-graph.agent.type:此屬性可以是任意值(或由 ; 分隔的值列表)。相應的任務集隨后將僅在至少有一個匹配項的代理上運行。
  • unreal-engine.build-graph.agent.shared-dir:前文中討論過,為了運行分布式 BuildGraph 構建,我們需要一個共享存儲位置。通過此屬性,我們可以在特定代理上設置該存儲位置的路徑。

以下是我們的 EC2 構建代理設置:

  • 對于 Linux:

unreal-engine.build-graph.agent.type = CompileLinux;CookLinux;Linux unreal-engine.build-graph.agent.shared-dir = /mnt/agent-shared-dir/intermediate

  • 對于 Windows(由于某些原因,將文件夾作為單獨的驅動器進行裝載導致一次 Windows 系統調用失敗,因此我們在配置中選擇了網絡共享):

unreal-engine.build-graph.agent.type = CompileWin64;CookWin64;Win64 unreal-engine.build-graph.agent.shared-dir = \\\\fs-040b8d6dab476baf1.fsx.eu-west-1.amazonaws.com\\fsx\\

在真實場景中,可能需要區分執行烘焙的代理和執行編譯的代理,并確保它們采用合適的規范。我們來快速瀏覽一下游戲的編譯、烘焙和封裝過程。在我們的腳本中,我們已將構建客戶端的邏輯和構建服務器的邏輯分開(因為它們傳遞的標志不同):

腳本本身不需要過多解釋。我們會迭代希望客戶端在其上運行的平臺列表,該列表會再次作為選項傳遞。我們針對每個平臺進行編譯、烘焙資源,最后將一切封裝起來。作為封裝過程的最后一步,我們使用服務消息將構建的客戶端作為 TeamCity 構建工件發布。您可能已經注意到,在這部分腳本中,我們有三個代理代表構建過程的三個階段(編譯、烘焙和封裝)。編譯需要使用屬于編輯器的工具,但不需要編輯器本身:

同時,烘焙過程需要實際的編輯器:

由于這兩個過程之間沒有依賴關系,它們可以在不同的計算機上并行運行(在有足夠多的計算機可用的情況下)。這一簡單示例演示了使用 BuildGraph 的強大功能:您只需描述共享依賴項的各項工作,然后它們就會同時運行。為了簡潔起見,我們不會顯示包含服務器部分的腳本的其余部分,因為這部分內容與我們剛才描述的內容非常相似,只有標志集合不同。最后,我們要介紹 TeamCity 中的插件配置。由于大部分工作已在 BuildGraph XML 腳本中描述,DSL 配置相當簡單:

params { param("env.UE_SharedDataCachePath", "/mnt/agent-shared-dir/ddc") param("env.UE-SharedDataCachePath", "\\\\fs-040b8d6dab476baf1.fsx.eu-west-1.amazonaws.com\\fsx\\ddc") } steps { unrealEngine { id = "Unreal_Engine" name = "Build" engineDetectionMode = manual { rootDir = "engine" } command = buildGraph { script = "game/BuildProject.xml" targetNode = "BuildProject" options = """ ProjectPath=%teamcity.build.checkoutDir%/game ProjectName=Lyra ClientPlatforms=Linux+Win64 ServerPlatforms=Linux EditorPlatforms=Linux+Win64 TargetConfigurations=Shipping """.trimIndent() mode = UnrealEngine.BuildGraphMode.Distributed } additionalArguments = "-utf8output -buildmachine -unattended -noP4 -nosplash -stdout -NoCodeSign" } }

在這里,指定我們希望在分布式模式下運行提供的 BuildGraph 腳本。但我們可以根據自己的意愿隨時選擇在一臺計算機上按順序運行所有節點。我們還指定了一些環境變量,如果引擎要啟用共享 DDC,則需要使用這些變量。這些文件夾應當已裝載到連接至 TeamCity 的代理。現在,您可以為我們的游戲傳遞以下包含三個平臺選項的列表:ClientPlatforms、ServerPlatforms 和 EditorPlatforms。UI 中的顯示如下:

wKgZPGe1kcyASxpYAANrod5eANs852.png

啟動構建時,我們會獲得此構建鏈:

wKgZO2e1kb-AIQU9AAJXXQMTEHw151.png

因此,如我們所見,插件已將構建圖轉換為適當的 TeamCity 構建鏈。

我們可以在指定構建的相應標簽頁上查看已發布的工件。Linux 服務器的顯示如下:

wKgZPGe1ke2ASefkAAJq1GjvTz0735.png

在結束之前,我們想強調一些要點,請您務必牢記:

  • 為了確保 BuildGraph 分發過程正常運行,您的構建配置應僅包含一個有效構建步驟。
  • 目前,該插件不會以任何方式管理共享存儲中生成的工件的保留期。您負責正確設置保留期。
  • 這篇博文中的示例絕不可用于生產。您的真實場景可能會更加復雜。但這些示例可作為一個良好的起點。

立即試用!

您可以從 GitHub 倉庫中獲取這篇博文中展示的演示代碼。如果您想嘗試用于 TeamCity 的 Unreal Engine 插件,可從 JetBrains Marketplace 下載,并在 TeamCity On-Premises 服務器上安裝。[如需獲取更多支持,請咨詢TeamCity代理商-龍智]對于 TeamCity Cloud 用戶,我們已預裝了 Unreal Engine 插件,您只需添加 Unreal Engine 構建步驟便可使用此插件。需要提醒您的是,TeamCity Cloud 代理沒有預裝 Unreal Engine,因此您需要使用自托管代理運行 Unreal Engine 構建。針對一直使用預覽版插件(從 0.x.x 開始的任何版本)的用戶的重要說明:請注意,由于我們在 1.0.0 版中進行了更改并重新設計了多個功能,您的現有配置將被破壞。您可能需要使用新版插件重新創建這些配置。

后續計劃

首先,我們期待收到您的反饋。您可以隨時聯系我們:通過我們的問題跟蹤器提交工單或對這篇博文發表評論。

我們對今后的工作還有一些想法,包括:

提供更加深入的構建日志分析。

包含與 UnrealGameSync (UGS) 的集成,添加構建狀態發布等功能,以及提供開箱即用的元數據服務器。

添加對構建計算機上可用 SDK 的檢測,可能會使用整體解決方案。

了解 Gauntlet 自動化框架以及我們可以在其中執行的操作。

了解我們如何利用 Epic Games 推出的構建過程中的最新進展,即查看 Unreal Build Accelerator (UBA) 并通過 TeamCity 在代理上進行協調。

將插件開源。我們相信這將提高透明度,并從整體上創建更好的插件。此外,開源會帶來很多樂趣。

本博文英文原作者:Vladislav Grinin

關于 TeamCity

TeamCity 是一款強大的持續集成和部署服務器,面向以 DevOps 為中心的團隊提供開箱即用的測試智能、構建問題的實時報告以及無與倫比的可擴展性。安裝和部署 TeamCity,幾分鐘之內即可開始構建您的 DevOps 管道。TeamCity 提供本地部署和基于云的版本。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • unreal
    +關注

    關注

    0

    文章

    10

    瀏覽量

    6024
  • devops
    +關注

    關注

    0

    文章

    120

    瀏覽量

    12412
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    NVIDIA擴展適用于AI工廠數字孿生的Omniverse Blueprint

    NVIDIA 宣布大幅擴展適用于 AI 工廠數字孿生的 Omniverse Blueprint,為工程團隊提供更多 AI 工廠構建工具,目前已作為預覽版推出。
    的頭像 發表于 05-22 09:48 ?224次閱讀

    實戰教程:使用JetBrians Rider快速部署與調試PS5和Xbox上的UE項目

    面向主機游戲開發者的大新聞!JetBrains Rider 2024.3版本增加了對PlayStation?5和Xbox 游戲主機的支持(即將支持 Nintendo Switch),您
    的頭像 發表于 04-11 14:31 ?264次閱讀
    實戰教程:使用JetBrians Rider快速部署與調試PS5和Xbox上的UE項目

    【Android開發者必看】使用JetBrains TeamCity為Android項目構建CI/CD管道詳細指南

    【CI/CD】定義明確的構建、測試和部署工作流對Android應用的開發至關重要。JetBrains TeamCity是一個用于構建可靠管道的CI/CD平臺,可與流行的Android開
    的頭像 發表于 03-21 15:42 ?485次閱讀
    【Android開發者必看】使用JetBrains <b class='flag-5'>TeamCity</b>為Android項目<b class='flag-5'>構建</b>CI/CD管道詳細指南

    如何制作適用于Visionfive 2的Debian + UEFI固件系統?

    制作適用于Visionfive 2的Debian + UEFI固件系統
    發表于 03-10 07:51

    適用于Oracle的Devart Excel插件:輕松管理數據

    使用加載項將 Excel 連接到 Oracle Microsoft Excel 插件可以連接到 Oracle,能夠快速地將數據從 Oracle 加載到 Excel,且立即從數據庫刷新 Excel
    的頭像 發表于 01-14 11:11 ?452次閱讀
    <b class='flag-5'>適用于</b>Oracle的Devart Excel<b class='flag-5'>插件</b>:輕松管理數據

    適用于內窺鏡鏡頭模組的環氧樹脂封裝膠

    適用于內窺鏡鏡頭模組的環氧樹脂封裝膠適用于內窺鏡鏡頭模組的環氧樹脂封裝膠是一種高性能的膠粘劑,它結合了環氧樹脂的優異特性和內窺鏡鏡頭模組的特殊需求。以下是對這種環氧樹脂封裝膠的詳細解析:一、環氧樹脂
    的頭像 發表于 01-10 09:18 ?474次閱讀
    <b class='flag-5'>適用于</b>內窺鏡鏡頭模組的環氧樹脂封裝膠

    AN77-適用于大電流應用的高效率、高密度多相轉換器

    電子發燒友網站提供《AN77-適用于大電流應用的高效率、高密度多相轉換器.pdf》資料免費下載
    發表于 01-08 14:26 ?0次下載
    AN77-<b class='flag-5'>適用于</b>大電流應用的高<b class='flag-5'>效率</b>、高密度多相轉換器

    NVIDIA推出適用于網絡安全的NIM Blueprint

    德勤使用適用于容器安全的 NVIDIA NIM Agent Blueprint 幫助企業利用開源軟件構建安全的 AI。
    的頭像 發表于 11-20 09:58 ?614次閱讀

    如何提升EDA設計效率

    EDA設計效率的有效方法: 一、選擇合適的EDA工具 根據需求選擇工具 :不同的EDA工具適用于不同的硬件設計任務,如數字電路設計、模擬電路設計、電路板設計等。在選擇EDA工具時,應根據具體的設計需求和項目要求來確定。 考慮工具的功能和性能 :選擇具備所需功能和性能的ED
    的頭像 發表于 11-08 14:23 ?954次閱讀

    適用于AM335x TRF7970A的neard(Linux NFC)構建說明

    電子發燒友網站提供《適用于AM335x TRF7970A的neard(Linux NFC)構建說明.pdf》資料免費下載
    發表于 10-26 11:00 ?0次下載
    <b class='flag-5'>適用于</b>AM335x TRF7970A的neard(Linux NFC)<b class='flag-5'>構建</b>說明

    選擇適用于汽車應用的基準電壓

    電子發燒友網站提供《選擇適用于汽車應用的基準電壓.pdf》資料免費下載
    發表于 09-02 11:26 ?0次下載
    選擇<b class='flag-5'>適用于</b>汽車應用的基準電壓

    量子效率測量系統適用于哪些領域?

    在當今科技飛速發展的時代,發光材料的研發對于眾多領域的進步起著至關重要的作用。而提高發光材料的光致發光效率,關鍵在于精確的量子效率測量技術。量子效率測量系統的出現,為發光材料的研究提供
    的頭像 發表于 08-30 14:01 ?561次閱讀
    量子<b class='flag-5'>效率</b>測量系統<b class='flag-5'>適用于</b>哪些領域?

    適用于3D機器視覺的高度可擴展的TI DLP技術

    電子發燒友網站提供《適用于3D機器視覺的高度可擴展的TI DLP技術.pdf》資料免費下載
    發表于 08-23 09:57 ?0次下載
    <b class='flag-5'>適用于</b>3D機器視覺的高度可擴展的TI DLP<b class='flag-5'>技術</b>

    適用于類人機器人的TI DLP? Pico?技術

    電子發燒友網站提供《適用于類人機器人的TI DLP? Pico?技術.pdf》資料免費下載
    發表于 08-23 09:26 ?0次下載
    <b class='flag-5'>適用于</b>類人機器人的TI DLP? Pico?<b class='flag-5'>技術</b>

    適用于AR眼鏡的TI DLP? Pico?技術

    電子發燒友網站提供《適用于AR眼鏡的TI DLP? Pico?技術.pdf》資料免費下載
    發表于 08-23 09:21 ?0次下載
    <b class='flag-5'>適用于</b>AR眼鏡的TI DLP? Pico?<b class='flag-5'>技術</b>
    主站蜘蛛池模板: 国产一区在线mmai | 国产盗摄女厕美女嘘嘘 | 中文字幕123区 | 性视频亚洲 | 四虎精品影院2022 | 中韩日欧美电影免费看 | 色丁香久久| 天天干天天操天天摸 | 婷婷色爱区综合五月激情韩国 | 免费看污视频软件 | 日韩欧美成人乱码一在线 | 精品国产柚木在线观看 | 美女牲交毛片一级视频 | 西西人体www303sw大胆高清 | 中国美女一级黄色片 | 韩国免费特一级毛片 | ccav在线永久免费看 | 曰本aaaaa毛片午夜网站 | 麻豆国产三级在线观看 | 欧美人与动性视频在线观 | h视频在线观看视频观看 | 高清国产下药迷倒美女 | 丝袜美女被| xxxxxxxxxxx性bbbb| 狠狠躁夜夜躁人人躁婷婷视频 | 免费观看高清视频 | 在线视频精品视频 | 五月天婷婷在线播放 | 四虎永久在线精品免费观看地址 | 国产无限资源 | 狠狠色狠狠色综合日日32 | 国产激情电影综合在线看 | 四虎影院在线观看免费 | 亚洲狠狠97婷婷综合久久久久 | 国产欧美一区二区日本加勒比 | 男男宿舍高h炒肉bl 男男污肉高h坐便器调教 | 天天躁天天狠天天透 | 亚洲怡红院在线 | 亚洲国产成人久久一区久久 | 欧洲精品不卡1卡2卡三卡四卡 | 狠狠干亚洲色图 |