Unity工程里的那些東西

1、特殊文件夾(unity doc : Special Folders)

Unity工程根目錄下,有三個(gè)特殊文件夾:Assets、Library、ProjectSettings
  • Assets

Unity工程中所用到的所有Asset都放在該文件夾中,是資源文件的根目錄,很多API都是基于這個(gè)文件目錄的,查找目錄都需要帶上Assets,比如AssetDatabase。

  • Library

Unity會(huì)把Asset下支持的資源導(dǎo)入成自身識(shí)別的格式,以及編譯代碼成為DLL文件,都放在Library文件夾中。

  • ProjectSettings

編輯器中設(shè)置的各種參數(shù)


參數(shù)
下面都是存在Assets目錄下的文件的了。
  • Editor

為Unity編輯器擴(kuò)展程序的目錄,可以在根目錄下,也可以在子目錄下,只要名字叫“Editor”,而且數(shù)量不限。Editor下面放的所有資源文件和腳本文件都不會(huì)被打進(jìn)包中,而且腳本只能在編輯器模式下使用。一般會(huì)把擴(kuò)展的編輯器放在這里,或只是編輯器程序用到的dll庫(kù),比如任務(wù)編輯器、角色編輯器、技能編輯器、戰(zhàn)斗編輯器……以及各種小工具。

  • Editor Default Resources

名字帶空格,必須在Assets目錄下,里面放編輯器程序用到的一些資源,比如圖片,文本文件等。不會(huì)被打進(jìn)包內(nèi),可以直接通過(guò)EditorGUIUtility.Load去讀取該文件夾下的資源。

  • Gizmos

Gizmos.DrawIcon在場(chǎng)景中某個(gè)位置繪制一張圖片,該圖片必須是在Gizmos文件夾下。

void OnDrawGizmos() {
        Gizmos.DrawIcon(transform.position, "0.png", true);
    }

OnDrawGizmos是MonoBehaviour的生命周期函數(shù),但是只在編輯器模式下每一幀都會(huì)執(zhí)行。Gizmos類能完成多種在場(chǎng)景視圖中繪制需求,做編輯器或調(diào)試的時(shí)候經(jīng)常會(huì)用到,比如在場(chǎng)景視圖中繪制一條輔助線。(用Debug.DrawLine,Debug.DrawRay也可以繪制簡(jiǎn)單的東西)

  • Plugins

該文件夾一般會(huì)放置幾種文件,第三方包、工具代碼、sdk。

plugin分為兩種:Managed plugins and Native plugins
Managed plugins:就是.NET編寫(xiě)的工具,運(yùn)行于.NET平臺(tái)(包括mono)的代碼庫(kù),可以是腳本文件,也可以本身是DLL。NGUI源碼就放在該文件夾下面的。
Native plugins:原生代碼編寫(xiě)的庫(kù),比如第三方sdk,一般是dll、so、jar等等。

該文件夾下的東西會(huì)在standard compiler時(shí)編譯(最先編譯),以保證在其它地方使用時(shí)能找到。

  • Resources

存放資源的特殊文件夾,可以在根目錄下,也可以在子目錄下,只要名字叫“Resources”就行,比如目錄:/xxx/xxx/Resources 和 /Resources 是一樣的,而且可有多個(gè)叫Resources的文件夾。Resources文件夾下的資源不管用還是不用都會(huì)被打包進(jìn).apk或者.ipa,因?yàn)閁nity無(wú)法判斷腳本有沒(méi)有訪問(wèn)了其中的資源。需要注意的是項(xiàng)目中可以有多個(gè)Resources文件夾,所以如果不同目錄的Resources存在同名資源,在打包的時(shí)候就會(huì)報(bào)錯(cuò)。

Resources中全部資源會(huì)被打包成一個(gè)缺省的AssetBundle(resources.assets)。

在該文件夾下的資源,可以通過(guò)Resources類進(jìn)行加載使用。API地址

  • Standard Assets

存放導(dǎo)入的第三方資源包。

  • StreamingAssets

該文件夾也會(huì)在打包的時(shí)候全部打進(jìn)包中,但它是“原封不動(dòng)”的打包進(jìn)去(直接拷貝到的包里)。游戲運(yùn)行時(shí)只能讀不能寫(xiě)。

不同的平臺(tái)最后的路徑也不同,可以使用unity提供的Application.streamingAssetsPath,它會(huì)根據(jù)平臺(tái)返回正確的路徑,如下:

Mac OS or Windows:path = Application.dataPath + "/StreamingAssets";
IOS:path = Application.dataPath + "/Raw";
Android:path = "jar:file://" + Application.dataPath + "!/assets/";

我們一般會(huì)把初始的AssetBundle資源放在該文件夾下,并且通過(guò)WWW或AssetBundle.LoadFromFile加載使用。

  • Hide Assets

隱藏文件夾和文件
以"."開(kāi)頭
以"~"結(jié)尾
名字為"cvs"
擴(kuò)展名為".tmp"

Asset(doc

An asset is representation of any item that can be used in your game or project. An asset may come from a file created outside of Unity, such as a 3D model, an audio file, an image, or any of the other types of file that Unity supports. There are also some asset types that can be created within Unity, such as an Animator Controller, an Audio Mixer or a Render Texture.

asset就是游戲中所用的資源,可以是用其它軟件創(chuàng)建的,如3D model、audio、image等,和一些unity可創(chuàng)建的,如animator、audio mixer、render texture...

  • 一些通常的Asset類型

Image: 支持絕大多數(shù)的image type,例如BMP、JPG、TIF、TGA、PSD
Model:eg、.max、.blend、.mb、.ma,它們將通過(guò)FBX插件導(dǎo)入。或者直接在3D app導(dǎo)出FBX放到unity project中
Mesh and Animations:unity支持絕大多數(shù)流行的3D app的model(Maya、Cinema 4D、3ds Max、Cheetah3D、Modo、Lightwave、Blender、SketchUp)
Audio Files:如果是非壓縮的audio,unity將會(huì)根據(jù)import setting壓縮導(dǎo)入(更多
Other:

  • Asset Store

里面有很多免費(fèi)和收費(fèi)的插件,可以供開(kāi)發(fā)者下載使用。

下載的第三方工具是以package文件存在,導(dǎo)入package:


package.png
  • 導(dǎo)入

unity會(huì)自動(dòng)導(dǎo)入Asset目錄下的資源,可以是unity支持的,也可以是不支持的,而在程序中用到的(比如二進(jìn)制文件)。

當(dāng)在Asset下進(jìn)行保存、移動(dòng)、刪除等修改文件的操作,unity都會(huì)自動(dòng)導(dǎo)入。

  • 自定義導(dǎo)入

導(dǎo)入外界的unity可識(shí)別的Asset時(shí),可以自定義導(dǎo)入設(shè)置,在工程中點(diǎn)擊資源文件,然后Inspector視圖中就會(huì)看到相應(yīng)的設(shè)置:


Atlas Import Setting.png
Plugin Import Setting.png
  • 導(dǎo)入結(jié)果( doc

導(dǎo)入資源之后,除了要生成.meta文件,unity并不是直接使用這些資源的,而是在導(dǎo)入的過(guò)程中,生成了unity內(nèi)部特定的格式(unity可識(shí)別)文件在游戲中使用,儲(chǔ)存在Library目錄下,而原始資源不變,仍然放在原來(lái)位置。當(dāng)然,每次修改原始文件,unity都會(huì)重新導(dǎo)入一次,才能在unity中看到改過(guò)之后的樣子。

正因?yàn)長(zhǎng)ibrary存放了導(dǎo)入資源的結(jié)果,所以每次刪除Library或里面某個(gè)文件,都會(huì)讓unity重新導(dǎo)入相應(yīng)的資源(生成內(nèi)部格式),但對(duì)工程沒(méi)有影響。


library.png

最終那些資源的導(dǎo)入結(jié)果就在metadata文件夾里

“the results of the import process are stored in a folder named for the first two digits of the Asset’s File GUID. This folder is stored inside the Library/metadata/ folder. The individual Objects are serialized into a single binary file that has a name identical to the Asset’s File GUID.”
import的結(jié)果存儲(chǔ)在Library/metadata/文件夾下,并且把File GUID的前兩位bit作為文件夾名,以File GUID作為文件名字。

資源存放.png
  • .meta文件

Asset中的所有文件、文件夾,經(jīng)過(guò)unity的導(dǎo)入過(guò)程后,會(huì)為每個(gè)都生成一個(gè).meta文件,這個(gè)文件是unity內(nèi)部管理文件的重要內(nèi)容,里面記錄著一些信息。

你知道unity是怎么管理資源依賴關(guān)系的嗎?可以試著更改一個(gè)掛在prefab上的腳本的目錄或者名字,而這些prefab依然可以正常的調(diào)用那些腳本。

unity在第一次導(dǎo)入新文件的時(shí)候,會(huì)生成一個(gè)Unique ID,用來(lái)標(biāo)志這個(gè)asset,它就是unity內(nèi)部用來(lái)區(qū)分asset的。Unique ID是全局唯一的,保存在.meta文件中。

在unity中資源間的依賴關(guān)系引用都是用Unique ID來(lái)實(shí)現(xiàn)的,如果一個(gè)資源丟失了.meta文件,那依賴它的資源就找不到它了。

If an asset loses its meta file (for example, if you moved or renamed the asset outside of Unity, without moving/renaming the corresponding .meta file), any reference to that asset will be broken. Unity would generate a new .meta file for the moved/renamed asset as if it were a brand new asset, and delete the old “orphaned” .meta file.

For example, in the case of a texture asset losing its .meta file, any Materials which used that Texture will now have no reference to that texture. To fix it you would have to manually re-assign that texture to any materials which required it.

In the case of a script asset losing its .meta file, any Game Objects or Prefabs which had that script assigned would end up with an “unassaigned script” component, and would lose their functionality. You would have to manually re-assign the script to these objects to fix this.

.meta文件內(nèi)容如下,包括Unique ID和Import Setting的內(nèi)容


meta.png

腳本

unity支持三種腳本語(yǔ)言,分別是C#、JavaScript、Boo,最常用的是前兩種,當(dāng)然還有后來(lái)擴(kuò)展的支持Lua腳本的庫(kù)(slua、ulua)。


生成的對(duì)應(yīng)的工程.png
  • 1.編譯順序

編譯順序的原則是在第一個(gè)引用之前編譯它,參考官網(wǎng)文檔可以知道,Unity中的可以將腳本代碼放在Assets文件夾下任何位置,但是不同的位置會(huì)有不同的編譯順序。規(guī)則如下:

The phases of compilation are as follows:
Phase 1: Runtime scripts in folders called Standard Assets, Pro Standard Assets and Plugins.
Phase 2: Editor scripts in folders called Editor that are anywhere inside top-level folders called Standard Assets, Pro Standard Assets and Plugins.
Phase 3: All other scripts that are not inside a folder called Editor.
Phase 4: All remaining scripts (those that are inside a folder called Editor).

(1) 首先編譯Standard Assets,Pro Standard Assets,Plugins文件夾(除Editor,可以是一級(jí)子目錄或是更深的目錄)下的腳本;
(2) 接著編譯Standard Assets,Pro Standard Assets,Plugins文件夾下(可以是一級(jí)子目錄或是更深的目錄)的Editor目錄下的腳本;
(3) 然后編譯Assets文件夾下,不在Editor目錄的所有腳本;
(4) 最后編譯Editor下的腳本(不在Standard Assets,Pro Standard Assets,Plugins文件夾下的);

基于以上編譯順序,一般來(lái)說(shuō),我們直接在Assets下建立一個(gè)Scripts文件夾放置腳本文件,它處于編譯的“第三位”。

  • 2.編譯結(jié)果:

項(xiàng)目工程文件夾中會(huì)生成類似如下幾個(gè)文件, 按順序分別對(duì)應(yīng)著上述四個(gè)編譯順序:(GameTool是項(xiàng)目名稱)
GameTool.CSharp.Plugins.csproj
GameTool.CSharp.Editor.Plugins.csproj
GameTool.CSharp.csproj
GameTool.CSharp.Editor.csproj

所有腳本被編譯成幾個(gè)DLL文件,位于工程根目錄 / Library / ScriptAssemblies。
生成如下三個(gè)dll:
Assembly-CSharp-Editor.dll:包含所有Editor下的腳本
Assembly-CSharp-firstpass.dll:包含Standard Assets、Pro Standard Assets、Plugins文件夾下的腳本
Assembly-CSharp.dll:包含除以上兩種,在Assets目錄下的腳本。

Plugins(doc

內(nèi)容包括了Plugin導(dǎo)入設(shè)置、怎樣創(chuàng)建使用兩種Plugin、怎樣利用底層渲染接口以及一些基礎(chǔ)知識(shí)。

在打包的時(shí)候,會(huì)把plugin里面的各種庫(kù),拷貝到包體中相應(yīng)的位置(不同平臺(tái)不一樣,具體在可以把工程分別打成幾個(gè)平臺(tái)的包)


win平臺(tái)

這是win32平臺(tái)的包,Managed里面放置的托管庫(kù),Mono里面放的是mono的庫(kù),Plugins是平臺(tái)庫(kù)(native plugin)

分平臺(tái)打包,就需要對(duì)不同平臺(tái)的plugin區(qū)分,方法是在Plugins目錄下建立相應(yīng)平臺(tái)的文件夾,unity在為不同平臺(tái)打包的時(shí)候,除了會(huì)將相應(yīng)平臺(tái)的plugin里的腳本編譯成Assembly-CSharp-firstpass.dll,還會(huì)把已經(jīng)是dll、so等庫(kù)直接拷貝到包內(nèi)相應(yīng)位置。
Plugins/x86:win32位平臺(tái)plugin
Plugins/x86_64:win64位平臺(tái)plugin
Plugins/Android:Android平臺(tái)
Plugins/iOS:iOS平臺(tái)

Object

UnityEngine.Object是所有類的基類,它描述了Asset上使用的所有resource的序列化數(shù)據(jù),它有幾個(gè)重要的派生類:GameObject,Component,MonoBehaviour

  • GameObject

GameObject是組件的容器,所有Component都在可以掛在上面,Unity以組價(jià)化思想構(gòu)建,所有功能拆分成各個(gè)組件,需要某個(gè)功能只需掛上相應(yīng)的組件,組件之間相互獨(dú)立,邏輯互補(bǔ)交叉。當(dāng)然組件式開(kāi)發(fā)也有最大的弊端就是組件之間的交互。

  • Component

Component作為組件的基類,unity中有大量的組件,Transform、Renderer、Collider、MeshFilter都是組件。

  • MonoBehaviour

開(kāi)發(fā)時(shí)創(chuàng)建的腳本,需要掛在GameObject上的腳本都是繼承自MonoBehaviour。

  • ScriptableObject

自定義可被Unity識(shí)別的資源類型,可打成AssetBundle,可通過(guò)Resources or AssetBundle加載。

序列化

  • Asset和Object的關(guān)系

Object作為Asset的序列化數(shù)據(jù),比如以Texture導(dǎo)入一張圖片,那么就用Texture對(duì)象記錄描述了該圖片。
Asset可能有多個(gè)Object,比如prefab的GameObject上掛著多個(gè)組件,這樣Asset和Object就是一對(duì)多的關(guān)系。那么問(wèn)題來(lái)了,同一個(gè)Object怎么區(qū)分分別掛在不同GameObject上的對(duì)象的?等等,這里是一定要區(qū)分的,因?yàn)樗鼈円蛄谢瘮?shù)據(jù)(在Inspector視圖設(shè)置的),而不是在游戲運(yùn)行中再new。

  • Class ID 和 File ID(object id)

先梳理一下關(guān)系,unity通過(guò)guid找到asset,其中asset上可能又掛了很多組件,每個(gè)組件又對(duì)應(yīng)著一個(gè)class,而在序列化的時(shí)候是對(duì)象。Class ID是unity定義好的(傳送),F(xiàn)ile ID是為對(duì)象生成的id,也就是說(shuō),我用guid + (class id 可有) + file id 就能確定某個(gè)資源上的組件對(duì)象。

  • YMAL

是一種標(biāo)記語(yǔ)言,如果不了解語(yǔ)言格式可以看網(wǎng)站

  • Text-Based Scene Files

和二進(jìn)制文件一樣,unity還提供了基于文本的場(chǎng)景文件,使用YAML標(biāo)記語(yǔ)言,通過(guò)文本描述了asset和object組件之間的關(guān)系是怎么關(guān)聯(lián)、保存數(shù)據(jù)等。

通過(guò)設(shè)置Edit -> Project Setting -> Editor -> Asset Serialization -> Force Text,我們可以查看所有Object信息了。


text-based.png

下面是一個(gè)GameObejct的YAML document:
<pre>
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
m_ObjectHideFlags: 1
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications: []
m_RemovedComponents: []
m_ParentPrefab: {fileID: 0}
m_RootGameObject: {fileID: 1000010512509832}
m_IsPrefabParent: 1
--- !u!1 &1000010512509832
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 4
m_Component:

  • 4: {fileID: 4000012302714536}
  • 33: {fileID: 33000011309778356}
  • 23: {fileID: 23000013678005954}
  • 114: {fileID: 114000012372194584}
    m_Layer: 0
    m_Name: Cube
    m_TagString: Untagged
    m_Icon: {fileID: 0}
    m_NavMeshLayer: 0
    m_StaticEditorFlags: 0
    m_IsActive: 1
    --- !u!4 &4000012302714536
    Transform:
    m_ObjectHideFlags: 1
    m_PrefabParentObject: {fileID: 0}
    m_PrefabInternal: {fileID: 100100000}
    m_GameObject: {fileID: 1000010512509832}
    m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
    m_LocalPosition: {x: 0, y: 0, z: 0}
    m_LocalScale: {x: 1, y: 1, z: 1}
    m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
    m_Children: []
    m_Father: {fileID: 0}
    m_RootOrder: 0
    </pre>

第三行的字符串“--- !u!1001 &100100000”,“!u!”后面的“1001”是Object的Class ID,“&”后面的“100100000”是File ID。
YAML Class ID Reference

Class ID.png

接著第四行是Prefab,是Class Name;下面“m_”開(kāi)頭的是它的序列化屬性,請(qǐng)看“m_RootGameObject”,記錄著Prefab對(duì)象的根節(jié)點(diǎn)的GameObject對(duì)象,繼續(xù)看后面“{fileID: 1000010512509832}”,file ID指向的剛好是第14行定義的GameObject對(duì)象;第20行m_Component屬性,可以看出gameObject上掛了四個(gè)組件,通過(guò)前面的Class ID就可以查到是什么組件了。

Instance ID

在前面已經(jīng)介紹了GUID、Class ID、File ID,先做個(gè)小結(jié)。Unity通過(guò)GUID找到asset文件,以至于我們可以隨意更改asset文件的位置,但是.meta文件丟失就會(huì)導(dǎo)致找不到相應(yīng)的資源,最常見(jiàn)的就是丟失腳本;接著在游戲中加載某個(gè)資源的時(shí)候,通過(guò)File ID找到組件的Object,如果Object沒(méi)有被加載就找不到,則通過(guò)File ID找到數(shù)據(jù)源,通過(guò)Class ID找到類,然后實(shí)例化對(duì)象,初始化序列數(shù)據(jù),并分配Instance ID,Object就加載好了。

但是每一個(gè)資源,這樣每一次加載都需要對(duì)GUID和File ID遍歷查找比較判斷對(duì)應(yīng)的Object是否加載,這樣就會(huì)帶來(lái)性能問(wèn)題。所以基于這個(gè)原因,所以利用GUID和File ID生成一個(gè)Instance ID,在Unity內(nèi)部維護(hù)了一個(gè)Instance ID的映射緩存來(lái)標(biāo)識(shí)各個(gè)Object,每當(dāng)有新的Objects添加到緩存中時(shí),Instance ID以簡(jiǎn)單的單調(diào)遞增的方式進(jìn)行賦值。

另外Instance ID的生命周期和Object的創(chuàng)建銷毀是一致的。

參考文章

特殊文件夾的編譯順序
Unity腳本執(zhí)行順序和編譯順序
Unity文件夾
Unity文件夾
Special Folder
unity資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,407評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,981評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,759評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,204評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,415評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,650評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,892評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,675評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評(píng)論 2 374

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