Unity高階-項目優(yōu)化-批處理,代碼優(yōu)化

在屏幕上渲染物體涩嚣,引擎需要發(fā)出一個繪制調(diào)用來訪問圖形API(iOS系統(tǒng)中為OpenGL ES)崇众。每個繪制調(diào)用需要進(jìn)行大量的工作來訪問圖形API,從而導(dǎo)致了CPU方面顯著的性能開銷航厚。

Unity在運行時可以將一些物體進(jìn)行合并顷歌,從而用一個繪制調(diào)用來渲染他們。這一操作幔睬,我們稱之為“批處理”眯漩。一般來說,Unity批處理的物體越多,你就會得到越好的渲染性能赦抖。

Unity中內(nèi)建的批處理機制所達(dá)到的效果要明顯強于使用幾何建模工具(或使用Standard Assets包中的CombineChildren腳本)的批處理效果舱卡。這是因為,Unity引擎的批處理操作是在物體的可視裁剪操作之后進(jìn)行的队萤。Unity先對每個物體進(jìn)行裁剪轮锥,然后再進(jìn)行批處理,這樣可以使渲染的幾何總量在批處理前后保持不變要尔。但是舍杜,使用幾何建模工具來拼合物體,會妨礙引擎對其進(jìn)行有效的裁剪操作赵辕,從而導(dǎo)致引擎需要渲染更多的幾何面片既绩。

材質(zhì)

只有擁有相同材質(zhì)的物體才可以進(jìn)行批處理。因此还惠,如果你想要得到良好的批處理效果熬词,你需要在程序中盡可能地復(fù)用材質(zhì)和物體。

如果你的兩個材質(zhì)僅僅是紋理不同吸重,那么你可以通過 紋理拼合 操作來將這兩張紋理拼合成一張大的紋理互拾。一旦紋理拼合在一起,你就可以使用這個單一材質(zhì)來替代之前的兩個材質(zhì)了嚎幸。

如果你需要通過腳本來訪問復(fù)用材質(zhì)屬性颜矿,那么值得注意的是改變Renderer.material將會造成一份材質(zhì)的拷貝。因此嫉晶,你應(yīng)該使用Renderer.sharedMaterial來保證材質(zhì)的共享狀態(tài)骑疆。

動態(tài)批處理

如果動態(tài)物體共用著相同的材質(zhì),那么Unity會自動對這些物體進(jìn)行批處理替废。

動態(tài)批處理操作是自動完成的箍铭,并不需要你進(jìn)行額外的操作。

提醒:

1椎镣、 批處理動態(tài)物體需要在每個頂點上進(jìn)行一定的開銷诈火,所以動態(tài)批處理僅支持小于900頂點的網(wǎng)格物體。

2状答、 如果你的著色器使用頂點位置冷守,法線和UV值三種屬性,那么你只能批處理300頂點以下的物體惊科;如果你的著色器需要使用頂點位置拍摇,法線,UV0馆截,UV1和切向量充活,那你只能批處理180頂點以下的物體。

3、請注意:屬性數(shù)量的限制可能會在將來進(jìn)行改變混卵。

4映穗、 不要使用縮放尺度(scale)。分別擁有縮放尺度(1,1,1)和(2,2,2)的兩個物體將不會進(jìn)行批處理淮菠。

5男公、 統(tǒng)一縮放尺度的物體不會與非統(tǒng)一縮放尺度的物體進(jìn)行批處理荤堪。

使用縮放尺度(1,1,1)和 (1,2,1)的兩個物體將不會進(jìn)行批處理合陵,但是使用縮放尺度(1,2,1)和(1,3,1)的兩個物體將可以進(jìn)行批處理。

6澄阳、 使用不同材質(zhì)的實例化物體(instance)將會導(dǎo)致批處理失敗

7拥知、擁有l(wèi)ightmap的物體含有額外(隱藏)的材質(zhì)屬性,比如:lightmap的偏移和縮放系數(shù)等碎赢。所以低剔,擁有l(wèi)ightmap的物體將不會進(jìn)行批處理(除非他們指向lightmap的同一部分)。

8肮塞、 多通道的shader會妨礙批處理操作襟齿。比如,幾乎unity中所有的著色器在前向渲染中都支持多個光源枕赵,并為它們有效地開辟多個通道猜欺。

9、預(yù)設(shè)體的實例會自動地使用相同的網(wǎng)格模型和材質(zhì)拷窜。

靜態(tài)批處理

相對而言开皿,靜態(tài)批處理操作允許引擎對任意大小的幾何物體進(jìn)行批處理操作來降低繪制調(diào)用(只要這些物體不移動,并且擁有相同的材質(zhì))篮昧。因此赋荆,靜態(tài)批處理比動態(tài)批處理更加有效,你應(yīng)該盡量低使用它懊昨,因為它需要更少的CPU開銷窄潭。

為了更好地使用靜態(tài)批處理,你需要明確指出哪些物體是靜止的酵颁,并且在游戲中永遠(yuǎn)不會移動狈孔、旋轉(zhuǎn)和縮放。想完成這一步材义,你只需要在檢測器(Inspector)中將Static復(fù)選框打勾即可均抽,

使用靜態(tài)批處理操作需要額外的內(nèi)存開銷來儲存合并后的幾何數(shù)據(jù)。在靜態(tài)批處理之前其掂,如果一些物體共用了同樣的幾何數(shù)據(jù)油挥,那么引擎會在編輯以及運行狀態(tài)對每個物體創(chuàng)建一個幾何數(shù)據(jù)的備份。這并不總是一個好的想法,因為有時候深寥,你將不得不犧牲一點渲染性能來防止一些物體的靜態(tài)批處理攘乒,從而保持較少的內(nèi)存開銷。比如惋鹅,將濃密森里中樹設(shè)為Static则酝,會導(dǎo)致嚴(yán)重的內(nèi)存開銷。

重構(gòu)

一:重復(fù)的代碼

? ? 在程序中出現(xiàn)兩次以上的程序結(jié)構(gòu)闰集,應(yīng)該進(jìn)行重構(gòu):

? ? 1:在一個函數(shù)中出現(xiàn)重復(fù)的結(jié)構(gòu)(如:多個if語句)沽讹,就要考慮優(yōu)化算法,使用更簡潔武鲁、高效的寫法爽雄。

? ? 2:同一個類中出現(xiàn)兩次以上相同結(jié)構(gòu)的代碼,則提取出來作為一個函數(shù)沐鼠。

? ? 3:兩個互為兄弟的子類之間含相同代碼挚瘟,則先提取出來作為獨立函數(shù),然后上推到父類中饲梭。

? ? 4:兩個互為兄弟的子類之間含相似代碼乘盖,則先把相同部分提取作為函數(shù)1,不同部分作為函數(shù)2憔涉,然后在函數(shù)3中調(diào)用函數(shù)1订框、函數(shù)2,并把相同簽名的函數(shù)上推到父類监氢〔颊幔【這樣,由于子類各自重寫了函數(shù)1浪腐、2纵揍,那么子類的函數(shù)3產(chǎn)生的結(jié)果就不同。此法名為“塑造模版函數(shù)”】

? ? 5:兩個毫不相關(guān)的類中重復(fù)代碼议街,則把重復(fù)代碼提取到一個新的獨立類中泽谨,然后在原來的類中通過新類進(jìn)行調(diào)用。(例如:提取到工具類中)

? ? 二:過長函數(shù)

? ? 函數(shù)是功能的基本單元特漩,一個函數(shù)一個盡量承擔(dān)一個職責(zé)吧雹。如果一個函數(shù)中,做了多步工作涂身,則應(yīng)該進(jìn)行重構(gòu):

? ? 1:我們在編寫函數(shù)時雄卷,如果需要用注釋來說明某一塊代碼時,則應(yīng)該優(yōu)先考慮把這部分代碼作為一個函數(shù)來定義蛤售,并且通過函數(shù)名來說明其用途丁鹉;在重構(gòu)長函數(shù)時妒潭,這也是特征之一 —— “函數(shù)中哪里需要用注釋說明其用途,則嘗試提取出來作為獨立函數(shù)揣钦,用函數(shù)名表達(dá)其用途”

? ? 2:對已有長函數(shù)進(jìn)行分解:以單一功能為指標(biāo)雳灾,提取每一部分代碼進(jìn)獨立函數(shù),最后原函數(shù)只需通過一系列調(diào)用語句冯凹,引用被提取出去的函數(shù)即可谎亩。

? ? 3:長函數(shù)中的臨時變量:在原函數(shù)中,如有使用一些臨時變量來接收某個函數(shù)調(diào)用結(jié)果的宇姚,則把這些臨時變量直接用函數(shù)調(diào)用語句代替匈庭。

? ? 4:過長函數(shù)參數(shù)列:過長函數(shù)參數(shù)列表是函數(shù)調(diào)用出錯的主要原因,可以新建一個參數(shù)類空凸,把參數(shù)作為類成員嚎花,而調(diào)用時只需傳遞一個參數(shù)類對象即可寸痢。

? ? 5:有太多臨時變量和參數(shù)不能替代或提妊街蕖:使用函數(shù)對象法:新建一個新的類,在其中通過一個成員變量啼止,引用原來的類道逗;把原函數(shù)中用到的臨時變量、參數(shù)献烦,全部作為類成員字段滓窍;定義一個函數(shù),通過使用成員字段巩那,實現(xiàn)與原函數(shù)一樣的功能吏夯;最后,將原函數(shù)改造為:新建函數(shù)功能類對象(this即横,原臨時變量噪生,參數(shù) 作為構(gòu)造參數(shù)),調(diào)用功能函數(shù)东囚,并把結(jié)果返回跺嗽。

? ? 6:條件表達(dá)式改造:用于if語句的判斷表達(dá)式往往是造成代碼可讀性下降的原因之一,某些判斷語句用到的數(shù)據(jù)需要通讀上下文才能理解页藻〗凹蓿可以將條件語句提取出來,作為一個獨立函數(shù)份帐,通過函數(shù)名表達(dá)其判斷內(nèi)容璃吧,而函數(shù)內(nèi)根據(jù)判斷語句返回true 或 false 即可。

? ? 7:循環(huán)語句改造:循環(huán)語句塊同樣可以承擔(dān)單一職責(zé)废境,因此可以提取出來作為獨立函數(shù)畜挨,函數(shù)名表達(dá)其用途爷辙。

? ? 三:過大的類

? ? 類是面向?qū)ο蠖O(shè)計的,如果一個類中包含了太多與其本身無關(guān)的功能時朦促,就要考慮重構(gòu):

? ? 1:將與本類無關(guān)的變量膝晾、函數(shù),提取出來作為一個新類务冕;

? ? 2:如果提取出來的變量血当、函數(shù),適合作為一個子類禀忆,則使用提取子類法臊旭;


? ? 四:過長參數(shù)列表

? ? 1:如果參數(shù)是某個函數(shù)的調(diào)用結(jié)果,則直接使用函數(shù)調(diào)用語句作為參數(shù)箩退;

? ? 2:如果某幾個參數(shù)是屬于某一個類的字段离熏,則使用該類的對象作為參數(shù),以保持對象的完整性戴涝;

? ? 3:剩下的雜亂無章滋戳、缺乏歸屬對象的參數(shù),則為它們制造一個類啥刻,用以容納這些參數(shù)奸鸯,以參數(shù)類對象作為函數(shù)參數(shù)。

? ? 五:發(fā)散式變化【一個類受多種變化影響】

? ? 類的設(shè)計要有可擴展性可帽,并且修改要容易進(jìn)行娄涩。如果一個類需要引入不同變化時,對于每種變化映跟,需要修改多個地方蓄拣,則需要進(jìn)行重構(gòu):

? ? 以變化為基本單元,對于某一種變化努隙,所引起的修改球恤,提取到一個新的類中,使得每種變化都分別對應(yīng)于一個類而進(jìn)行剃法。

? ? 六:霰彈式變化【一個變化碎捺,影響多個類】

? ? 如果有一種變化,需要在多個不同類中進(jìn)行修改贷洲,則需要進(jìn)行重構(gòu):

? ? 根據(jù)這個變化所引起的修改收厨,把它們?nèi)刻崛〉揭粋€類中。

? ? 七:放錯位置

? ? 如果一個類中优构,有函數(shù)對另一個類的內(nèi)容調(diào)用頗多诵叁,則需要進(jìn)行重構(gòu):

? ? 1:如果是一個函數(shù)過多調(diào)用另一個類的數(shù)據(jù),則把該函數(shù)“搬移”到被那個類去钦椭;

? ? 2:如果是一個函數(shù)中部分代碼過多調(diào)用另一個類中數(shù)據(jù)拧额,則先把該部分代碼提煉為獨立函數(shù)碑诉,然后再搬移。

? ? 八:零散數(shù)據(jù)

? ? 如果有一些數(shù)據(jù)侥锦,常常在一起出現(xiàn)进栽,例如:作為函數(shù)參數(shù)經(jīng)常出現(xiàn),則需要進(jìn)行重構(gòu):

? ? 把這些零散的數(shù)據(jù)提煉到一個新的類中恭垦,以對象為單位來組織快毛、使用這些數(shù)據(jù)。

? ? 九:替換基本數(shù)據(jù)類型

? ? 對于某些小規(guī)模番挺、少字段的信息唠帝,雖然可以用幾個基本數(shù)據(jù)類型來表達(dá)出來,但是這些零散數(shù)據(jù)一旦分開使用玄柏,就讓人摸不清用途襟衰。所以需要重構(gòu):

? ? 1:用小對象組合零散數(shù)據(jù):例如:帶有數(shù)值與貨幣種類的money類、由start和end字段組成的range類等粪摘,類名清晰易懂瀑晒。

? ? 2:不影響類行為,只用于表示某內(nèi)容的類型碼替換:

? ? 3:影響類行為的類型碼替換:


? ? 十:switch語句塊重構(gòu)

? ? 將switch語句提煉到獨立函數(shù)赶熟,盡量用多態(tài)來取代case判斷語句的基本數(shù)據(jù)類型瑰妄,最后把該函數(shù)上推到父類中去陷嘴。

? ? 十一:平行繼承

? ? 如果有兩個繼承體系映砖,體系一的子類用途與體系二的子類用途相似,則需要重構(gòu):

? ? 在體系一中引用體系二子類實例灾挨,將原子類中的函數(shù)改寫為調(diào)用體系二子類實例中函數(shù)邑退。

? ? 十二:冗余類

? ? 如果有一些子類、獨立類劳澄,沒有承擔(dān)明確的用途地技,那么就需要重構(gòu):

? ? 1:如果是沒明確職責(zé)的子類,則折疊繼承體系——把子類內(nèi)容合并到父類去秒拔,取消子類莫矗。

? ? 2:如果是沒明確職責(zé)的獨立類,則將其內(nèi)容合并到最頻繁調(diào)用它的類中去砂缩。

? ? 十三:過長的調(diào)用鏈

? ? 如果存在一個類調(diào)用類2作谚,類2調(diào)用類3...造成一長串調(diào)用關(guān)系,則需要重構(gòu):

? ? 1:隱藏委托關(guān)系:把 類1對象.類2對象字段.getXX() 形式的代碼庵芭,在類1中進(jìn)行封裝妹懒,定義? get類2XX()? 函數(shù),在函數(shù)中通過類2對象.getXX()調(diào)用双吆,并把結(jié)果返回眨唬。


? ? 十四:去掉中間人

? ? 1:? 過度委托(一類中超過一半方法需要靠委托類來調(diào)用其他類方法):則隱藏中間人会前,去掉委托類,讓調(diào)用者直接與負(fù)責(zé)的對象打交道匾竿。

? ? 2:如果只有少數(shù)函數(shù)需要委托類來調(diào)用其他類方法:則把這些函數(shù)放進(jìn)調(diào)用端瓦宜,直接用調(diào)用端.XX()調(diào)用即可。

? ? 3:如果委托類還有其他行為岭妖,則使用“繼承取代委托”歉提,繼承實際負(fù)責(zé)類作為子類,從而擴展原對象的行為区转,又可以調(diào)用原對象的方法苔巨。

? ? 十五:訪問私有

? ? 如果兩個類之間彼此過多訪問private內(nèi)容,則需要重構(gòu):

? ? 1:把經(jīng)常需要互相調(diào)用的內(nèi)容提取到一個新的類中废离,在新類中光明正大地直接調(diào)用侄泽;

? ? 2:子類可以獨立成類:則用委托取代繼承。將子類作為一個獨立的類來定義蜻韭,在其中使用一個原父類對象進(jìn)行內(nèi)容調(diào)用悼尾。

? ? 十六:異曲同工的內(nèi)容

? ? 如果有功能相同的函數(shù)、代碼肖方,則將它們進(jìn)行統(tǒng)一闺魏。

? ? 十七:為原有類庫添加函數(shù)

? ? 如果需要在原有的類庫基礎(chǔ)上添加新函數(shù),可以使用繼承原類庫的功能類俯画,在子類中添加新函數(shù)析桥,在程序中使用自定義的子類即可。

? ? 十八:類中的字段封裝

? ? 類中的字段應(yīng)該保持私密性:

? ? 1:普通字段封裝:將public改為private艰垂,并定義public修飾的setter/getter函數(shù)泡仗。

? ? 2:集合字段封裝:對于集合類型的字段,定義public修飾的remove/add函數(shù)猜憎,在函數(shù)中通過集合字段本身調(diào)用remove\add操作娩怎。

? ? 3:只讀字段:對于一些定義了之后就不再修改的字段,我們應(yīng)該在類的構(gòu)造函數(shù)中進(jìn)行賦值胰柑,然后只提供getter函數(shù)截亦,隱藏setter函數(shù)。


? ? 十九:拒絕繼承

? ? 如果一個子類只需要父類中的少數(shù)內(nèi)容柬讨,那就應(yīng)該用委托取代繼承崩瓤,避免在子類中無謂地實現(xiàn)父類的接口。


? ? 二十:注釋過多

? ? 注釋可以增強代碼可讀性姐浮,但是注釋也為我們指明了重構(gòu)的方向谷遂。

? ? 1:需要用注釋來說明一個代碼塊的用途時,嘗試將其提取為獨立函數(shù)卖鲤,用函數(shù)名來表達(dá)用途肾扰;

? ? 2:需要注釋來說明某種條件畴嘶、狀態(tài)時,使用斷言集晚。

優(yōu)化

盡量不要頻繁的instantiate和destroy object窗悯,使用object pool

少使用臨時變量,特別是在Update OnGUI等實時調(diào)用的函數(shù)中偷拔。

如果沒有必要每幀都處理蒋院,則可以每隔幾幀處理一次

Ref可以多使用,傳參會多一次拷貝

Queue或者Stack來代替List

可以使用for就不使用foreach莲绰,foreach產(chǎn)生的迭代器可以產(chǎn)生GC以影響性能欺旧。

避免頻繁地Find、GetComponent蛤签。

使用內(nèi)建的常量辞友,例如Vector3.zero等等

使用gameObject.CompareTag(“XXX”)而非gameObject.tag

使用消耗更小的運算:例如1/5使用1*0.2來代替

Distance和magnitude

GetComponent不要在Update使用。

GameObject.Find()不要在Update

背景音樂選擇mp3壓縮格式震肮,盡量不超過100s称龙,盡量不要提前拖拽到場景內(nèi)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市戳晌,隨后出現(xiàn)的幾起案子鲫尊,更是在濱河造成了極大的恐慌,老刑警劉巖沦偎,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疫向,死亡現(xiàn)場離奇詭異,居然都是意外死亡扛施,警方通過查閱死者的電腦和手機鸿捧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疙渣,“玉大人,你說我怎么就攤上這事堆巧⊥螅” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵谍肤,是天一觀的道長啦租。 經(jīng)常有香客問我,道長荒揣,這世上最難降的妖魔是什么篷角? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮系任,結(jié)果婚禮上恳蹲,老公的妹妹穿的比我還像新娘虐块。我一直安慰自己,他們只是感情好嘉蕾,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布贺奠。 她就那樣靜靜地躺著,像睡著了一般错忱。 火紅的嫁衣襯著肌膚如雪儡率。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天以清,我揣著相機與錄音儿普,去河邊找鬼。 笑死掷倔,一個胖子當(dāng)著我的面吹牛箕肃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播今魔,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勺像,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了错森?” 一聲冷哼從身側(cè)響起吟宦,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涩维,沒想到半個月后殃姓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡瓦阐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年蜗侈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睡蟋。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡踏幻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戳杀,到底是詐尸還是另有隱情该面,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響闻镶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜猾瘸,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牵触,春花似錦淮悼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绰更,卻和暖如春瞧挤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背儡湾。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工特恬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徐钠。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓癌刽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尝丐。 傳聞我的和親對象是個殘疾皇子显拜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,392評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,103評論 1 32
  • 知子莫若母。我問媽媽要錢的時候她就猜我辭職又買東西了爹袁。我也知道她远荠,沒給我一定也是又買了什么很貴的東西臨近刷爆卡。 ...
    空瑾閱讀 113評論 0 0
  • 要知道失息,雖然我外表看上去溫柔踏實譬淳,但實際上想法經(jīng)常天馬行空。 于是乎便有許許多多不切實際的夢想盹兢。 在這一堆冒著粉色...
    貓和榴蓮閱讀 185評論 0 0
  • 我聽著窗外雨滴落下的聲音 只是靜靜地聽著 想了很多很多 對于現(xiàn)在的我,無奈邻梆! 你又怎么能了解我現(xiàn)在的心情呢 說過的...
    蘭亭遐想閱讀 179評論 0 0