Unity 資源管理

【轉】Unity資源管理(一)_jfy307596479的博客-CSDN博客_unity 資源管理

【延申-AddressableAsset】http://www.reibang.com/p/e79b2eef97bf

? ??????????????????????https://zhuanlan.zhihu.com/p/88495067?from_voters_page=true

Resources:Assets目錄下面新建Resources文件夾薯演,其中的所有資源跨扮,不論是否被場景用到验毡,都會被打包到游戲中晶通。

資源加載方式:

1.Resources.Load:加載Resources目錄的一個asset

2.Resources.LoadAsync:Resources.Load的異步方法

3.Resources.LoadAll:類似Resources.Load录择,但是用于加載某目錄下所有asset

4.Resources.LoadAssetAtPath:加載Asset/目錄下的資源隘竭,只能用于編輯器模式,寫打包工具時可能用到

Resources類只能加載Resources文件夾下的資源尊剔,若出現(xiàn)嵌套须误,都會加載建議在Assets下放一個Resource文件夾就好京痢;Resources加載資源時應使用相對路徑,且不包含擴展名臭家。如 Resources.Load<Texture2D>("images/texture1");?

卸載資源:

1.Resources.UnloadAsset(Object assetToUnload):卸載指定的asset钉赁,只能用于從磁盤加載的你踩;如果場景中有此asset的引用讳苦,Unity會自動重新加載它医吊,CPU開銷小卿堂。

2.Resources.UnloadUnusedAssets:卸載所有未被引用的asset草描,可以在畫面切換時調用,或定時調用釋放全局未使用資源饿敲。被腳本的靜態(tài)變量引用的資源不會被卸載怀各。盡量避免在游戲進行中調用瓢对,因為該接口開銷較大硕蛹,容易引起卡頓,可嘗試用Resources.Unload(obj)逐個卸載秧荆,保證游戲的流暢度乙濒。

AssetBundle:

上圖流程:

? ? ? ?1.Unity 在使用 WWW 方法時會分配一系列的內存空間來存放 WWW 實例對象、 WebStream 數(shù)據(jù)毙玻。該數(shù)據(jù)包括原始的 AssetBundle 數(shù)據(jù)桑滩、解壓后的 AssetBundle 數(shù)據(jù)以及一個用于解壓的 Decompression Buffer 运准。(一般情況下胁澳, Decompression Buffer 會在原始的 AssetBundle 解壓完成后自動銷毀米者,但需要注意的是蔓搞, Unity 會自動保留一個 Decompression Buffer 喂分,不被系統(tǒng)回收蒲祈,這樣做的好處是不用過于頻繁的開辟和銷毀解壓 Buffer 梆掸,從而在一定程度上降低 CPU 的消耗。)

2.當把AssetBundle 解壓到內存后邀泉,可以使用WWW?.assetBundle屬性來獲取AssetBundle 對象汇恤,從而可以得到各種Asset因谎,進而對這些Assets進行加載或者實例化操作财岔。加載過程中匠璧,Unity 會將AssetBundle 中的數(shù)據(jù)流轉變?yōu)橐婵梢宰R別的信息類型(紋理、材質魔眨、對象等)酿雪。加載完成后遏暴,開發(fā)者可以對其進行進一步的操作,比如對象的實例化指黎、紋理和材質的復制和替換等朋凉。

更新:

? ? ? ?游戲一開始運行時,通過文件里面記錄的版本號醋安,和服務器上文件中的版本號比對侥啤。如果本地版本號低,下載對應的AB包到可讀寫目錄茬故,并對本地資源進行替換,這樣進入游戲中加載的就是新下載的AB包資源磺芭。

更新流程如下:

1. ?將更新包資源(安裝包中的資源)復制到可讀寫目錄下

2. ?復制完成開始比對哈希文件,開始更新資源

3. ?下載添加資源,替換舊資源,刪除原來可讀寫目錄下的無用資源

4. ?初始化assetbundle依賴關系

5. ?完成整個流程

更新注意:

1. ?要有下載失敗重試幾次機制赁炎;

2. ?要進行超時檢測;

3. ?要記錄更新日志钾腺,例如哪幾個資源時整個更新流程失敗徙垫。

資源加載:

通過AssetBundle加載資源:首先需要獲取AssetBundle對象,然后通過該對象加載需要的資源放棒。

獲取AssetBundle對象分為兩種方式姻报,可以通過下面兩種方式:

? ? ? ?一、先獲得WWW對象间螟,通過WWW.assetBundle獲取AssetBundle對象

? ? ? ? ? ? ?1. ?public WWW(string url);

? ? ? ? ? ? ?加載Bundle文件并獲取WWW對象吴旋,每次加載完成后會在內存中創(chuàng)建較大的WebStream(解壓后的內容通常為原Bundle ? ? ? 文件的4~5倍大小损肛,紋理資源比例可能更大),因此后續(xù)的AssetBundle.Load可以直接在內存中進行荣瑟。

2. ?public static WWW LoadFromCacheOrDownload(string url, int version, uint crc = 0);

從緩存或網(wǎng)絡上下載后加載Bundle并獲取WWW對象治拿,同時將解壓形式的Bundle內容存入磁盤中作為緩存(如果該 ? ? ? Bundle已在緩存中,則省去這一步)笆焰。完成后只會在內存中創(chuàng)建較小的SerializedFile劫谅,而后續(xù)的AssetBundle.Load需要通過IO ? ? ? 從磁盤中的緩存獲取。

? ? ? ? ? ? ? 通過上面這兩個接口獲取WWW對象后嚷掠,即可通過WWW.assetBundle獲取AssetBundle對象捏检。

??總結:第一種WWW方式,后續(xù)的Load都在內存中進行不皆,相比第二種方式IO操作開銷泄岢恰;第一種不會形成緩存文件粟焊,而第二種需要額外的磁盤空間存放緩存冤狡;第一種能通過WWW.texture孙蒙,WWW.bytes项棠,WWW.audioClip等接口直接加載外部資源,而后者只能用于加載AssetBundle挎峦。但是香追,第一種每次加載都涉及到解壓操作,而后者在第二次加載時就省去了解壓的開銷坦胶;第一種在內存中會有較大的WebStream透典,而后者在內存中只有通常較小的SerializedFile。(此項為一般情況顿苇,但并不絕對峭咒,對于序列化信息較多的Prefab,很可能出現(xiàn)SerializedFile比WebStream更大的情況)

? ? ?二纪岁、直接獲取AssetBundle:

? ? ? ? ? ? ? 1. public static AssetBundle CreateFromFile(string path);

? ? ? ? ? ? ? 從磁盤加載一個AssetBundle凑队,相比其他方式速度最快,但是只能加載uncompressed的AssetBundle幔翰。Unity 5.x改為 ? ? ? ? ? ? ?LoadFromFile漩氨,而且可以加載compressed的;

? ? ? ? ? ? ? ?2. ?public static AssetBundleCreateRequest CreateFromMemory(byte[] binary);通過Bundle的二進制數(shù)據(jù)遗增,異步創(chuàng)建 ? ? ? ? ? ?AssetBundle對象叫惊。完成后會在內存中創(chuàng)建較大的WebStream。調用時做修,Bundle的解壓是異步進行的霍狰,因此對于未壓縮的 ? ? ? ? ? Bundle文件抡草,該接口與CreateFromMemoryImmediate等價。

? ? ? ? ? ? ? ?3. ?public static AssetBundle AssetBundle.CreateFromMemoryImmediate(byte[] binary): ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? AssetBundle.CreateFromMemory的同步版本蚓耽。

Unity5.3下分別改名為LoadFromFile渠牲,LoadFromMemory,LoadFromMemoryAsync并增加了LoadFromFileAsync步悠,且機制也有一定的變化

?獲得AssetBundle對象后可以通過下面API來從中加載資源

? ? ? 1. ?public Object LoadAsset(string name, Type type);

? ? ? 通過給定的名字和資源類型签杈,加載資源。加載時會自動加載其依賴的資源鼎兽,即Load一個Prefab時答姥,會自動Load其引用的Texture資源。

? ? ? ?2. ?public Object[] LoadAllAssets(Type type);

? ? ? ?一次性加載Bundle中給定資源類型的所有資源谚咬。

? ? ? ?3. ?public AssetBundleRequest LoadAssetAsync(string name, Type type);

? ? ? ?該接口是Load的異步版本鹦付。

資源卸載:

? ? ? ?1. ?WWW對象:調用對象的Dispose函數(shù)或將其置為null;

? ? ? ?2. ?WebStream:在卸載WWW對象以及對應的AssetBundle對象后择卦,這部分內存即會被引擎自動卸載敲长;

? ? ? ?3. ?SerializedFile:卸載AssetBundle后,這部分內存會被引擎自動卸載秉继;

? ? ? ?4. ?GameObject :可通過Object.Destory()卸載祈噪;

? ? ? ?5. ?Prefab:只能通過DestroyImmediate()來卸載,卸載后必須重新加載AssetBundle才能重新加載該Prefab尚辑。由于內存開銷較小辑鲤,通常不建議進行針對性地卸載;

? ? ?? 6. ?普通資源(除Prefab):除了Resources類提供的卸載接口外杠茬,AssetBundle.Unload(false)在卸載AssetBundle對象時月褥,將加載出來的資源一起卸載;

? ? ? ?7. ?AssetBundle:

? ? ? ? ? ? ? 1>AssetBundle.Unload(false):卸載AssetBundle對象時保留內存中已加載的資源瓢喉,在卸載AssetBundle對象后宁赤,如果 ? ? ? ? ?重新創(chuàng)建該對象,并加載之前加載過的資源到內存時栓票,會出現(xiàn)冗余决左,即兩份相同的資源。

? ? ? ? ? ? ? ?2>?AssetBundle.Unload(true):卸載AssetBundle對象時卸載內存中已加載的資源逗载,由于該方法容易引起資源引用丟 ? ? ? ? ? ? 失哆窿,因此并不建議經(jīng)常使用。

壓縮格式:

? ? ? ? 1. ?LZMA格式

? ? ? ? 在默認情況下厉斟,打包生成的AssetBundle都會被壓縮挚躯。在U3D中AssetBundle的標準壓縮格式便是LZMA(流式序列化文件)。因此在默認情況下擦秽,打出的AssetBundle包處于LZMA格式的壓縮狀態(tài)码荔,在使用AssetBundle前需要先解壓縮漩勤。使用LZMA格式壓縮的AssetBundle的包體積最小(高壓縮比)缩搅,但是相應的會增加解壓縮時的時間越败。

? ? ? ? 2. ?LZ4格式

? ? ? ? Unity 5.3之后的版本增加了LZ4格式壓縮,由于LZ4的壓縮比一般硼瓣,因此經(jīng)過壓縮后的AssetBundle包體的體積較大(該算法基于chunk)究飞。但是,使用LZ4格式的好處在于解壓縮的時間相對要短堂鲤。若要使用LZ4格式壓縮亿傅,只需要在打包的時候開啟BuildAssetBundleOptions.ChunkBasedCompression即可。

? ? ? ? ?3. ?不壓縮

? ? ? ? ?我們也可以不對AssetBundle進行壓縮瘟栖。沒有經(jīng)過壓縮的包體積最大葵擎,但是訪問速度最快。若要使用不壓縮的策略半哟,只需要在打包的時候開啟BuildAssetBundleOptions.UncompressedAssetBundle即可酬滤。

打包:

? ? ? ? Unity5.x打包:在資源的Inpector界面最下方可設置一個abName,每個abName(包含路徑)對應一個Bundle寓涨,即abName相同的資源會打在一個Bundle中盯串。如果所依賴的資源設置了不同的abName,則會與之建立依賴關系缅茉,避免出現(xiàn)冗余嘴脾。

? ? ? ? 接口:public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions ? ? ?assetBundleOptions = BuildAssetBundleOptions.None,BuildTarget targetPlatform = BuildTarget.WebPlayer);

打包顆粒度:

? ? ? ?AssetBundle粒度過大男摧,會影響打包蔬墩、上傳、下載的效率耗拓,并且浪費用戶流量拇颅,同時在runtime時候IO這個Assetbundle會非常吃力,導致卡頓嚴重乔询。

? ? ? ? Assetbundle粒度過小樟插,整個工程有數(shù)百上千個Assetbundle,維護上會產(chǎn)生極大的不便竿刁,另外Runtime實例化一個角色時也會發(fā)生多次IO黄锤,這嚴重影響游戲性能。在Unity 5.3 ~ 5.5 版本中食拜,Android平臺上在不Unload的情況下鸵熟,每個AssetBundle的加載,其每個文件的SerializedFile內存占用均為512KB(遠高于其他平臺)负甸,所以當內存中貯存了大量AssetBundle時流强,其SerializedFile的內存占用將會非常巨大同時痹届。不過該問題已在Unity5.6中進行完善。

? ? ? ?劃分Assetbundle的粒度主要考慮4個方面:資源類型打月、冗余大小队腐、程序性能、后期維護奏篙。在最終資源粒度劃分成型前柴淘,大概經(jīng)歷了3個階段,每個階段所考慮的要素不同秘通。

一悠就、探索階段

? ? ? ?在熱更新模塊設計初期就劃分出合適的粒度是比較困難的,在這個階段主要的目的是模塊的實現(xiàn)充易,只需按照類型進行簡單劃分即可梗脾。資源的類型有:音樂(音效)、配置文件盹靴、特效炸茧、Item、NPC稿静、Monster控漠、Role默勾、UI、Scene、腳本(Lua)淋叶。

? ? ? ?打包的策略可以參考如下幾項:

1. ?通常情況下,1M左右的AssetBundle包加載性能最好,冗余也可以接受,但是在Unity 5.3版本之后,對于AB文件的文件大小其實不必再限定于1MB之內。使用LZ4壓縮罩句,基于其Chunk的加載特點,AB加載很快挖滤,且內存占用要比之前小很多惧盹。所以LZ4的AB其實可以考慮更加粗粒度一些。

2. ?根據(jù)依賴樹進行的最優(yōu)打包策略粹断,公共資源單獨打ab符欠,獨立資源打到一起。

3. ?shader字體等其他細碎并且需要常駐內存的資源打包到一起瓶埋,啟動游戲的時候常駐內存希柿。

4. ?根據(jù)項目實際需求將需要經(jīng)常熱更新的資源進行單獨打包。

二养筒、優(yōu)化階段

? ? ? ? 以常見的MMORPG項目來說曾撤,這個階段熱更新模塊已經(jīng)通過了內部測試。但是在實際使用過程中晕粪,會發(fā)現(xiàn)部分Assetbundle過大挤悉,加載時間較長,出現(xiàn)了明顯的卡頓巫湘,這時可以考慮拆分Monster尖啡、Role、Scene這3個焦點Assetbundle剩膘。

1. ?Monster的拆分標準是骨骼重定向衅斩,unity支持多個模型共用一套骨骼,從而共享一套模型動畫怠褐。使用這個機制會節(jié)省大量資源畏梆,按照這個原則,我們把所有共享骨骼的模型放在一個Assetbundle里奈懒,這樣既減小了IO的壓力奠涌,又使冗余做到了最小。

2. ?Role的拆分同樣遵循上述規(guī)則磷杏,同時由于role的武器是單獨的模型(支持換裝)溜畅,也就是一個類型的Role對應兩個AssetBundle,Role本身+武器极祸。

3. ?Scene的拆分比較簡單慈格,之前是所有的Scene一個Assetbundle,現(xiàn)在改為一種類型scene一個Assetbundle遥金。

三浴捆、測試階段

? ? ? ?此階段主要對項目進行加載速度、IO占用稿械、資源冗余來做整體測試选泻,發(fā)現(xiàn)局部問題并針對性解決。

內存占用

1. ?對于需要常駐內存的Bundle文件來說,

? ? ? ?優(yōu)先考慮減小內存占用页眯,因此對于存放非Prefab資源(特別是紋理)的Bundle文件梯捕,可以考慮使用WWW.LoadFromCacheOrDownload或AssetBundle.CreateFromFile加載,從而避免WebStream常駐內存窝撵;而對于存放較多Prefab資源的Bundle科阎,則考慮使用new WWW加載,因為這類Bundle用WWW.LoadFromCacheOrDownload加載時產(chǎn)生的SerializedFile可能會比new WWW產(chǎn)生的WebStream更大忿族。

2. ?對于加載完后即卸載的Bundle文件

? ? ? ?分兩種情況:優(yōu)先考慮速度(加載場景時)和優(yōu)先考慮流暢度(游戲進行時)锣笨。

? ? ? ?1)加載場景的情況下,需要注意的是避免WWW對象的逐個加載導致的CPU空閑道批,可以考慮使用加載速度較快的WWW.LoadFromCacheOrDownload或AssetBundle.CreateFromFile错英,但需要避免后續(xù)大量地進行Load資源的操作,引起IO開銷(可以嘗試直接LoadAll)隆豹。

? ? ? ?2) 游戲進行的情況下椭岩,則需要避免使用同步操作引起卡頓,因此可以考慮使用new WWW配合AssetBundle.LoadAsync來進行平滑的資源加載璃赡,但需要注意的是判哥,對于Shader、較大的Texture等資源碉考,其初始化操作通常很耗時塌计,容易引起卡頓,因此建議將這類資源在加載場景時進行預加載侯谁。

3. ?只在Bundle需要加密的情況下锌仅,考慮使用CreateFromMemory,因為該接口加載速度較慢墙贱。

資源冗余

? ? ? ?Unity 5.x版本里會自動收集并分析其依賴的資源热芹,如果該資源依賴的某個資源沒有被顯式指定打包到ab中,就將其依賴的這個資源打包進該資源所在的ab里惨撇。如果已經(jīng)被指定打包進其他ab里伊脓,那么這兩個ab之間就會構成依賴關系,加載ab時魁衙,先加載其依賴的ab即可报腔。

? ? ? ?雖然這種依賴管理機制使用方便,但是會引起資源冗余問題:如果兩個ab包A和B纺棺,其中的一些資源都依賴了一個沒有被指定要打包的資源C榄笙,那么C就會同時被打進ab A和B中,增大ab和安裝包的體積祷蝌。而這個被A,B依賴的資源C又可以分為兩種類型帆卓,一種是Assets下外部導入的資源巨朦,即開發(fā)者導入或創(chuàng)建的資源米丘;另一種則是Unity內置的資源,例如內置的Shader糊啡,Default-Material和UGUI一些組件如Image用的一些紋理資源等等拄查。下面分析這兩種情況處理:

? ? ? ?一、被依賴的外部資源

? ? ? ?將那些被多個ab包依賴的資源打包到一個公共ab包中棚蓄。處理過程如下:

1. ?使用EditorUtility.CollectDependencies()得到ab依賴的所有資源的路徑堕扶,其中會收集到不需打包進ab中的腳本、dll梭依、編輯器資源稍算,需要手動剔除;

2. ?統(tǒng)計資源被所有ab引用的次數(shù)役拴,將被多個ab引用的資源打包為公共ab包糊探。

? ? ? ?二、Unity內置資源

? ? ? ? ? ? 可以通過提取出Unity內置的資源河闰,在打ab前進行預處理科平,修改引用為提取出的資源。

使用AssetDataBase.LoadAllAssetsAtPath()?可以加載出Resources/unity_builtin_extra下所有的Object姜性,可以發(fā)現(xiàn)共有4種 ? ? ?類型的資源:Shader瞪慧,Material,Texture以及Sprite部念。對于內置Shader汞贸,可以直接從Unity官方網(wǎng)站下載;而對于后三種印机,可 ? ? ? ?以通過AssetDataBase提供的相關API來進行創(chuàng)建:

Object[] UnityAssets = AssetDatabase.LoadAllAssetsAtPath("Resources/unity_builtin_extra");

foreach (var asset in UnityAssets)

{

// create asset...

}

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

參考:https://blog.uwa4d.com/archives/ABTheory.html

https://blog.uwa4d.com/archives/ABTheory.html

【二】

一矢腻、資源讀取方式

1. Resources:支持編輯器模式和發(fā)布模式?,缺點:Resources文件夾下的任何一點點修改射赛,都會導致Resources包的重打多柑。

2.?AssetDatabase :僅支持編輯器模式,缺點:正式發(fā)布版不能用楣责,要用AssetBundle來替換竣灌。

3. AssetBundle: 支持編輯器模式和發(fā)布模式,可以根據(jù)自己的項目實際情況自定義打包粒度秆麸,很好的支持熱更新初嘹。開發(fā)時別用,定義宏沮趣,編輯器模式下用AssetDatabase屯烦。

同時AssetBundle也支持異步的讀取:

AssetBundleRequest abRequest = null;

abRequest = item.assetBundel.LoadAssetAsync("eg");

yield return abRequest;

if (abRequest.isDone)

{

}

方法,使用一個優(yōu)先級的隊列來添加異步加載的指令。

eg:List<ResourceParam>[] m_Loading = new List<ResourceParam>[(int)Priority.Num];

二驻龟、AssetBundle温眉,資源加載和卸載

?????? Unity5可以通過每個資源Inspector底部的AssetBundle下拉來指定該資源要打入哪個包,不指定就是不打包翁狐。打包過程只需要BuildPipeline.BuildAssetBundles一句話就行了类溢,Unity5會根據(jù)依賴關系自動生成所有的包。每個包還會生成一個manifest文件露懒,這個文件描述了包大小闯冷、crc驗證、包之間的依賴關系等等懈词,通過這個manifest打包工具在下次打包的時候可以判斷哪些包中的資源有改變蛇耀,只打包資源改變的包,加快了打包速度钦睡。(這些都在上篇文章中提到過)

三蒂窒、貼圖資源配置

??????? Unity根據(jù)貼圖配置會自動生成最后的貼圖數(shù)據(jù)。

??????? 實際優(yōu)化:

????????1.不會在程序中訪問的取消其Read/Write Enable屬性荞怒,如果打開這個屬性洒琢,會使運行時貼圖大小翻倍,內存中會額外存儲一份貼圖數(shù)據(jù)褐桌。同樣衰抑,模型沒有頂點動畫也可以將這個屬性關掉。

???????? 2.貼圖不需要A通道的不要講圖片格式設置為RGBA相關格式荧嵌,設置為RGB節(jié)省1/4內存呛踊,圖片尺寸最大1024*1024。

???????? 3.寫工具將未設置圖集或者圖集設置不正確的圖片找出來啦撮,給圖片設置圖集谭网,同一圖集內的圖片格式最好格式相同,否則會被分成不同的group赃春。

???????? 4.查找重復的貼圖刪除愉择。

?????????5.prefab上如果帶有Animator并且上面只有一個動畫,則用Animation替換织中。

?????????6.mipmap關掉锥涕,減少多余內存。在測試中我們也發(fā)現(xiàn)開啟Mipmap并沒有帶來多少性能提升狭吼,在手游的場景中层坠,我們的視距非常近,并沒有過多這方面的需求刁笙。同時關閉Mipmap我們能節(jié)約33%內存破花,這是一個比較不錯的提升谦趣。

?????????7.所有紋理,不透明的使用ETC壓縮格式旧乞,透明的使用ETC2壓縮格式蔚润。ETC是所有Android都接受的格式磅氨,這個格式的壓縮質量較差尺栖。但在大部分情況下,很難在手機那么小的屏幕上看到差異烦租。

?????? 在最優(yōu)配置下使貼圖大小縮小了大約64倍延赌。

?????????(持續(xù)更新)

四、模型

?????? 角色:高中低叉橱,武器:高中低挫以,特效:高中低。模型面數(shù)不同窃祝,需要的貼圖也不同掐松,高級的可能需要法線貼圖和Diffuse貼圖,中級和低級的只要Diffuse貼圖就可以粪小,用不同的shader實現(xiàn)大磺。

五、音效

??????? BGM先優(yōu)化探膊, 壓縮杠愧,降低比特率/單聲道/控制時長。

六逞壁、視頻

??????? 壓縮

七流济、資源管理器:

統(tǒng)一Resources和AssetBundles加載

類似的加載接口設計,包括同步與異步

強引用計數(shù)管理腌闯,Load與Unload匹配

支持按優(yōu)先級加載資源(最高優(yōu)先級:人物模型绳瘟、界面等;頭頂Ui姿骏、特效等糖声;聲音、自己界面的資源工腋;自己界面的姨丈、離人遠的特效、圓盤陰影等)

支持配置系統(tǒng)開銷擅腰,異步加載開銷

八蟋恬、資源對象池的使用,緩存復用趁冈。

移動端DC不超過300歼争,

耗電量:GPU性能>CPU性能>內存占用>載入速度

瞬卡:CPU性能>載入速度>內存占用>GPU性能

平均幀數(shù):GPU性能>=CPU性能>載入速度>占用

參考:http://www.reibang.com/p/77aa1c492db6

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末拜马,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沐绒,更是在濱河造成了極大的恐慌俩莽,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乔遮,死亡現(xiàn)場離奇詭異扮超,居然都是意外死亡,警方通過查閱死者的電腦和手機蹋肮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門出刷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坯辩,你說我怎么就攤上這事馁龟。” “怎么了漆魔?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵坷檩,是天一觀的道長。 經(jīng)常有香客問我改抡,道長矢炼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任雀摘,我火速辦了婚禮裸删,結果婚禮上,老公的妹妹穿的比我還像新娘阵赠。我一直安慰自己涯塔,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布清蚀。 她就那樣靜靜地躺著匕荸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枷邪。 梳的紋絲不亂的頭發(fā)上榛搔,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音东揣,去河邊找鬼践惑。 笑死,一個胖子當著我的面吹牛嘶卧,可吹牛的內容都是我干的尔觉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼芥吟,長吁一口氣:“原來是場噩夢啊……” “哼侦铜!你這毒婦竟也來了专甩?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钉稍,失蹤者是張志新(化名)和其女友劉穎涤躲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贡未,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡种樱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了羞秤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缸托。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡左敌,死狀恐怖瘾蛋,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情矫限,我是刑警寧澤哺哼,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站叼风,受9級特大地震影響取董,放射性物質發(fā)生泄漏。R本人自食惡果不足惜无宿,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一茵汰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孽鸡,春花似錦蹂午、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巷疼,卻和暖如春晚胡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嚼沿。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工估盘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骡尽。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓遣妥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爆阶。 傳聞我的和親對象是個殘疾皇子燥透,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容