【Unity3D】Cesium加載大地圖

1 前言

Cesium 是一個(gè)地球可視化平臺(tái)和工具鏈赔嚎,具有數(shù)據(jù)切片膘盖、數(shù)據(jù)分發(fā)、三維可視等功能尤误。

Cesium 支持 JS侠畔、Unity、Unreal损晤、O3DE软棺、Omniverse 等平臺(tái),框架如下尤勋。

Cesium 相關(guān)鏈接如下:

本文實(shí)驗(yàn)完整資源見(jiàn)→Cesium加載大地圖案例喘落。

2 環(huán)境搭建

本節(jié)主要參考 Cesium for Unity Quickstart

1)創(chuàng)建 3D (URP) 或 3D (HDRP) 項(xiàng)目

說(shuō)明:官方建議 Unity Editor 最低版本為 2021.3.2f1最冰,筆者 Unity Editor 版本為 2021.3.11f1c2瘦棋;Cesium for Unity 可與通用渲染管線(URP)和高清渲染管線(HDRP)配合使用,但是暖哨,它不支持 Unity 的內(nèi)置渲染器赌朋,如果選擇 3D 項(xiàng)目作為模板,Cesium 加載的數(shù)據(jù)集將無(wú)法正確渲染篇裁。

2)添加作用域注冊(cè)表

依次點(diǎn)擊【Edit→Project Settings→Package Manager】沛慢,添加注冊(cè)表信息如下。

Name: Cesium
URL: https://unity.pkg.cesium.com
Scope(s): com.cesium.unity

3)下載 Cesium For Unity

依次點(diǎn)擊【W(wǎng)indow→Package Manager】打開(kāi)包管理器窗口达布,在 Packages 菜單中選擇 My Registries颠焦,下載 Cesium for Unity,如下往枣。

下載成功后伐庭, 菜單欄會(huì)多出一個(gè) Cesium 菜單,如下分冈。

4)連接到 Cesium ion

在 Cesium 窗口點(diǎn)擊 Connect to Cesium io 按鈕圾另,跳轉(zhuǎn)到 Web 網(wǎng)頁(yè),點(diǎn)擊 Allow雕沉。

5)添加 Token

在 Cesium 窗口點(diǎn)擊 Token 按鈕集乔,添加 token,如果沒(méi)有 token,就創(chuàng)建一個(gè) token扰路,如果有 token尤溜,就使用已創(chuàng)建的 token。

6)創(chuàng)建世界地圖

在 Cesium 窗口點(diǎn)擊 Cesium World Terrain + Bing Maps Aerial imagery 添加世界地圖汗唱。

場(chǎng)景顯示如下宫莱。

如果看不見(jiàn)地圖,可能是相機(jī)的位置比較遠(yuǎn)哩罪,被裁剪了授霸,可以調(diào)整遠(yuǎn)裁剪平面的位置,如下际插。

7)添加動(dòng)態(tài)相機(jī)

屏蔽場(chǎng)景中默認(rèn)的相機(jī)碘耳,在 Cesium 窗口添加 Dynamic Camera,如下框弛。此時(shí)辛辨,在 Hierarchy 窗口可以看到 CesiumGeoreference 對(duì)象下面自動(dòng)生成了一個(gè)名為 DynamicCamera 的對(duì)象,該對(duì)象上掛了 Camera 組件瑟枫。

運(yùn)行后斗搞,可以通過(guò)鼠標(biāo)和方向按鍵控制相機(jī)位置和姿態(tài),如下力奋。

說(shuō)明:視覺(jué)的變化通過(guò)調(diào)整 CesiumGeoreference 組件下的 Latitude 和 Longitude 屬性實(shí)現(xiàn),如下幽七。

補(bǔ)充:讀者也可以下載 Cesium 官方 Deom 體驗(yàn)一下景殷,詳見(jiàn)→cesium-unity-samples

3 地圖切片

本節(jié)主要介紹 fbx 文件切片流程澡屡,對(duì)于其他文件的切片猿挚,可以參考 CesiumLab地理信息基礎(chǔ)數(shù)據(jù)處理平臺(tái)使用手冊(cè)

3.1 切片

下載并安裝 CesiumLab 后驶鹉,打開(kāi) CesiumLab 客戶端绩蜻,fbx 文件的切片如下。

在處理日志中可以查看任務(wù)是否處理成功室埋,如下办绝。如果切片失敗,可能是 fbx 文件中包含相機(jī)或燈光姚淆,使用 Blender 刪除相機(jī)和燈光孕蝉,再重新導(dǎo)出 fbx 文件。

生成的文件如下腌逢,加載切片時(shí)降淮,需要用到 tileset.json 文件。

3.2 預(yù)覽切片

在分發(fā)服務(wù)中可以查看切片搏讶,步驟如下佳鳖。

點(diǎn)擊預(yù)覽后霍殴,會(huì)跳轉(zhuǎn)到另一個(gè)網(wǎng)頁(yè),顯示切片如下系吩。

用戶在瀏覽器中輸入:http://localhost:9003/viewer/index.html来庭,再按以下步驟添加切片,也可以預(yù)覽切片淑玫。

3.3 上傳切片到 Cesium ion

Cesium ion 官網(wǎng)登錄賬號(hào)后巾腕,按以下步驟上傳切片。

選擇文件后絮蒿,上傳切片尊搬。

在 My Assets 窗口可以查看已經(jīng)上傳的切片,如下土涝。

注意:第一列的 ID 在加載資源時(shí)會(huì)用到佛寿;用戶也可以將 Asset Depot 中的資源添加到 My Assets 中。

4 Unity 中加載切片

4.1 加載 Cesium ion 中切片

在 Cesium 窗口單擊 Add 按鈕但壮,在底部 Console 右邊會(huì)出現(xiàn) Cesium ion Assets 窗口冀泻,選擇地圖添加到場(chǎng)景中,如下蜡饵。

在 Hierachy 窗口雙擊 CesiumGeoreference 下面的地圖對(duì)象弹渔,使相機(jī)聚焦到地圖,地圖顯示如下溯祸,通過(guò)修改 ion Asset ID 可以加載不同地圖肢专。

4.2 加載 CesiumLab 服務(wù)中切片

在 Cesium 窗口點(diǎn)擊 Blank 3D Tiles Tileset,在 Hierarchy 窗口會(huì)生成 CesiumGeoreference 和 Cesium3DTileset 對(duì)象焦辅,選中 Cesium3DTileset 對(duì)象博杖,設(shè)置切片的 url,如下筷登。

url 來(lái)自 CesiumLab剃根,如下。

在 Hierachy 窗口雙擊 Cesium3DTileset 對(duì)象前方,使相機(jī)聚焦到地圖狈醉,地圖顯示如下。

可以看到惠险,地圖方位異常舔糖,在 4.4 節(jié)將介紹調(diào)整地圖方位的方法。

4.3 加載本地切片

將切片拷貝到項(xiàng)目目錄下的 Resources / city 目錄下莺匠。在 Cesium 窗口點(diǎn)擊 Blank 3D Tiles Tileset金吗,在 Hierarchy 窗口會(huì)生成 CesiumGeoreference 和 Cesium3DTileset 對(duì)象,選中 Cesium3DTileset 對(duì)象,設(shè)置切片的 url摇庙,如下旱物。

在 Hierachy 窗口雙擊 Cesium3DTileset 對(duì)象,使相機(jī)聚焦到地圖卫袒,地圖顯示同 4.2 節(jié)宵呛。

4.4 調(diào)整地圖方位

1)通過(guò) CesiumLab 預(yù)覽參數(shù)調(diào)整地圖

使用 3.2 節(jié)中方法預(yù)覽切片,調(diào)整好方位后夕凝,將鼠標(biāo)放在屏幕正中間宝穗,記錄底部的經(jīng)度、緯度码秉、高度逮矛,如下。

選中 CesiumGeoreference 對(duì)象转砖,設(shè)置經(jīng)度须鼎、緯度、高度為上面記錄的值府蔗,如下晋控。

在 Hierachy 窗口雙擊 CesiumGeoreference 對(duì)象,使相機(jī)聚焦到地圖姓赤,地圖顯示如下赡译。

可以看到,地圖的方位已正確顯示不铆,用戶如果對(duì)該方位還是不滿意蝌焚,在調(diào)整好視覺(jué)后,點(diǎn)擊 Place Origin Here 按鈕重置該視覺(jué)下的經(jīng)度狂男、緯度综看、高度品腹,如下岖食。

2)通過(guò) tileset 文件中 transform 參數(shù)調(diào)整地圖

CesiumLab地理信息基礎(chǔ)數(shù)據(jù)處理平臺(tái)使用手冊(cè) 的 2.2.2.1 節(jié) “輸出數(shù)據(jù)的空間參考” 中,我們可以看到以下公式:

其中舞吭,3dtiles 里的 transform 矩陣是指切片文件中的 tileset.json 文件泡垃,如下。

可以看到 transform 矩陣是一個(gè) 4x4 的矩陣羡鸥,并且最后一列的列向量是 [0, 0, 0, 1]'蔑穴,類似于平移矩陣的形式(平移矩陣詳見(jiàn)空間和變換中 2.1.1 節(jié),這篇文章的變換是列向量右乘惧浴,Cesium 中是行向量左乘)存和,因此 transform 矩陣的最后一行是平移偏移量,我們將該偏移量設(shè)置到 Cesium Georeference 中,如下捐腿,地圖顯示效果同 4.4 1)節(jié)纵朋。

5 添加對(duì)象

5.1 CesiumGlobalAnchor

給場(chǎng)景中添加 DynamicCamera,并屏蔽掉 Main Camera茄袖,添加熱氣球?qū)ο蟛偃恚缦隆?/p>

運(yùn)行后,發(fā)現(xiàn)氣球跟隨相機(jī)一起運(yùn)動(dòng)宪祥,如下聂薪。

將氣球?qū)ο笠频?CesiumGeoreference 下面,并添加 CesiumGlobalAnchor 組件蝗羊,如下藏澳。

運(yùn)行效果如下,可以看到氣球?qū)ο鬀](méi)有跟隨相機(jī)一起運(yùn)動(dòng)了肘交。

5.2 參考子場(chǎng)景

選中 CesiumGeoreference 對(duì)象笆载,點(diǎn)擊 Create Sub-Scene Here 添加子場(chǎng)景,CesiumGeoreference 對(duì)象下面會(huì)生成一個(gè)掛有 CesiumSubScene 組件的對(duì)象涯呻,重命名為 Sub-Scene凉驻。

調(diào)整 CesiumSubScene 組件中的 Activation Radius、Latitude复罐、Longitude涝登、Height 屬性,如下效诅。Latitude胀滚、Longitude、Height 確定了子場(chǎng)景的中心乱投,Activation Radius 為子場(chǎng)景的半徑咽笼,只有相機(jī)在子場(chǎng)景范圍內(nèi),才激活子場(chǎng)景內(nèi)的物體(子對(duì)象)戚炫。

將氣球?qū)ο笸献У?Sub-Scene 對(duì)象下面剑刑,如下(氣球?qū)ο蟛恍枰獟?CesiumGlobalAnchor 組件)。

運(yùn)行效果如下双肤,可以看到施掏,只有相機(jī)進(jìn)入子場(chǎng)景范圍內(nèi),才激活子場(chǎng)景內(nèi)的物體(子對(duì)象)茅糜。

6 Native 編譯

本節(jié)主要參考 Building Cesium for Unity七芭。

1)編譯環(huán)境準(zhǔn)備

dotnet --version # 6.0 or later
cmake --version # 3.15 or later
Visual Studio 2022
Git Bash # 拉代碼和編譯命令都可以在 Git Bash里執(zhí)行

2)拉 cesium-unity-samples 代碼

cesium-unity-samples 源碼。

git clone --recurse-submodules git@github.com:CesiumGS/cesium-unity-samples.git

3)拉 cesium-unity 代碼

cesium-unity 源碼蔑赘。

cd cesium-unity-samples/Packages
git clone --recurse-submodules git@github.com:CesiumGS/cesium-unity.git com.cesium.unity

clone 時(shí)如果忘記添加 --recurse-submodules狸驳,可以通過(guò)以下命令遞歸拉取子模塊依賴预明。

cd cesium-unity-samples/Packages/com.cesium.unity
git submodule update --init --recursive

注意:不要通過(guò)瀏覽器下載 cesium-unity 源碼的 zip 文件,因?yàn)檫@樣不會(huì)拉子模塊代碼耙箍,也不要試 圖把所有子模塊的 zip 文件下載下來(lái)后再合并贮庞,因?yàn)樽幽K太多了,有的子模塊里面又包含子模塊究西,很容易漏掉窗慎。cesium-unity 源碼比較大,大概 1.89 GB(包含所有子模塊)卤材,如果下載比較慢遮斥,可以使用 Git常用命令總結(jié) 中方法配置代理來(lái)加速下載。

以下是子模塊的依賴文件扇丛。

com.cesium.unity\.gitmodules
com.cesium.unity\native~\extern\cesium-native\.gitmodules
com.cesium.unity\native~\extern\cesium-native\extern\draco\.gitmodules
com.cesium.unity\native~\extern\cesium-native\extern\earcut\.gitmodules
com.cesium.unity\native~\extern\cesium-native\extern\rapidjson\.gitmodules

com.cesium.unity.gitmodules 內(nèi)容如下术吗,可以看到 cesium-nativecesium-unity 的一個(gè)子模塊,這正是我們要編譯的 native 子模塊帆精。

[submodule "native~/extern/cesium-native"]
    path = native~/extern/cesium-native
    url = ../cesium-native.git
[submodule "native~/extern/tidy-html5"]
    path = native~/extern/tidy-html5
    url = https://github.com/htacg/tidy-html5.git
[submodule "native~/extern/enum-flags"]
    path = native~/extern/enum-flags
    url = https://github.com/grisumbras/enum-flags.git

4)構(gòu)建 Reinterop

Reinterop 是一個(gè) Roslyn(C# 編譯器)源代碼生成器较屿,在編譯 cesium-unity C# 代碼時(shí)由 Unity 自動(dòng)調(diào)用,并生成 C# 與 C++的交互層卓练。

cd cesium-unity-samples/Packages/com.cesium.unity
dotnet publish Reinterop~ -o .

5)打開(kāi) cesium-unity-samples 項(xiàng)目

使用 Unity Editor 打卡 cesium-unity-samples 項(xiàng)目隘蝎,Unity 將自動(dòng)編譯 cesium-unity C# 源代碼,同時(shí)調(diào)用 Reinterop 生成 C# 和 C++ 源代碼襟企。此時(shí) Cesium 的功能還不能正常使用嘱么,會(huì)拋出以下異常。這是因?yàn)?C++ 的代碼還沒(méi)編譯顽悼。

DllNotFoundException: CesiumForUnityNative assembly:<unknown assembly> type:<unknown type> member:(null)
NotImplementedException: The native implementation is missing so OnValidate cannot be invoked.

生成的 C++ 源碼地址為:com.cesium.unity/native~/build曼振,用戶可以通過(guò) Visual Studio 打開(kāi) CesiumForUnityNative.sln 文件來(lái)查看源碼。

6)編譯 C++ 代碼

關(guān)閉 cesium-unity-samples 項(xiàng)目蔚龙,執(zhí)行完以下命令行再打開(kāi)項(xiàng)目冰评。

構(gòu)建 Debug 版本。

# compile the C++ code for use in the Editor
cd cesium-unity-samples/Packages/com.cesium.unity/native~
# 在 build 目錄中生成 CMake 構(gòu)建配置, 并將構(gòu)建類型設(shè)置為 Debug, 以便在構(gòu)建項(xiàng)目時(shí)啟用調(diào)試信息(只需執(zhí)行一次, 第二次編譯時(shí)不需要執(zhí)行該命令)
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug
# 在 build 目錄中執(zhí)行構(gòu)建操作, 使用 14 個(gè)構(gòu)建線程并生成 Debug 版本的可執(zhí)行文件或庫(kù), 將構(gòu)建結(jié)果安裝到 install 指向的目錄中
cmake --build build -j14 --target install --config Debug

構(gòu)建 Release 版本木羹。

# build a release build
cd cesium-unity-samples/Packages/com.cesium.unity/native~
# 在 build 目錄中生成 CMake 構(gòu)建配置, 并將構(gòu)建類型設(shè)置為 RelWithDebInfo, 它允許在 Release 版本中包含調(diào)試信息(只需執(zhí)行一次, 第二次編譯時(shí)不需要執(zhí)行該命令)
cmake -B build -S . -DCMAKE_BUILD_TYPE=RelWithDebInfo
# 在 build 目錄中執(zhí)行構(gòu)建操作, 使用 14 個(gè)構(gòu)建線程并生成帶有調(diào)試信息的 Release 版本的可執(zhí)行文件或庫(kù), 將構(gòu)建結(jié)果安裝到 install 指向的目錄中
cmake --build build -j14 --target install --config RelWithDebInfo

若在后面的編譯過(guò)程中甲雅,報(bào)錯(cuò):could not find any instance of Visual Studio,可以參考博客→解決CMake時(shí)“could not find any instance of Visual Studio”的問(wèn)題汇跨。

7)查看安裝目錄

打開(kāi) com.cesium.unity/native~/CMakeLists.txt 文件务荆,搜索 "CMAKE_INSTALL_PREFIX"妆距,如下穷遂。

# When building for the Editor, both Runtime and Editor assemblies are
# written to the Editor directory so that Unity won't load them in
# a standalone build.
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_LIST_DIR}/../Editor" CACHE PATH "Installed to the Editor directory." FORCE)
endif()

可以看到,安裝目錄為 "${CMAKE_CURRENT_LIST_DIR}/../Editor"娱据,即 com.cesium.unity/Editor 目錄蚪黑,由此得構(gòu)建和安裝的目錄如下盅惜。

com.cesium.unity\native~\build\Editor\Debug\CesiumForUnityNative-Editor.dll ->
com.cesium.unity\Editor\CesiumForUnityNative-Editor.dll

com.cesium.unity\native~\build\Runtime\Debug\CesiumForUnityNative-Runtime.dll ->
com.cesium.unity\Editor\CesiumForUnityNative-Runtime.dll

7 修改 Native 代碼案例

1)打開(kāi) native 源碼工程

使用 Visual Studio 打開(kāi) CesiumForUnityNative.sln 文件來(lái)查看源碼,如下忌穿。

2)修改源碼

修改 CesiumForUnityNative-Runtime 模塊下的 CesiumCreditSystemImpl.cpp 文件(源碼位置:com.cesium.unity/native~/Runtime/src/CesiumCreditSystemImpl.cpp)抒寂,如下。

3)編譯源碼

# compile the C++ code for use in the Editor
cd cesium-unity-samples/Packages/com.cesium.unity/native~
# 在 build 目錄中生成 CMake 構(gòu)建配置, 并將構(gòu)建類型設(shè)置為 Debug, 以便在構(gòu)建項(xiàng)目時(shí)啟用調(diào)試信息(只需執(zhí)行一次, 第二次編譯時(shí)不需要執(zhí)行該命令)
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug
# 在 build 目錄中執(zhí)行構(gòu)建操作, 使用 14 個(gè)構(gòu)建線程并生成 Debug 版本的可執(zhí)行文件或庫(kù), 將構(gòu)建結(jié)果安裝到 install 指向的目錄中
cmake --build build -j14 --target install --config Debug

編譯完成后掠剑,可以看到 com.cesium.unity/Editor/CesiumForUnityNative-Runtime.dll 文件修改日期發(fā)生變化屈芜。

4)修改前后對(duì)比

修改前底部有一行文字。

修改后底部文字消失朴译。

聲明:本文轉(zhuǎn)自【Unity3D】Cesium加載大地圖井佑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市眠寿,隨后出現(xiàn)的幾起案子躬翁,更是在濱河造成了極大的恐慌,老刑警劉巖盯拱,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盒发,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡狡逢,警方通過(guò)查閱死者的電腦和手機(jī)宁舰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奢浑,“玉大人明吩,你說(shuō)我怎么就攤上這事∫蠓眩” “怎么了印荔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)详羡。 經(jīng)常有香客問(wèn)我仍律,道長(zhǎng),這世上最難降的妖魔是什么实柠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任水泉,我火速辦了婚禮,結(jié)果婚禮上窒盐,老公的妹妹穿的比我還像新娘草则。我一直安慰自己,他們只是感情好蟹漓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布炕横。 她就那樣靜靜地躺著,像睡著了一般葡粒。 火紅的嫁衣襯著肌膚如雪份殿。 梳的紋絲不亂的頭發(fā)上膜钓,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音卿嘲,去河邊找鬼颂斜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拾枣,可吹牛的內(nèi)容都是我干的沃疮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼梅肤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼忿磅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凭语,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤葱她,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后似扔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吨些,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年炒辉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豪墅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡黔寇,死狀恐怖偶器,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缝裤,我是刑警寧澤屏轰,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站憋飞,受9級(jí)特大地震影響霎苗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榛做,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一唁盏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧检眯,春花似錦厘擂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至获茬,卻和暖如春港庄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恕曲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工鹏氧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佩谣。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓把还,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親茸俭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吊履,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容