Unity強(qiáng)化篇(二) —— 適用于Unity的HTC Vive教程(一)

版本記錄

版本號(hào) 時(shí)間
V1.0 2019.02.13 星期三

前言

Unity是由Unity Technologies開發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲锨推、建筑可視化、實(shí)時(shí)三維動(dòng)畫等類型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開發(fā)工具搜囱,是一個(gè)全面整合的專業(yè)游戲引擎绍赛。Unity類似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的圖型化開發(fā)環(huán)境為首要方式的軟件淫半。其編輯器運(yùn)行在Windows 和Mac OS X下钾菊,可發(fā)布游戲至Windows帅矗、MacWii煞烫、iPhone浑此、WebGL(需要HTML5)、Windows phone 8和Android平臺(tái)滞详。也可以利用Unity web player插件發(fā)布網(wǎng)頁(yè)游戲尤勋,支持Mac和Windows的網(wǎng)頁(yè)瀏覽。它的網(wǎng)頁(yè)播放器也被Mac 所支持茵宪。網(wǎng)頁(yè)游戲 坦克英雄和手機(jī)游戲王者榮耀都是基于它的開發(fā)。感興趣的看下面幾篇文章瘦棋。
1. Unity強(qiáng)化篇(一) —— 如何使用Vuforia制作AR游戲(一)

開始

首先看下寫作環(huán)境

C#4, Unity 2018.2, Unity

HTC Vive是由HTCValve Corporation開發(fā)的虛擬現(xiàn)實(shí)headset稀火。它可以讓您進(jìn)入虛擬世界并親身體驗(yàn)它,而不是通過屏幕上的頭像赌朋。

如果您是Unity開發(fā)人員凰狞,將HTC Vive虛擬現(xiàn)實(shí)游戲制作成您自己的游戲很容易 - 您甚至可以說HTC ViveUnity是天作之合篇裁。

在本HTC Vive教程中,您將學(xué)習(xí)如何將HTC Vive集成到您自己的Unity游戲中赡若。具體來(lái)說达布,您將學(xué)習(xí)如何:

  • 下載并配置SteamVR
  • 處理控制器的輸入逾冬。
  • 在VR中與物理對(duì)象交互黍聂。
  • 制作激光筆。
  • 傳送一個(gè)區(qū)域身腻。

在本HTC Vive教程的最后产还,您將擁有一個(gè)沙盒,可以進(jìn)行進(jìn)一步的實(shí)驗(yàn)∴痔耍現(xiàn)在是時(shí)候開始吧脐区!

注意:戴頭戴式顯示器時(shí),每個(gè)人對(duì)移動(dòng)和旋轉(zhuǎn)的反應(yīng)都不同她按。如果這是你的第一次牛隅,請(qǐng)自己動(dòng)手,如果你感到惡心或不舒服酌泰,請(qǐng)休息一下媒佣。大多數(shù)人都習(xí)慣了VR。如果你在前幾次感覺不舒服宫莱,不要擔(dān)心 - 它可能會(huì)過去丈攒。

在深入學(xué)習(xí)本教程之前,請(qǐng)確保您具有以下內(nèi)容:

  • 支持VR的Windows PC授霸。
  • 您機(jī)器上安裝的copy of Unity 2018.2.14或更新版本的副本巡验。
  • 安裝了所有硬件并配置和更新軟件的HTC Vive or HTC Vive Pro
  • 已安裝SteamSteamVR碘耳。 請(qǐng)參閱本指南this guide显设,該指南將指導(dǎo)您完成硬件設(shè)置并提供下載Steam和SteamVR的鏈接。
  • 基本的Unity知識(shí)辛辨。
  • 對(duì)腳本的基本了解捕捂。
  • 打開并連接的HTC Vive

在Unity中打開準(zhǔn)備好的starter文件夾斗搞。 在Project窗口中查看RW的內(nèi)容:

每個(gè)文件夾都作為特定資源的基本文件夾:

  • Materials:用于場(chǎng)景的材料指攒,包括藍(lán)色彈力球。
  • Models:所有模型僻焚。
  • Physics Materials:彈性球物理材料允悦。
  • Prefabs:松散的物體預(yù)制件。
  • Scenes:游戲場(chǎng)景就在這里虑啤。
  • Scripts:所有腳本隙弛。
  • Textures:場(chǎng)景中所有對(duì)象共享的單個(gè)紋理架馋。

打開Game場(chǎng)景。 查看場(chǎng)景視圖全闷,然后單擊play以嘗試游戲:

目前叉寂,沒有太多事情發(fā)生,因?yàn)楝F(xiàn)場(chǎng)還沒有VR裝備总珠。 您需要將SteamVR添加到項(xiàng)目中以將Vive連接到Unity屏鳍。


Setting Up SteamVR

SteamVR SDKValve制作的官方庫(kù),可以更輕松地為所有主要的VR headsets開發(fā)姚淆。 它目前在資源商店免費(fèi)孕蝉,并支持Oculus RiftHTC Vive等等。

在頂部欄中選擇Window> General> Asset Store打開Asset Store

加載商店后腌逢,在頂部的搜索區(qū)域中鍵入SteamVR降淮,然后單擊Enter。 向下滾動(dòng)一下以查看選擇的資源搏讶。 單擊SteamVR Plugin以打開其商店頁(yè)面:

單擊Download并給它一點(diǎn)時(shí)間佳鳖。 完成后,單擊Import以打開包導(dǎo)入對(duì)話框媒惕。 單擊此窗口右下角的Import以導(dǎo)入包:

注意:在導(dǎo)入結(jié)束時(shí)系吩,您可能會(huì)看到以下消息,具體取決于您的Unity版本:

單擊I Made a Backup按鈕妒蔚,讓編輯器更新并重新編譯腳本穿挨。

幾秒鐘后你會(huì)看到這個(gè)窗口:

這是SteamVR插件的一部分;它顯示了您可以改進(jìn)的編輯器設(shè)置,以最大限度地提高性能和兼容性。

當(dāng)您打開一個(gè)新項(xiàng)目并導(dǎo)入SteamVR時(shí)贤惯,您會(huì)看到很多條目。 由于入門項(xiàng)目已經(jīng)過很好的優(yōu)化贞绵,因此這里唯一的建議是禁用解析對(duì)話框。

單擊Accept All以執(zhí)行所有建議的更改恍飘。 關(guān)閉Asset Store并切換回Scene視圖榨崩。 您現(xiàn)在將在Project窗口中有一個(gè)名為SteamVR的新文件夾:

打開SteamVR文件夾,查看里面的文件夾章母。 您將從Prefabs文件夾中將一些必要的VR GameObjects添加到場(chǎng)景中母蛛。

選擇[CameraRig][SteamVR]并將它們拖到Hierarchy中:

[SteamVR]附加了一個(gè)Steam VR_Render組件,用于處理所有VR攝像機(jī)的渲染乳怎。

[CameraRig]更有趣溯祸,因?yàn)樗刂浦?code>Vive的headset和控制器。 選擇[CameraRig]并在Inspector中將其Position設(shè)置為(X:0,Y:0焦辅,Z:-1.1)椿胯,以便在桌子后面滑動(dòng)整個(gè)裝備前方。

從層次結(jié)構(gòu)中刪除Main Camera,因?yàn)樗鼤?huì)干擾[CameraRig]及其嵌入式攝像頭。

HMD置于觸手可及的范圍內(nèi),打開控制器并啟動(dòng)場(chǎng)景。 拿兩個(gè)控制器并將它們擺動(dòng)一下寺渗。 您會(huì)注意到在Scene視圖中看到虛擬控制器在四處揮手:

一旦SteamVR插件檢測(cè)到控制器,它就會(huì)創(chuàng)建這些虛擬版本。 控制器映射到[CameraRig]的兩個(gè)Controller子節(jié)點(diǎn):

現(xiàn)在鲸伴,在仍然運(yùn)行場(chǎng)景的同時(shí),在層次結(jié)構(gòu)中選擇Camera仲吏,并通過頂部帶子小心地拾取頭戴式顯示器。 移動(dòng)并旋轉(zhuǎn)一下,然后觀察Scene視圖:

Camera與頭戴式顯示器相連,可精確跟蹤每個(gè)現(xiàn)實(shí)生活中的移動(dòng)和旋轉(zhuǎn)。

現(xiàn)在,將頭戴式顯示器放在頭上捐腿,抓住控制器柿顶,然后環(huán)顧四周,感受一下房間宪祥。

如果您嘗試與對(duì)象進(jìn)行交互家乘,您會(huì)感到失望蝗羊,因?yàn)闆]有任何反應(yīng)。 要添加移動(dòng)跟蹤之外的功能耀找,您需要執(zhí)行一些腳本編寫野芒。


Handling Input

拿一個(gè)手中的控制器妇斤,給它一個(gè)合適的外觀荸恕。 每個(gè)控制器都有以下輸入:

除了上面的輸入乖酬,每個(gè)控制器在移動(dòng)和旋轉(zhuǎn)時(shí)也具有速度和旋轉(zhuǎn)速度;這在與物理對(duì)象交互時(shí)證明特別方便戚炫。

1. Defining Actions

SteamVR 2.0版開始剑刑,Valve已經(jīng)用輸入系統(tǒng)取代了輸入系統(tǒng)的傳統(tǒng)1:1硬件映射。 這在硬件和Unity之間增加了一層抽象双肤。

操作系統(tǒng)允許您考慮用戶操作,而不是需要輪詢哪些按鈕或觸發(fā)器進(jìn)行輸入钮惠。 SteamVR計(jì)算出用于給定操作的輸入茅糜。

通過在頂部菜單中選擇Window> SteamVR Input打開SteamVR Input窗口。

出現(xiàn)下面的窗口素挽,詢問您是否要將一些示例文件復(fù)制到項(xiàng)目中蔑赘。 選擇Yes

這會(huì)在項(xiàng)目的根目錄中創(chuàng)建幾個(gè)JSON文件:

actions.json文件包含所有操作,操作集和對(duì)默認(rèn)綁定的引用预明。 其他JSON文件包含每個(gè)操作的默認(rèn)綁定缩赛。 幸運(yùn)的是,您不必手動(dòng)編輯這些內(nèi)容撰糠。

查看SteamVR輸入窗口酥馍;這包含所有操作集和操作:

該窗口包含一些重要的部分和按鈕:

  • 1) The action sets:此處的按鈕就像選項(xiàng)卡一樣在各set之間切換。
  • 2) Actions:默認(rèn)的操作集阅酪,包括輸入和輸出旨袒。您可以在此處添加,編輯和刪除操作术辐。
  • 3) 此按鈕將所有操作集和操作保存到JSON砚尽,并生成許多幫助程序類,以便輕松訪問操作辉词。
  • 4) 該按鈕打開一個(gè)本地托管的Web頁(yè)面必孤,允許您將操作綁定到硬件。

您可以在此處定義多個(gè)actions sets瑞躺,每個(gè)操作集都包含一系列操作敷搪。您可以將每個(gè)輸入操作分類為以下類型之一:

  • Boolean:打開或關(guān)閉true或false的操作。使用示例:抓住隘蝎。
  • Single / Vector1:值介于0和1之間的操作购啄。示例用法:移動(dòng)速度。
  • Vector2:X和Y值介于0和1之間的動(dòng)作嘱么。示例用法:方向狮含。
  • Vector3:X顽悼,Y和Z值介于0和1之間的動(dòng)作。這些動(dòng)作非常罕見几迄。
  • Pose:表示3D空間中位置和旋轉(zhuǎn)的動(dòng)作蔚龙。這些操作用于跟蹤VR控制器和HMD
  • Skeleton:使用SteamVR Skeleton Input系統(tǒng)估算拿著VR控制器時(shí)玩家手指的位置的動(dòng)作映胁。無(wú)論控制器的跟蹤保真度如何木羹,這都為每個(gè)手指提供關(guān)節(jié)位置和旋轉(zhuǎn)。

最后解孙,還有一個(gè)輸出動(dòng)作:振動(dòng)(vibration)坑填。您可以使用此操作使控制器振動(dòng)。

是時(shí)候編輯動(dòng)作了弛姜!

單擊platformer按鈕和mirrored下拉列表旁邊的減號(hào)按鈕以刪除platformer操作集:

出現(xiàn)確認(rèn)窗口時(shí)脐瑰,選擇Delete

對(duì)于有buggy action set做同樣的事情廷臼;您只需要為本教程設(shè)置的默認(rèn)操作苍在。

接下來(lái),通過刪除以下操作來(lái)清理操作列表荠商。 逐個(gè)選擇它們寂恬,然后單擊右下角的減號(hào)按鈕:

  • InteractUI
  • GrabPinch
  • Pose
  • Squeeze

接下來(lái),選擇GrabGrip操作并通過編輯其Name字段將其重命名為Grab

創(chuàng)建所有操作后莱没,單擊左下角的Save and generate保存操作并生成一堆幫助腳本和可編寫腳本的對(duì)象初肉,以便于訪問。

片刻之后郊愧,輸入系統(tǒng)完成朴译,并將新的SteamVR_Input文件夾添加到Assets文件夾:

該文件夾包含生成器創(chuàng)建的文件。 更具體地說属铁,腳本和可編寫腳本的對(duì)象眠寿。

2. Binding Actions

現(xiàn)在您已定義了操作,您可以為它們創(chuàng)建默認(rèn)的硬件綁定焦蘑。

確保SteamVR正在運(yùn)行并且您的Vive控制器已打開盯拱。 接下來(lái),單擊右下角的Open binding UI例嘱。 將在您的默認(rèn)瀏覽器中打開本地托管的網(wǎng)頁(yè):

首先狡逢,如果您連接了游戲手柄或其他兼容硬件,則需要先切換到Vive Controller綁定拼卵。 例如奢浑,單擊Gamepad,然后選擇Vive Controller切換到控制器設(shè)置腋腮。

接下來(lái)雀彼,在Current Binding標(biāo)題下壤蚜,單擊Edit以進(jìn)入綁定菜單。

綁定編輯器現(xiàn)在顯示在屏幕上徊哑。 快速瀏覽一下袜刷。 您可以在此處將操作可視地綁定到硬件。

由于鏡像莺丑,您只需要設(shè)置左控制器著蟹,這些設(shè)置將復(fù)制到另一側(cè)。 您可以通過取消選中屏幕底部的Mirror Mode復(fù)選框來(lái)更改此設(shè)置梢莽。 盡管如此萧豆,為了本教程而保留鏡像。

如果您查看屏幕左側(cè)并向下滾動(dòng)昏名,您會(huì)注意到已經(jīng)有一些輸入鏈接到操作:

要從一個(gè)干凈的平板開始炕横,將鼠標(biāo)懸停在每個(gè)已定義的輸入上,然后單擊垃圾桶圖標(biāo)將其刪除葡粒。 出現(xiàn)確認(rèn)提示時(shí),選擇Delete膜钓。

下面是結(jié)果

現(xiàn)在嗽交,通過單擊其名稱旁邊的大加號(hào)按鈕并在彈出的窗口中選擇BUTTON,為Grip定義一個(gè)新的Button綁定颂斜。

這使您可以像按鈕一樣使用grip(就是這樣)夫壁。 現(xiàn)在,單擊Click事件旁邊的None以將操作鏈接到它沃疮。 彈出一個(gè)窗口盒让,其中包含可能的操作列表。 選擇grab以鏈接它司蔬。

在定義新輸入時(shí)就是這樣邑茄! 現(xiàn)在,每次在游戲運(yùn)行時(shí)按下grip按鈕俊啼,都會(huì)觸發(fā)grab動(dòng)作肺缕。

單擊輸入條目左下角的Apply以將其保存到操作集。

現(xiàn)在對(duì)TriggerTrackpad執(zhí)行相同的操作:為每個(gè)觸發(fā)器創(chuàng)建一個(gè)新的Button輸入授帕,將TriggerClick事件鏈接到Trackport并將TrackpadClick事件鏈接到Teleport同木。 完成后一定要保存這些。

結(jié)果如下:

而已跛十! 綁定已設(shè)置彤路。 單擊Replace Default Binding以將這些設(shè)置應(yīng)用于默認(rèn)配置文件。

在下一個(gè)窗口中芥映,單擊左下角的Save以將默認(rèn)綁定保存到磁盤洲尊。

當(dāng)玩家開始游戲時(shí)远豺,會(huì)應(yīng)用此綁定。 如果玩家的特定硬件沒有綁定颊郎,則會(huì)提示他們自己設(shè)置這些綁定憋飞。

關(guān)閉Binding UI選項(xiàng)卡或窗口,返回Unity編輯器并關(guān)閉SteamVR Input窗口姆吭。 是時(shí)候把這個(gè)綁定好用了榛做!

3. Using Actions

通過創(chuàng)建并綁定到硬件輸入的操作,您現(xiàn)在可以在游戲中最終使用這些操作内狸!

首先選擇控制器的Pose Actions检眯;這將物理控制器的位置和旋轉(zhuǎn)鏈接到虛擬控制器。

展開Hierarchy中的[CameraRig]并選擇Controller (left)昆淡。

將其Pose Action更改為 \actions\default\in\SkeletonLeftHand锰瘸,將其鏈接到左側(cè)控制器。

現(xiàn)在對(duì)Controller (right)執(zhí)行相同操作昂灵,但將其Pose Action更改為\actions\default\in\SkeletonRightHan避凝。

接下來(lái),在RW \ Scripts中創(chuàng)建一個(gè)新的C#腳本眨补,將其命名為ActionsTest并在您喜歡的代碼編輯器中打開它管削。

刪除Start()方法并將以下內(nèi)容添加到文件的頂部:

using Valve.VR;

這引用了訪問VR輸入類所需的命名空間。

接下來(lái)撑螺,在Update()上面添加以下內(nèi)容:

public SteamVR_Input_Sources handType; // 1
public SteamVR_Action_Boolean teleportAction; // 2
public SteamVR_Action_Boolean grabAction; // 3

使用此代碼含思,您做了:

  • 1) 輪詢輸入的手的類型。 這些是All, Left or Right甘晤。
  • 2) 引用Teleport動(dòng)作含潘。
  • 3) 引用Grab行動(dòng)。

現(xiàn)在线婚,在Update()下面添加以下方法:

public bool GetTeleportDown() // 1
{
    return teleportAction.GetStateDown(handType);
}

public bool GetGrab() // 2
{
    return grabAction.GetState(handType);
}

以下是這些內(nèi)容:

  • 1) 如果Teleport操作剛剛激活則進(jìn)行輪詢遏弱,如果是這種情況則返回true
  • 2) 如果Grab操作當(dāng)前已激活酌伊,則輪詢腾窝。

最后,將以下if語(yǔ)句添加到Update()

if (GetTeleportDown())
{
    print("Teleport " + handType);
}

if (GetGrab())
{
    print("Grab " + handType);
}

這些語(yǔ)句檢查您創(chuàng)建的方法居砖,并在返回true時(shí)將消息打印到控制臺(tái)虹脯。

你準(zhǔn)備測(cè)試sript了。 保存并返回Unity編輯器奏候。

選擇兩個(gè)Controller GameObjects并通過單擊Add Component循集,鍵入“Act”并選擇top選項(xiàng),為兩者添加Actions Test組件蔗草。

打開Teleport Action下拉列表并將其值更改為\actions\default\in\Teleport咒彤。 現(xiàn)在疆柔,對(duì)Grab Action執(zhí)行相同操作并將其更改為\ actions \ default \ in \ Grab

最后镶柱,僅選擇Controller (left)并將其Hand Type更改為Left Hand旷档。 對(duì)Controller (right)執(zhí)行相同操作,但這次選擇Right Hand歇拆。

再次運(yùn)行游戲鞋屈,拿起兩個(gè)控制器,按下一些按鈕并squeeze the triggers故觅。 現(xiàn)在查看屏幕底部的控制臺(tái)行:

請(qǐng)注意厂庇,每個(gè)操作都在控制臺(tái)中注冊(cè)。

這是基本輸入配置输吏。 現(xiàn)在权旷,您有能力在指尖操縱虛擬世界!

后記

本篇主要講述了適用于Unity的HTC Vive教程贯溅,感興趣的給個(gè)贊或者關(guān)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拄氯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子它浅,更是在濱河造成了極大的恐慌坤邪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罚缕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡怎静,警方通過查閱死者的電腦和手機(jī)邮弹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蚓聘,“玉大人腌乡,你說我怎么就攤上這事∫鼓担” “怎么了与纽?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)塘装。 經(jīng)常有香客問我急迂,道長(zhǎng),這世上最難降的妖魔是什么蹦肴? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任僚碎,我火速辦了婚禮,結(jié)果婚禮上阴幌,老公的妹妹穿的比我還像新娘勺阐。我一直安慰自己卷中,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布渊抽。 她就那樣靜靜地躺著蟆豫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懒闷。 梳的紋絲不亂的頭發(fā)上十减,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音毛雇,去河邊找鬼嫉称。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灵疮,可吹牛的內(nèi)容都是我干的织阅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼震捣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荔棉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蒿赢,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤润樱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后羡棵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壹若,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年皂冰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了店展。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秃流,死狀恐怖赂蕴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舶胀,我是刑警寧澤概说,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站嚣伐,受9級(jí)特大地震影響糖赔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜轩端,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一挂捻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦刻撒、人聲如沸骨田。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)态贤。三九已至,卻和暖如春醋火,著一層夾襖步出監(jiān)牢的瞬間悠汽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工芥驳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柿冲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓兆旬,卻偏偏與公主長(zhǎng)得像假抄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丽猬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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