久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity 性能优化归纳

發(fā)布時間:2023/12/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity 性能优化归纳 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、SimpleLOD :

除了同樣擁有Mesh Baker所具有的Mesh合并、Atlas烘焙等功能,它還能提供Mesh的簡化,并對動態(tài)蒙皮網(wǎng)格進行了很好的支持。

該插件可在Run-time和Editor中都可以使用,同時開放了源碼,大家可以根據(jù)項目的實際情況而作修改。

http://download.csdn.net/download/jasonczy/10178526

?

一、

轉(zhuǎn)載自?http://blog.csdn.net/game_jqd/article/details/51899000

使用Profiler工具分析內(nèi)存占用情況

  • System.ExecutableAndDlls:系統(tǒng)可執(zhí)行程序和DLL,是只讀的內(nèi)存,用來執(zhí)行所有的腳本和DLL引用。不同平臺和不同硬件得到的值會不一樣,可以通過修改Player Setting的Stripping Level來調(diào)節(jié)大小。

?

Ricky:我試著修改了一下Stripping Level似乎沒什么改變,感覺雖占用內(nèi)存大但不會影響游戲運行。我們暫時忽略它吧(- -)!

?

  • GfxClientDevice:GFX(圖形加速\圖形加速器\顯卡 (GraphicsForce Express))客戶端設備。

?

Ricky:雖占用較大內(nèi)存,但這也是必備項,沒辦法優(yōu)化。繼續(xù)忽略吧(- -)!!

?

  • ManagedHeap.UsedSize:托管堆使用大小。

?

Ricky:重點監(jiān)控對象,不要讓它超過20MB,否則可能會有性能問題!

?

  • ShaderLab:Unity自帶的著色器語言工具相關資源。

?

Ricky:這個東西大家都比較熟悉了,忽略它吧。

?

  • SerializedFile:序列化文件,把顯示中的Prefab、Atlas和metadata等資源加載進內(nèi)存。

?

Ricky:重點監(jiān)控對象,這里就是你要監(jiān)控的哪些預設在序列化中在內(nèi)存中占用大小,根據(jù)需求進行優(yōu)化。

?

?

  • PersistentManager.Remapper:持久化數(shù)據(jù)重映射管理相關

?

Ricky:與持久化數(shù)據(jù)相關,比如AssetBundle之類的。注意監(jiān)控相關的文件。

?

  • ManagedHeap.ReservedUnusedSize:托管堆預留不使用內(nèi)存大小,只由Mono使用。

?

Ricky:無法優(yōu)化。

  • 許多貼圖采用的Format格式是ARGB 32 bit所以保真度很高但占用的內(nèi)存也很大。在不失真的前提下,適當壓縮貼圖,使用ARGB 16 bit就會減少一倍,如果繼續(xù)Android采用RGBA Compressed ETC2 8 bits(iOS采用RGBA Compressed PVRTC 4 bits),又可以再減少一倍。把不需要透貼但有alpha通道的貼圖,全都轉(zhuǎn)換格式Android:RGB Compressed ETC 4 bits,iOS:RGB Compressed PVRTC 4 bits。
  • 當加載一個新的Prefab或貼圖,不及時回收,它就會永駐在內(nèi)存中,就算切換場景也不會銷毀。應該確定物體不再使用或長時間不使用就先把物體制空(null),然后調(diào)用Resources.UnloadUnusedAssets(),才能真正釋放內(nèi)存。
  • 有大量空白的圖集貼圖,可以用TexturePacker等工具進行優(yōu)化或考慮合并到其他圖集中。
  • ?

    ?

    • AudioManager:音頻管理器

    ?

    Ricky:隨著音頻文件的增多而增大。

    ?

    • AudioClip:音效及聲音文件

    ?

    Ricky:重點優(yōu)化對象,播放時長較長的音樂文件需要進行壓縮成.mp3或.ogg格式,時長較短的音效文件可以使用.wav 或.aiff格式。

    ?

    • Cubemap:立方圖紋理

    ?

    Ricky:這個一般在天空盒中比較常見,我也不知道如何優(yōu)化這個。。。

    ?

    • Mesh:模型網(wǎng)格

    ?

    Ricky:主要檢查是否有重復的資源,還有盡量減少點面數(shù)。

    • Mesh:場景中使用的網(wǎng)格模型

    ?

    Ricky:注意網(wǎng)格模型的點面數(shù),能合并的mesh盡量合并。

    1)ManagedHeap.UsedSize: 移動游戲建議不要超過20MB.

    2)SerializedFile: 通過異步加載(LoadFromCache、WWW等)的時候留下的序列化文件,可監(jiān)視是否被卸載.

    3)WebStream: 通過異步WWW下載的資源文件在內(nèi)存中的解壓版本,比SerializedFile大幾倍或幾十倍,不過我們現(xiàn)在項目中展示沒有。

    4)Texture2D: 重點檢查是否有重復資源和超大Memory是否需要壓縮等.

    5)AnimationClip: 重點檢查是否有重復資源.

    6)Mesh: 重點檢查是否有重復資源.

    1.Device.Present:

    1)GPU的presentdevice確實非常耗時,一般出現(xiàn)在使用了非常復雜的shader.

    2)GPU運行的非常快,而由于Vsync的原因,使得它需要等待較長的時間.

    3)同樣是Vsync的原因,但其他線程非常耗時,所以導致該等待時間很長,比如:過量AssetBundle加載時容易出現(xiàn)該問題.

    4)Shader.CreateGPUProgram:Shader在runtime階段(非預加載)會出現(xiàn)卡頓(華為K3V2芯片).

    5)StackTraceUtility.PostprocessStacktrace()和StackTraceUtility.ExtractStackTrace(): 一般是由Debug.Log或類似API造成,游戲發(fā)布后需將Debug API進行屏蔽。

    2.Overhead:

    1)一般情況為Vsync所致.

    2)通常出現(xiàn)在Android設備上.

    3.GC.Collect:

    原因:

    1)代碼分配內(nèi)存過量(惡性的)

    2)一定時間間隔由系統(tǒng)調(diào)用(良性的).

    占用時間:

    1)與現(xiàn)有Garbage size相關

    2)與剩余內(nèi)存使用顆粒相關(比如場景物件過多,利用率低的情況下,GC釋放后需要做內(nèi)存重排)

    4.GarbageCollectAssetsProfile:

    1)引擎在執(zhí)行UnloadUnusedAssets操作(該操作是比較耗時的,建議在切場景的時候進行)。

    2)盡可能地避免使用Unity內(nèi)建GUI,避免GUI.Repaint過渡GCAllow.

    3)if(other.tag == a.tag)改為other.CompareTag(a.tag).因為other.tag為產(chǎn)生180B的GC Allow.

    4)少用foreach,因為每次foreach為產(chǎn)生一個enumerator(約16B的內(nèi)存分配),盡量改為for.

    5)Lambda表達式,使用不當會產(chǎn)生內(nèi)存泄漏.

    5.盡量少用LINQ:

    1)部分功能無法在某些平臺使用.

    2)會分配大量GC Allow.

    6.控制StartCoroutine的次數(shù):

    1)開啟一個Coroutine(協(xié)程),至少分配37B的內(nèi)存.

    2)Coroutine類的實例 -> 21B.

    3)Enumerator -> 16B.

    7.使用StringBuilder替代字符串直接連接.

    8.緩存組件:

    1)每次GetComponent均會分配一定的GC Allow.

    2)每次Object.name都會分配39B的堆內(nèi)存.

    ?

    ?

    ?

    .框架設計層面。

    ?

    一個相對中大型的游戲,系統(tǒng)非常的多。這時候合理的適時的釋放內(nèi)存有助于游戲的正常體驗,甚至可以防止內(nèi)存快速到達峰值,導致設備Crash。

    目前主流平臺機型可用內(nèi)存:

    Android平臺:在客戶端最低配置以上,均需滿足以下內(nèi)存消耗指標(PSS):

    1)內(nèi)存1G以下機型:最高PSS<=150MB

    2)內(nèi)存2G的機型:最高PSS<=200MB

    iOS平臺:在iPhone4S下運行,消耗內(nèi)存(real mem)不大于150MB

    ?

    1.場景切換時避開峰值。

    當前一個場景還未釋放的時候,切換到新的場景。這時候由于兩個內(nèi)存疊加很容易達到內(nèi)存峰值。解決方案是,在屏幕中間遮蓋一個Loading場景。在舊的釋放完,并且新的初始化結(jié)束后,隱藏Loading場景,使之有效的避開內(nèi)存大量疊加超過峰值。

    ?

    2.GUI模塊加入生命周期管理。

    ?

    主角、強化、技能、商城、進化、背包、任務等等。通常一個游戲都少不了這些系統(tǒng)。但要是全部都打開,或者這個時候再點世界地圖,外加一些邏輯數(shù)據(jù)內(nèi)存的占用等等。你會發(fā)現(xiàn),內(nèi)存也很快就達到峰值。

    這時候有效的管理系統(tǒng)模塊生命周期就非常有必要。首先將模塊進行劃分:

    ?

    1)經(jīng)常打開 Cache_10;

    2)偶爾打開 Cache_5;

    3)只打開一次 Cache_0。

    ?

    創(chuàng)建一個ModuleMananger 類,內(nèi)部Render方法每分鐘輪詢一次。如果是“Cache_0”這個類型,一關閉就直接Destroy釋放內(nèi)存;“Cache_10”這個類型為10分鐘后自動釋放內(nèi)存;" Cache_5"這種類型為5分鐘后自動釋放內(nèi)存。每次打開模塊,該模塊就會重新計時。這樣就可以有效合理的分配內(nèi)存。

    ?

    ?

    ?

    1、? 由于實時對戰(zhàn)游戲的數(shù)據(jù)包數(shù)量巨大,早期版本的幀同步策略會導致比較明顯的卡頓,通過進行數(shù)據(jù)包的合并與優(yōu)化逐漸解決了卡頓問題;

    2、? 頻繁創(chuàng)建和銷毀的小兵對象讓CPU爆表了,大量的小兵如果采用實時內(nèi)存的分配和回收,會產(chǎn)生大量的內(nèi)存碎片和系統(tǒng)開銷,解決方法之一就是采用高效的對象池進行優(yōu)化,對每個內(nèi)存對象的狀態(tài)進行操作即可;

    3、? 性能分析過程中,發(fā)現(xiàn)單人同屏和多人同屏時的開銷都很大,通過視野裁剪技術,使得玩家視野外的不必要的特效和渲染可以全部關閉,極大降低了CPU、GPU和內(nèi)存的開銷;

    4、? 在高中低三檔機型上玩游戲時,分別加載不同層次的特效包,這也有助于降低CPU和內(nèi)存的開銷;性能分析過程中發(fā)現(xiàn)副本內(nèi)wwise音頻組件占了30%的CPU時間,果斷拋棄之,采用Unity自帶音頻功能,優(yōu)化很明顯;

    5、? 游戲內(nèi)界面采用了UGUI的方式實現(xiàn),但大量的實時UI變化使得副本內(nèi)每幀會有230以上的drawcall,導致中低端機型感受到明顯卡頓,最終采用UGUI+自研究UI的組合拳,重寫了一套緊密結(jié)合游戲自身特性的UI來實現(xiàn)戰(zhàn)斗血條和浮動文字的效果。

    6、? ??資源使用總量是否在合理范圍之內(nèi)。

    7、? ?一個場景內(nèi)的資源重復率。

    8、? ?資源對象拷貝的數(shù)量是否合理。

    9、? 場景切換時保留的資源詳情。

    10、?????????????網(wǎng)格、紋理、音頻、動畫、GameObject等資源是否超標。

    ?

    11、?????????????貼圖:

    12、?????????????l??控制貼圖大小,盡量不要超過?1024x1024;

    13、?????????????l??盡量使用2的n次冪大小的貼圖,否則GfxDriver里會有2份貼圖;

    14、?????????????l??盡量使用壓縮格式減小貼圖大小;

    15、?????????????l??若干種貼圖合并技術;

    16、?????????????l??去除多余的alpha通道;

    17、?????????????l??不同設備使用不同的紋理貼圖,分層顯示;

    18、??????????????

    19、?????????????模型:

    20、?????????????l??盡量控制模型的面數(shù),小于1500會比較合適;

    21、?????????????l??不同設備使用不同的模型面數(shù);

    22、?????????????l??盡量保持在30根骨骼內(nèi);

    23、?????????????l??一個網(wǎng)格不要超過3個material;

    24、?????????????動畫:

    25、?????????????l??N種動畫壓縮方法;

    26、?????????????l??盡量減少骨骼數(shù)量;

    27、?????????????聲音:

    28、?????????????l??采用壓縮MP3?和?wav;

    29、?????????????資源方面的優(yōu)化:

    30、?????????????l??使用?Resource.Load?方法在需要的時候再讀取資源;

    31、?????????????l??各種資源在使用完成后,盡快用Resource.UnloadAsset和UnloadUnusedAsset卸載掉;

    32、?????????????l??靈活運用AssetBundle的Load和Unload方法動態(tài)加載資源,避免主要場景內(nèi)的初始化內(nèi)存占用過高;(實現(xiàn)起來真的很難…)

    33、?????????????l??采用www加載了AssetBundle后,要用www.Dispose?及時釋放;

    34、?????????????l??在關卡內(nèi)謹慎使用DontDestroyOnLoad,被標注的資源會常駐內(nèi)存;

    35、?????????????代碼的優(yōu)化:

    36、?????????????l??盡量避免代碼中的任何字符串連接,因為這會給GC帶來太多垃圾;

    37、?????????????l??用簡單的“for”循環(huán)代替“foreach”循環(huán);

    38、?????????????l??為所有游戲內(nèi)的動態(tài)物體使用內(nèi)存對象池,可以減少系統(tǒng)開銷和內(nèi)存碎片,復用對象實例,構建自己的內(nèi)存管理模式,減少Instantiate和Destory;

    39、?????????????l??盡量不使用LINQ命令,因為它們一般會分配中間緩器,而這很容易生成垃圾內(nèi)存;

    40、?????????????l??將引用本地緩存到元件中會減少每次在一個游戲?qū)ο笾惺褂?“GetComponent” 獲取一個元件引用的需求;

    41、?????????????l??減少角色控制器移動命令的調(diào)用。移動角色控制器會同步發(fā)生,每次調(diào)用都會耗損較大的性能;

    42、?????????????l??最小化碰撞檢測請求(例如raycasts和sphere checks),盡量從每次檢查中獲得更多信息;

    43、?????????????l??AI邏輯通常會生成大量物理查詢,建議讓AI更新循環(huán)設置低于圖像更新循環(huán),以減少CPU負荷;

    44、?????????????l??要盡量減少Unity回調(diào)函數(shù),哪怕是空函數(shù)也不要留著;(例如空的Update、FixedUpdate函數(shù))

    45、?????????????l??盡量少使用FindObjectsOfType函數(shù),這個函數(shù)非常慢,盡量少用且一定不要在Update里調(diào)用;

    46、?????????????l??千萬一定要控制mono堆內(nèi)存的大小;

    47、??????????????

    48、?????????????unity3D 對于移動平臺的支持無可厚非,但是也有時候用Unity3D 開發(fā)出來的應用、游戲在移動終端上的運行有著明顯的效率問題,比如卡、畫質(zhì)等各種問題。自己在做游戲開發(fā)的時候偶有所得。對于主要影響性能的因素做個總結(jié)。

    49、?????????????

    50、?????????????主要因素有:

    51、?????????????????????1.??????Savedby batching 值過大???---- > 這個值主要是針對Mesh的批處理,這個值越高,應用就越卡???

    52、?????????????????????2.?????Drawcall值過大 ---- >??Drawcall 值過大,所需要的 GPU 的處理性能較高,從而導致CPU的計算時間過長,于是就卡了

    53、?????????????????????3.?????點、面過多???????????----> 點、面過多,GPU 根據(jù)不同面的效果展開計算,并且CPU計算的數(shù)據(jù)也多,所以效果出來了,但是卡巴斯基

    54、?????????????由于 Saved by batching 和 Drawcall 值過大所引起的卡的問題我所做的優(yōu)化方式有:

    55、?????????????????????1.????對于模型 :Mesh 合并,有個不錯的插件(DrawCallMinimizer???--->??直接上AssetStore 下載即可,免費的,而且有文檔,很容易上手)

    56、?????????????????????2.????對于UI??:??盡量避免使用Unity3D自帶的 GUI 換用 NGUI或者EZGUI;因為這兩個UI插件對于UI中的圖片處理是將UI圖片放置在一個 Atlas中,一個 Atlas 對應一個Drawcall

    57、?????????????????????3.???對于燈光:?可以使用 Unity3D 自帶的??Lightmapping插件來烘焙場景中的燈光效果到物體材質(zhì)上?

    58、?????????????????????4.??對于場景: 可以使用 Unity3D 自帶的 OcclusionCulling 插件把靜止不動的場景元素烘焙出來

    59、?????????????????????4.???對于特效:盡量把材質(zhì)紋理合并

    60、?????????????對于Unity3D 在移動終端上支持的Drawcall 數(shù)到底多少,主要是跟機子性能有關的,當然也不是說值小性能就一定沒問題(本人親測,也有17就卡的,主要是模型材質(zhì)紋理過大所引起的),目前我做的是70左右的,還OK,挺正常的

    61、??????????????

    62、?????????????由于點、面過多所導致的性能問題,最好用簡模,用四面體來做復雜的模型,但是面、點也別太多,至于Unity3D 到底支持多少點、面的說法各異,我也搞不懂,總之少些肯定OK

    63、??????????????

    64、??????????????

    65、??????????????

    66、?????????????檢測方式:

    67、?????????????一,Unity3D 渲染統(tǒng)計窗口

    68、?????????????Game視窗的Stats去查看渲染統(tǒng)計的信息:

    69、?????????????1、FPS

    70、?????????????fps其實就是 framesper second,也就是每一秒游戲執(zhí)行的幀數(shù),這個數(shù)值越小,說明游戲越卡。

    71、??????????????

    72、?????????????2、Draw calls

    73、?????????????batching之后渲染mesh的數(shù)量,和當前渲染到的網(wǎng)格的材質(zhì)球數(shù)量有關。

    74、??????????????

    75、?????????????3、Saved?by?batching?

    76、?????????????渲染的批處理數(shù)量,這是引擎將多個對象的繪制進行合并從而減少GPU的開銷;

    77、?????????????很多GUI插件的一個好處就是合并多個對象的渲染,從而降低DrawCalls ,保證游戲幀數(shù)。

    78、??????????????

    79、?????????????4、Tris 當前繪制的三角面數(shù)

    80、??????????????

    81、?????????????5、Verts 當前繪制的頂點數(shù)

    82、??????????????

    83、?????????????6、Used Textures 當前幀用于渲染的圖片占用內(nèi)存大小

    84、??????????????

    85、?????????????7、Render Textures 渲染的圖片占用內(nèi)存大小,也就是當然渲染的物體的材質(zhì)上的紋理總內(nèi)存占用

    86、??????????????

    87、?????????????8、VRAM usage 顯存的使用情況,VRAM總大小取決于你的顯卡的顯存

    88、??????????????

    89、?????????????9、VBO Total 渲染過程中上載到圖形卡的網(wǎng)格的數(shù)量,這里注意一點就是縮放的物體可能需要額外的開銷。

    90、??????????????

    91、?????????????10、VisibleSkinned Meshes 蒙皮網(wǎng)格的渲染數(shù)量

    92、??????????????

    93、?????????????11、Animations 播放動畫的數(shù)量

    94、?????????????注意事項:

    95、?????????????1,運行時盡量減少 Tris 和 Draw Calls

    96、?????????????預覽的時候,可點開 Stats,查看圖形渲染的開銷情況。特別注意 Tris 和 Draw Calls 這兩個參數(shù)。

    97、?????????????一般來說,要做到:

    98、?????????????Tris 保持在 7.5k 以下,有待考證。

    99、?????????????Draw Calls 保持在 20 以下,有待考證。

    100、??????????2,FPS,每一秒游戲執(zhí)行的幀數(shù),這個數(shù)值越小,說明游戲越卡。

    101、??????????3,Render Textures 渲染的圖片占用內(nèi)存大小。

    102、??????????4,VRAM usage 顯存的使用情況,VRAM總大小取決于你的顯卡的顯存。

    103、???????????

    104、??????????二,代碼優(yōu)化

    105、??????????1. 盡量避免每幀處理

    106、??????????比如:

    107、??????????function Update() {DoSomeThing(); }

    108、??????????可改為每5幀處理一次:

    109、??????????function Update() { if(Time.frameCount% 5 == 0) { DoSomeThing(); } }

    110、??????????2. 定時重復處理用InvokeRepeating 函數(shù)實現(xiàn)

    111、??????????比如,啟動0.5秒后每隔1秒執(zhí)行一次 DoSomeThing 函數(shù):

    112、???????????

    113、??????????function Start() {InvokeRepeating("DoSomeThing", 0.5, 1.0); }

    114、???????????

    115、??????????3. 優(yōu)化 Update,FixedUpdate, LateUpdate 等每幀處理的函數(shù)

    116、??????????函數(shù)里面的變量盡量在頭部聲明。

    117、??????????比如:

    118、??????????function Update() { var pos:Vector3 = transform.position; }

    119、??????????可改為

    120、??????????private var pos: Vector3;function Update(){ pos = transform.position; }

    121、???????????

    122、??????????4. 主動回收垃圾

    123、??????????給某個 GameObject 綁上以下的代碼:

    124、??????????function Update() {if(Time.frameCount % 50 == 0) { System.GC.Collect(); } }

    125、???????????

    126、??????????5. 優(yōu)化數(shù)學計算

    127、??????????比如,如果可以避免使用浮點型(float),盡量使用整形(int),盡量少用復雜的數(shù)學函數(shù)比如 Sin 和 Cos 等等

    128、???????????

    129、??????????6,減少固定增量時間

    130、??????????將固定增量時間值設定在0.04-0.067區(qū)間(即,每秒15-25幀)。您可以通過Edit->Project Settings->Time來改變這個值。這樣做降低了FixedUpdate函數(shù)被調(diào)用的頻率以及物理引擎執(zhí)行碰撞檢測與剛體更新的頻率。如果您使用了較低的固定增量時間,并且在主角身上使用了剛體部件,那么您可以啟用插值辦法來平滑剛體組件。

    131、??????????7,減少GetComponent的調(diào)用

    132、??????????使用 GetComponent或內(nèi)置組件訪問器會產(chǎn)生明顯的開銷。您可以通過一次獲取組件的引用來避免開銷,并將該引用分配給一個變量(有時稱為"緩存"的引用)。例如,如果您使用如下的代碼:

    133、??????????function Update () {

    134、??????????transform.Translate(0, 1, 0);

    135、???????????

    136、??????????}

    137、??????????通過下面的更改您將獲得更好的性能:

    138、???????????

    139、??????????var myTransform : Transform;

    140、??????????function Awake () {

    141、??????????myTransform = transform;

    142、??????????}

    143、??????????function Update () {

    144、??????????myTransform.Translate(0, 1, 0);

    145、??????????}

    146、???????????

    147、??????????8,避免分配內(nèi)存

    148、??????????您應該避免分配新對象,除非你真的需要,因為他們不再在使用時,會增加垃圾回收系統(tǒng)的開銷。您可以經(jīng)常重復使用數(shù)組和其他對象,而不是分配新的數(shù)組或?qū)ο蟆_@樣做好處則是盡量減少垃圾的回收工作。同時,在某些可能的情況下,您也可以使用結(jié)構(struct)來代替類(class)。這是因為,結(jié)構變量主要存放在棧區(qū)而非堆區(qū)。因為棧的分配較快,并且不調(diào)用垃圾回收操作,所以當結(jié)構變量比較小時可以提升程序的運行性能。但是當結(jié)構體較大時,雖然它仍可避免分配/回收的開銷,而它由于"傳值"操作也會導致單獨的開銷,實際上它可能比等效對象類的效率還要低。

    149、???????????

    150、??????????9,使用iOS腳本調(diào)用優(yōu)化功能

    151、??????????UnityEngine 命名空間中的函數(shù)的大多數(shù)是在 C/c + +中實現(xiàn)的。從Mono的腳本調(diào)用 C/C++函數(shù)也存在著一定的性能開銷。您可以使用iOS腳本調(diào)用優(yōu)化功能(菜單:Edit->Project Settings->Player)讓每幀節(jié)省1-4毫秒。此設置的選項有:

    152、??????????Slow and Safe – Mono內(nèi)部默認的處理異常的調(diào)用

    153、???????????

    154、??????????Fast and Exceptions Unsupported–一個快速執(zhí)行的Mono內(nèi)部調(diào)用。不過,它并不支持異常,因此應謹慎使用。它對于不需要顯式地處理異常(也不需要對異常進行處理)的應用程序來說,是一個理想的候選項。

    155、???????????

    156、??????????10,

    157、??????????優(yōu)化垃圾回收

    158、???????????

    159、??????????如上文所述,您應該盡量避免分配操作。但是,考慮到它們是不能完全杜絕的,所以我們提供兩種方法來讓您盡量減少它們在游戲運行時的使用:

    160、??????????如果堆比較小,則進行快速而頻繁的垃圾回收

    161、??????????這一策略比較適合運行時間較長的游戲,其中幀率是否平滑過渡是主要的考慮因素。像這樣的游戲通常會頻繁地分配小塊內(nèi)存,但這些小塊內(nèi)存只是暫時地被使用。如果在iOS系統(tǒng)上使用該策略,那么一個典型的堆大小是大約 200 KB,這樣在iPhone 3G設備上,垃圾回收操作將耗時大約 5毫秒。如果堆大小增加到1 MB時,該回收操作將耗時大約 7ms。因此,在普通幀的間隔期進行垃圾回收有時候是一個不錯的選擇。通常,這種做法會讓回收操作執(zhí)行的更加頻繁(有些回收操作并不是嚴格必須進行的),但它們可以快速處理并且對游戲的影響很小:

    162、??????????if (Time.frameCount % 30 == 0)

    163、??????????{

    164、??????????System.GC.Collect();

    165、??????????}

    166、???????????

    167、??????????但是,您應該小心地使用這種技術,并且通過檢查Profiler來確保這種操作確實可以降低您游戲的垃圾回收時間

    168、??????????如果堆比較大,則進行緩慢且不頻繁的垃圾回收

    169、??????????這一策略適合于那些內(nèi)存分配 (和回收)相對不頻繁,并且可以在游戲停頓期間進行處理的游戲。如果堆足夠大,但還沒有大到被系統(tǒng)關掉的話,這種方法是比較適用的。但是,Mono運行時會盡可能地避免堆的自動擴大。因此,您需要通過在啟動過程中預分配一些空間來手動擴展堆(ie,你實例化一個純粹影響內(nèi)存管理器分配的"無用"對象):

    170、???????????

    171、??????????function Start() {

    172、???????????

    173、??????????var tmp = newSystem.Object[1024];

    174、???????????

    175、??????????// make allocations in smallerblocks to avoid them to be treated in a special way, which is designed forlarge blocks

    176、???????????

    177、??????????for (var i : int = 0; i <1024; i++)

    178、???????????

    179、??????????tmp[i] = new byte[1024];

    180、???????????

    181、??????????// release reference

    182、???????????

    183、??????????tmp = null;

    184、???????????

    185、??????????}

    186、???????????

    187、??????????游戲中的暫停是用來對堆內(nèi)存進行回收,而一個足夠大的堆應該不會在游戲的暫停與暫停之間被完全占滿。所以,當這種游戲暫停發(fā)生時,您可以顯式請求一次垃圾回收:

    188、???????????

    189、??????????System.GC.Collect();

    190、???????????

    191、??????????另外,您應該謹慎地使用這一策略并時刻關注Profiler的統(tǒng)計結(jié)果,而不是假定它已經(jīng)達到了您想要的效果。

    192、???????????

    193、??????????三,模型

    194、??????????1,壓縮 Mesh

    195、??????????導入 3D 模型之后,在不影響顯示效果的前提下,最好打開 Mesh Compression。

    196、??????????Off, Low, Medium, High 這幾個選項,可酌情選取。

    197、??????????2,避免大量使用 Unity 自帶的 Sphere 等內(nèi)建 Mesh

    198、??????????Unity 內(nèi)建的 Mesh,多邊形的數(shù)量比較大,如果物體不要求特別圓滑,可導入其他的簡單3D模型代替。

    ?

    199、???????????

    200、??????????1不是每個主流手機都支持的技術(就是如果可以不用就不用或有備選方案)

    201、??????????屏幕特效

    202、??????????動態(tài)的pixel光照計算(如法線)

    203、??????????實時的陰影

    204、???????????

    205、??????????2優(yōu)化建議

    206、??????????2.1渲染

    207、??????????1.不使用或少使用動態(tài)光照,使用light mapping和light probes(光照探頭)

    208、??????????2.不使用法線貼圖(或者只在主角身上使用),靜態(tài)物體盡量將法線渲染到貼圖

    209、??????????3.不適用稠密的粒子,盡量使用UV動畫

    210、??????????4.不使用fog,使用漸變的面片(參考shadowgun)

    211、??????????5.不要使用alpha–test(如那些cutout shader),使用alpha-blend代替

    212、??????????6.使用盡量少的material,使用盡量少的pass和render次數(shù),如反射、陰影這些操作

    213、??????????7.如有必要,使用Per-LayerCull Distances,Camera.layerCullDistances

    214、??????????8.只使用mobile組里面的那些預置shader

    215、??????????9.使用occlusionculling

    216、??????????11.遠處的物體繪制在skybox上

    217、??????????12.使用drawcallbatching:

    218、??????????????????對于相鄰動態(tài)物體:如果使用相同的shader,將texture合并

    219、??????????????????對于靜態(tài)物體,batching要求很高,詳見Unity Manual>Advanced>Optimizing Graphics Performance>Draw Call Batching

    220、???????????

    221、??????????規(guī)格上限

    222、??????????1.??????每個模型只使用一個skinnedmesh renderer

    223、??????????2.??????每個mesh不要超過3個material

    224、??????????3.??????骨骼數(shù)量不要超過30

    225、??????????4.??????面數(shù)在1500以內(nèi)將得到好的效率

    226、??????????2.2物理

    227、??????????1.真實的物理(剛體)很消耗,不要輕易使用,盡量使用自己的代碼模仿假的物理

    228、??????????2.對于投射物不要使用真實物理的碰撞和剛體,用自己的代碼處理

    229、??????????3.不要使用meshcollider

    230、??????????4.在edit->projectsetting->time中調(diào)大FixedTimestep(真實物理的幀率)來減少cpu損耗

    231、??????????2.3腳本編寫

    232、??????????1.盡量不要動態(tài)的instantiate和destroyobject,使用object pool

    233、??????????2.盡量不要再update函數(shù)中做復雜計算,如有需要,可以隔N幀計算一次

    234、??????????3.不要動態(tài)的產(chǎn)生字符串,如Debug.Log("boo"+ "hoo"),盡量預先創(chuàng)建好這些字符串資源

    235、??????????4.cache一些東西,在update里面盡量避免search,如GameObject.FindWithTag("")、GetComponent這樣的調(diào)用,可以在start中預先存起來

    236、??????????5.盡量減少函數(shù)調(diào)用棧,用x= (x > 0 ? x : -x);代替x = Mathf.Abs(x)

    237、??????????6.下面的代碼是幾個gc“噩夢”

    238、???????????String的相加操作,會頻繁申請內(nèi)存并釋放,導致gc頻繁,使用System.Text.StringBuilder代替

    239、?????????????functionConcatExample(intArray: int[]) {

    240、?????????????????????????varline = intArray[0].ToString();

    241、???????????

    242、?????????????????????????for(i = 1; i < intArray.Length; i++) {

    243、?????????????????????????????????????????line+= ", " + intArray[i].ToString();

    244、?????????????????????????}

    245、???????????

    246、?????????????????????????returnline;

    247、??????????}

    248、??????????在函數(shù)中動態(tài)new array,最好將一個array、傳進函數(shù)里修改

    249、??????????functionRandomList(numElements: int) {

    250、????????????????????varresult = new float[numElements];

    251、???????????

    252、????????????????????for(i = 0; i < numElements; i++) {

    253、???????????????????????????????????result[i]= Random.value;

    254、????????????????????}

    255、???????????

    256、????????????????????returnresult;

    257、??????????}

    258、???????????

    259、??????????2.4 shader編寫

    260、??????????1.數(shù)據(jù)類型

    261、???????????fixed?/?lowp?-for colors, lighting information and normals,

    262、??????????half?/?mediump?-for texture UV coordinates,

    263、??????????float?/?highp?-avoid in pixel shaders, fine to use in vertex shader for position calculations.

    264、??????????2.少使用的函數(shù):pow,sin,cos等

    265、??????????2.4 GUI

    266、??????????1.不要使用內(nèi)置的onGUii函數(shù)處理gui,使用其他方案,如NGUI

    267、???????????

    268、??????????3.格式

    269、??????????1.貼圖壓縮格式:ios上盡量使用PVRTC,android上使用ETC

    ?

    ?

    270、??????????最簡單的優(yōu)化建議:

    1.PC平臺的話保持場景中顯示的頂點數(shù)少于200K~3M,移動設備的話少于10W,一切取決于你的目標GPU與CPU。
    2.如果你用U3D自帶的SHADER,在表現(xiàn)不差的情況下選擇Mobile或Unlit目錄下的。它們更高效。
    3.盡可能共用材質(zhì)。
    4.將不需要移動的物體設為Static,讓引擎可以進行其批處理。
    5.盡可能不用燈光。
    6.動態(tài)燈光更加不要了。
    7.嘗試用壓縮貼圖格式,或用16位代替32位。
    8.如果不需要別用霧效(fog)
    9.嘗試用OcclusionCulling,在房間過道多遮擋物體多的場景非常有用。若不當反而會增加負擔。
    10.用天空盒去“褪去”遠處的物體。
    11.shader中用貼圖混合的方式去代替多重通道計算。
    12.shader中注意float/half/fixed的使用。
    13.shader中不要用復雜的計算pow,sin,cos,tan,log等。
    14.shader中越少Fragment越好。
    15.注意是否有多余的動畫腳本,模型自動導入到U3D會有動畫腳本,大量的話會嚴重影響消耗CPU計算。
    16.注意碰撞體的碰撞層,不必要的碰撞檢測請舍去。


    1.為什么需要針對CPU(中央處理器)與GPU(圖形處理器)優(yōu)化?

    CPU和GPU都有各自的計算和傳輸瓶頸,不同的CPU或GPU他們的性能都不一樣,所以你的游戲需要為你目標用戶的CPU與GPU能力進行針對開發(fā)。


    2.CPU與GPU的限制

    GPU一般具有填充率(Fillrate)和內(nèi)存帶寬(Memory Bandwidth)的限制,如果你的游戲在低質(zhì)量表現(xiàn)的情況下會快很多,那么,你很可能需要限制你在GPU的填充率。

    CPU一般被所需要渲染物體的個數(shù)限制,CPU給GPU發(fā)送渲染物體命令叫做DrawCalls。一般來說DrawCalls數(shù)量是需要控制的,在能表現(xiàn)效果的前提下越少越好。通常來說,電腦平臺上DrawCalls幾千個之內(nèi),移動平臺上DrawCalls幾百個之內(nèi)。這樣就差不多了。當然以上并不是絕對的,僅作一個參考。

    往往渲染(Rendering)并不是一個問題,無論是在GPU和CPU上。很可能是你的腳本代碼效率的問題,用Profiler查看下。

    關于Profiler介紹:http://docs.unity3d.com/Documentation/Manual/Profiler.html

    需要注意的是:
    在GPU中顯示的RenderTexture.SetActive()占用率很高,是因為你同時打開了編輯窗口的原因,而不是U3D的BUG。

    3.關于頂點數(shù)量和頂點計算

    CPU和GPU對頂點的計算處理都很多。GPU中渲染的頂點數(shù)取決于GPU性能和SHADER的復雜程度,一般來說,每幀之內(nèi),在PC上幾百萬頂點內(nèi),在移動平臺上不超過10萬頂點。

    CPU中的計算主要是在蒙皮骨骼計算,布料模擬,頂點動畫,粒子模擬等。GPU則在各種頂點變換、光照、貼圖混合等。

    【個人認為,具體還是看各位的項目需求,假設你項目的是3d游戲。你游戲需要兼容低配置的硬件、流暢運行、控制硬件發(fā)熱的話,還要達到一定效果(LIGHTMAP+霧效),那么頂點數(shù)必定不能高。此時同屏2W頂點我認為是個比較合適的數(shù)目,DRAWCALL最好低于70。另,控制發(fā)熱請控制最高上限的幀率,流暢的話,幀率其實不需要太高的。】



    4.針對CPU的優(yōu)化——減少DRAW CALL 的數(shù)量

    為了渲染物體到顯示器上,CPU需要做一些工作,如區(qū)分哪個東西需要渲染、區(qū)分開物體是否受光照影響、使用哪個SHADER并且為SHADER傳參、發(fā)送繪圖命令告訴顯示驅(qū)動,然后發(fā)送命令告訴顯卡刪除等這些。

    假設你有一個上千三角面的模型卻用上千個三角型模型來代替,在GPU上花費是差不多的,但是在CPU上則是極其不一樣,消耗會大很多很多。為了讓CPU更少的工作,需要減少可見物的數(shù)目:

    a.合并相近的模型,手動在模型編輯器中合并或者使用UNITY的Draw call批處理達到相同效果(Draw call batching)。具體方法和注意事項查看以下鏈接:

    Draw call batching :http://docs.unity3d.com/Documentation/Manual/DrawCallBatching.html


    b.在項目中使用更少的材質(zhì)(material),將幾個分開的貼圖合成一個較大的圖集等方式處理。

    如果你需要通過腳本來控制單個材質(zhì)屬性,需要注意改變Renderer.material將會造成一份材質(zhì)的拷貝。因此,你應該使用Renderer.sharedMaterial來保證材質(zhì)的共享狀態(tài)。

    有一個合并模型材質(zhì)不錯的插件叫Mesh Baker,大家可以考慮試下。

    c.盡量少用一些渲染步驟,例如reflections,shadows,per-pixel light 等。

    d.Draw call batching的合并物體,會使每個物體(合并后的物體)至少有幾百個三角面。

    假設合并的兩個物體(手動合并)但不共享材質(zhì),不會有性能表現(xiàn)上的提升。多材質(zhì)的物體相當于兩個物體不用一個貼圖。所以,為了提升CPU的性能,你應該確保這些物體使用同樣的貼圖。

    另外,用燈光將會取消(break)引擎的DRAW CALL BATCH,至于為什么,查看以下:

    Forward Rendering Path Details:
    http://docs.unity3d.com/Documentation/Components/RenderTech-ForwardRendering.html

    e.使用相關剔除數(shù)量直接減少Draw Call數(shù)量,下文有相關提及。


    5.優(yōu)化幾何模型

    最基本的兩個優(yōu)化準則:
    a.不要有不必要的三角面。
    b.UV貼圖中的接縫和硬邊越少越好。

    需要注意的是,圖形硬件需要處理頂點數(shù)并跟硬件報告說的并不一樣。不是硬件說能渲染幾個點就是幾個點。模型處理應用通展示的是幾何頂點數(shù)量。例如,一個由一些不同頂點構成的模型。在顯卡中,一些集合頂點將會被分離(split)成兩個或者更多邏輯頂點用作渲染。如果有法線、UV坐標、頂點色的話,這個頂點必須會被分離。所以在游戲中處理的實際數(shù)量顯然要多很多。


    6.關于光照

    若不用光肯定是最快的。移動端優(yōu)化可以采用用光照貼圖(Lightmapping)去烘培一個靜態(tài)的貼圖,以代替每次的光照計算,在U3D中只需要非常短的時間則能生成。這個方法能大大提高效率,而且有著更好的表現(xiàn)效果(平滑過渡處理,還有附加陰影等)。

    在移動設備上和低端電腦上盡量不要在場景中用真光,用光照貼圖。這個方法大大節(jié)省了CPU和GPU的計算,CPU得到了更少的DRAWCALL,GPU則需要更少頂點處理和像素柵格化。

    Lightmapping : http://docs.unity3d.com/Documentation/Manual/Lightmapping.html


    7.對GPU的優(yōu)化——圖片壓縮和多重紋理格式

    Compressed Textures(圖片壓縮):

    http://docs.unity3d.com/Documentation/Components/class-Texture2D.html

    圖片壓縮將降低你的圖片大小(更快地加載更小的內(nèi)存跨度(footprint)),而且大大提高渲染表現(xiàn)。壓縮貼圖比起未壓縮的32位RGBA貼圖占用內(nèi)存帶寬少得多。

    之前U3D會議還聽說過一個優(yōu)化,貼圖盡量都用一個大小的格式(512 * 512 , 1024 * 1024),這樣在內(nèi)存之中能得到更好的排序,而不會有內(nèi)存之間空隙。這個是否真假沒得到過測試。

    MIPMAps(多重紋理格式):

    http://docs.unity3d.com/Documentation/Components/class-Texture2D.html

    跟網(wǎng)頁上的略縮圖原理一樣,在3D游戲中我們?yōu)橛螒虻馁N圖生成多重紋理貼圖,遠處顯示較小的物體用小的貼圖,顯示比較大的物體用精細的貼圖。這樣能更加有效的減少傳輸給GPU中的數(shù)據(jù)。


    8.LOD 、 Per-Layer Cull Distances 、 Occlusion Culling

    LOD (Level Of Detail) 是很常用的3D游戲技術了,其功能理解起來則是相當于多重紋理貼圖。在以在屏幕中顯示模型大小的比例來判斷使用高或低層次的模型來減少對GPU的傳輸數(shù)據(jù),和減少GPU所需要的頂點計算。

    攝像機分層距離剔除(Per-Layer Cull Distances):為小物體標識層次,然后根據(jù)其距離主攝像機的距離判斷是否需要顯示。

    遮擋剔除(Occlusion Culling)其實就是當某個物體在攝像機前被另外一個物體完全擋住的情況,擋住就不發(fā)送給GPU渲染,從而直接降低DRAW CALL。不過有些時候在CPU中計算其是否被擋住則會很耗計算,反而得不償失。

    以下是這幾個優(yōu)化技術的相關使用和介紹:

    Level Of Detail :
    http://docs.unity3d.com/Documentation/Manual/LevelOfDetail.html

    Per-Layer Cull Distances :
    http://docs.unity3d.com/Documentation/ScriptReference/Camera-layerCullDistances.html

    Occlusion Culling :
    http://docs.unity3d.com/Documentation/Manual/OcclusionCulling.html


    9.關于Realtime Shadows(實時陰影)

    實時陰影技術非常棒,但消耗大量計算。為GPU和CPU都帶來了昂貴的負擔,細節(jié)的話參考下面:

    http://docs.unity3d.com/Documentation/Manual/Shadows.html


    10.對GPU優(yōu)化:采用高效的shader

    a.需要注意的是有些(built-in)Shader是有mobile版本的,這些大大提高了頂點處理的性能。當然也會有一些限制。

    b.自己寫的shader請注意復雜操作符計算,類似pow,exp,log,cos,sin,tan等都是很耗時的計算,最多只用一次在每個像素點的計算。不推薦你自己寫normalize,dot,inversesqart操作符,內(nèi)置的肯定比你寫的好。

    c.需要警醒的是alpha test,這個非常耗時。

    d.浮點類型運算:精度越低的浮點計算越快。

    在CG/HLSL中--

    float :32位浮點格式,適合頂點變換運算,但比較慢。
    half:16位浮點格式,適合貼圖和UV坐標計算,是highp類型計算的兩倍。
    fixed: 10位浮點格式,適合顏色,光照,和其他。是highp格式計算的四倍。

    寫Shader優(yōu)化的小提示:
    http://docs.unity3d.com/Documentation/Components/SL-ShaderPerformance.html


    11.另外的相關優(yōu)化:

    a.對Draw Call Batching的優(yōu)化
    http://docs.unity3d.com/Documentation/Manual/DrawCallBatching.html

    b.對Rendering Statistics Window的說明和提示:
    http://docs.unity3d.com/Documentation/Manual/RenderingStatistics.html

    c.角色模型的優(yōu)化建議
    用單個蒙皮渲染、盡量少用材質(zhì)、少用骨骼節(jié)點、移動設備上角色多邊形保持在300~1500內(nèi)(當然還要看具體的需求)、PC平臺上1500~4000內(nèi)(當然還要看具體的需求)。

    http://docs.unity3d.com/Documentation/Manual/ModelingOptimizedCharacters.html

    ?

    ?

    ?

    渲染順序

    U3D的渲染是有順序的,U3D的渲染順序是由我們控制的,控制好U3D的渲染順序,你才能控制好DrawCall

    一個DrawCall,表示U3D使用這個材質(zhì)/紋理,來進行一次渲染,那么這次渲染假設有3個對象,那么當3個對象都使用這一個材質(zhì)/紋理的 時候,就會產(chǎn)生一次DrawCall,可以理解為一次將紋理輸送到屏幕上的過程,(實際上引擎大多會使用如雙緩沖,緩存這類的手段來優(yōu)化這個過程,但在這 里我們只需要這樣子認識就可以了),假設3個對象使用不同的材質(zhì)/紋理,那么無疑會產(chǎn)生3個DrawCall

    接下來我們的3個對象使用2個材質(zhì),A和B使用材質(zhì)1,C使用材質(zhì)2,這時候來看,應該是有2個DrawCall,或者3個DrawCall。 應該是2個DrawCall啊,為什么會有3個DrawCall???而且是有時候2個,有時候3個。我們按照上面的DrawCall分析流程來分析一 下:

    1.渲染A,使用材質(zhì)1?
    2.渲染B,使用材質(zhì)1?
    3.渲染C,使用材質(zhì)2

    在這種情況下是2個DrawCall,在下面這種情況下,則是3個DrawCall

    1.渲染A,使用材質(zhì)1?
    2.渲染C,使用材質(zhì)2?
    3.渲染B,使用材質(zhì)1

    因為我們沒有控制好渲染順序(或者說沒有去特意控制),所以導致了額外的DrawCall,因為A和B不是一次性渲染完的,而是被C打斷了,所以導致材質(zhì)1被分為兩次渲染

    那么是什么在控制這個渲染順序呢?首先在多個相機的情況下,U3D會根據(jù)相機的深度順序進行渲染,在每個相機中,它會根據(jù)你距離相機的距離,由遠到近進行渲染,在UI相機中,還會根據(jù)你UI對象的深度進行渲染

    那么我們要做的就是,對要渲染的對象進行一次規(guī)劃,正確地排列好它們,規(guī)則是,按照Z軸或者深度,對空間進行劃分,然后確定好每個對象的Z軸和深度,讓使用同一個材質(zhì)的東西,盡量保持在這個空間內(nèi),不要讓其他材質(zhì)的對象進入這個空間,否則就會打斷這個空間的渲染順序

    在這個基礎上,更細的規(guī)則有:

    場景中的東西,我們使用Z軸來進行空間的劃分,例如背景層,特效層1,人物層,特效層2?
    NGUI中的東西,我們統(tǒng)一使用Depth來進行空間的劃分?
    人物模型,當人物模型只是用一個材質(zhì),DrawCall只有1,但是用了2個以上的材質(zhì),DrawCall就會暴增(或許對材質(zhì)的RenderQueue 進行規(guī)劃也可以使DrawCall只有2個,但這個要拆分好才行),3D人物處于復雜3D場景中的時候,我們的空間規(guī)則難免被破壞,這只能在設計的時候盡 量去避免這種情況了?
    使用了多個材質(zhì)的特效,在動畫的過程中,往往會引起DrawCall的波動,在視覺效果可以接受的范圍內(nèi),可以將特效也進行空間劃分,假設這個特效是2D顯示,那么可以使用Z軸來劃分空間

    ?

    二、

    優(yōu)化:?

    1. 更新不透明貼圖的壓縮格式為ETC 4bit,因為android市場的手機中的GPU有多種,
    每家的GPU支持不同的壓縮格式,但他們都兼容ETC格式,

    2. 對于透明貼圖,我們只能選擇RGBA 16bit 或者RGBA 32bit。

    3. 減少FPS,在ProjectSetting-> Quality中的
    VSync Count 參數(shù)會影響你的FPS,EveryVBlank相當于FPS=60,EverySecondVBlank = 30;
    這兩種情況都不符合游戲的FPS的話,我們需要手動調(diào)整FPS,首先關閉垂直同步這個功能,然后在代碼的Awake方法里手動設置FPS(Application.targetFrameRate = 45;)
    降低FPS的好處:
    1)省電,減少手機發(fā)熱的情況;
    2)能都穩(wěn)定游戲FPS,減少出現(xiàn)卡頓的情況。

    4. 當我們設置了FPS后,再調(diào)整下Fixed timestep這個參數(shù),
    這個參數(shù)在ProjectSetting->Time中,目的是減少物理計算的次數(shù),來提高游戲性能。

    5. 盡量少使用Update LateUpdate FixedUpdate,這樣也可以提升性能和節(jié)省電量。
    多使用事件(不是SendMessage,使用自己寫的,或者C#中的事件委托)。

    6. 待機時,調(diào)整游戲的FPS為1,節(jié)省電量。

    7. 圖集大小最好不要高于1024,否則游戲安裝之后、低端機直接崩潰、原因是手機系統(tǒng)版本低于2.2、超過1000的圖集無法讀取、導致。
    2.2 以上沒有遇見這個情況。
    注意手機的RAM 與 ROM、小于 512M的手機、直接放棄機型適配。

    VSCount 垂直同步
    ? ?中新建一個場景空的時候,幀速率(FPS總是很低),大概在60~70之間。
    一直不太明白是怎么回事,現(xiàn)在基本上明白了。我在這里解釋一下原因,如有錯誤,歡迎指正。
    在Unity3D中當運行場景打開Profiler的時候,我們會看到VSync 這一項占了很大的比重。
    這個是什么呢,這個就是垂直同步,稍后再做解釋。
    我們可以關閉VSync來提高幀速率,選擇edit->project settings->Quality。

    <ignore_js_op>

    ?


    在右側(cè)面板中可以找到VSync Count,把它選成Don't Sync。
    <ignore_js_op>?
    這就關閉了VSync(垂直同步),現(xiàn)在在運行場景看看,幀速率是不是提高很多。

    現(xiàn)在來說說什么是垂直同步,要知道什么是垂直同步,必須要先明白顯示器的工作原理,
    顯示器上的所有圖像都是一線一線的掃描上去的,無論是隔行掃描還是逐行掃描,
    顯示器都有兩種同步參數(shù)——水平同步和垂直同步。

    什么叫水平同步?什么叫垂直同步?
    垂直和水平是CRT中兩個基本的同步信號,水平同步信號決定了CRT畫出一條橫越屏幕線的時間,
    垂直同步信號決定了CRT從屏幕頂部畫到底部,再返回原始位置的時間,
    而恰恰是垂直同步代表著CRT顯示器的刷新率水平。

    為什么關閉垂直同步信號會影響游戲中的FPS數(shù)值?
    如果我們選擇等待垂直同步信號(也就是我們平時所說的垂直同步打開),
    那么在游戲中或許強勁的顯卡迅速的繪制完一屏的圖像,但是沒有垂直同步信號的到達,
    顯卡無法繪制下一屏,只有等85單位的信號到達,才可以繪制。
    這樣FPS自然要受到操作系統(tǒng)刷新率運行值的制約。

    而如果我們選擇不等待垂直同步信號(也就是我們平時所說的關閉垂直同步),那么游戲中作完一屏畫面,
    顯卡和顯示器無需等待垂直同步信號就可以開始下一屏圖像的繪制,自然可以完全發(fā)揮顯卡的實力。
    但是不要忘記,正是因為垂直同步的存在,才能使得游戲進程和顯示器刷新率同步,使得畫面更加平滑和穩(wěn)定。
    取消了垂直同步信號,固然可以換來更快的速度,但是在圖像的連續(xù)性上勢必打折扣。
    這也正是很多朋友抱怨關閉垂直后發(fā)現(xiàn)畫面不連續(xù)的理論原因。

    合并材質(zhì)球unity 3d中每倒入一次模型就多一個材質(zhì)球,可我的這些模型都是共用一張貼圖的就想共用一個材質(zhì)球,所以每次都要刪除再附上,很麻煩。怎么才能合并這些材質(zhì)球?
    采用TexturePacking吧
    1、遍歷gameobject,取出material,并根據(jù)shader來將material分類
    2、調(diào)用Unity自帶的PackTextures函數(shù)來合并每個shader分類中的material所對應的textures(PackTextures函數(shù)有缺陷,不過可以將就用)
    3、根據(jù)合并的大的texture來更新原有模型的texture、material已經(jīng)uv坐標值。

    需要注意的是:需要合并的紋理應該是物體在場景中距離相近的,如果物體在場景中的距離較遠,
    則不建議合并紋理,因為這樣做很有可能非但起不到優(yōu)化的作用,反而降低了運行效率。?

    mesh合并?
    分為2種方式合并
    1.自帶的合并必須勾選靜態(tài)。
    <ignore_js_op>?
    所有被勾選了“Static”的GameObject,其中的Mesh Filter中的mesh都會被合并到 "Combined Mesha (root: scene)" 中


    2.也可以用腳本來合并mesh?。

    [C#]?純文本查看?復制代碼

    ?

    01

    02

    03

    04

    05

    06

    07

    08

    09

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    using?UnityEngine;

    using?System.Collections;

    ?

    public?class?MyClass : MonoBehaviour

    {

    ????void?Start ()

    ????{

    ????????MeshFilter [] meshFilters = GetComponentsInChildren<MeshFilter> ();

    ????????CombineInstance[] combine = new?CombineInstance[meshFilters.Length];

    ?

    ????????for?(int?i = 0; i < meshFilters.Length; i++) {

    ????????????combine [i].mesh = meshFilters [i].sharedMesh;

    ????????????combine [i].transform = meshFilters [i].transform.localToWorldMatrix;

    ????????????meshFilters [i].gameObject.active = false;

    ????????}

    ?

    ????????????transform.GetComponent<MeshFilter> ().mesh = new?Mesh ();

    ????????????transform.GetComponent<MeshFilter> ().mesh.CombineMeshes (combine);

    ????????????transform.gameObject.active = true;

    ????}

    }


    1.?先在 Unity 中建立 空物件 ( Empty )?
    2.?再創(chuàng)建2個 Cube 方塊,并放入 空物件底下 (可以改成你自己的模型)
    3.?把 MyClass 代碼丟進 空物件上 。
    4.?(可選) 建立一個 Material 材質(zhì),并且丟進 空物件上
    5.?執(zhí)行

    <ignore_js_op>?


    <ignore_js_op>?
    ========================================分割線====================================

    • 角色Material數(shù)量
    2-3個
    • 骨骼數(shù)量
    小于30個
    • 面片數(shù)量
    300-1500
    • 一般角色應該沒有IK結(jié)點
    這是因為角色的動作大多數(shù)都是事先設定好的,并不需要經(jīng)過IK操作來進行實時計算(Rogdoll除外),所以在模型導入時,不要將IK結(jié)點一起導入。

    ?

    2、靜態(tài)實體

    • 不要附加 Component
    在靜態(tài)實體上附加Animation部件雖然對結(jié)果沒有影響,但卻會增加一定的CPU開銷來調(diào)用這一組件,所以盡量去掉該組件。
    • 網(wǎng)格頂點數(shù)
    小于500
    • UV值范圍盡量不要超過(0, 1)區(qū)間
    盡量保證UV值不越界,這對于將來的紋理拼合優(yōu)化很有幫助。

    ?

    3、地形

    • 地形的分辨率大小
    長寬均盡量小于257。這是因為地形太大,會造成大量頂點數(shù)據(jù),給你的內(nèi)存帶寬造成一定的影響,在目前的ios設備中,內(nèi)存帶寬是非常有限的,需要盡量節(jié)省。同時,如果用Unity自帶的地形,一定也要使用Occlusion Culling,因為Unity的刷地形工具雖然方便,但卻是framekiller,刷過之后,你會發(fā)現(xiàn)drawcall增加的非常多。
    • 混合紋理數(shù)量
    不要超過4。地形的混合操作是很耗時的,應該盡量避免。能合并的紋理盡量合并。

    ?

    4、紋理

    • 紋理格式
    建議png或tga。不用轉(zhuǎn)成ios硬件支持的PVRTC格式,因為Unity在發(fā)布時會幫你自動轉(zhuǎn)的。
    • 紋理尺寸
    長寬小于1024。同時應該盡可能地小,夠用就好,以保證紋理對內(nèi)存帶寬的影響達到最小。
    • 支持Mipmap
    建議生成Mipmap。雖然這種做法會增加一些應用程序的大小,但在游戲運行時,系統(tǒng)會根據(jù)需求應用Mipmap來渲染,從而減少內(nèi)存帶寬。
    • 檢查Alpha值
    如果紋理的alpha通道均為1,則用RGB的24位紋理來代替RGBA的32位紋理。(據(jù)說Unity內(nèi)部會進行自動檢測)

    ?

    5、光源

    • 光源“Important”個數(shù)
    建議1個,一般為方向光。“Important”個數(shù)應該越小越少。個數(shù)越多,drawcall越多。
    • Pixel Light數(shù)目
    1-2個。

    ?

    6、粒子特效

    • 屏幕上的最大粒子數(shù)
    建議小于200個粒子。
    • 每個粒子發(fā)射器發(fā)射的最大粒子數(shù)
    建議不超過50個。
    • 粒子大小
    如果可以的話,粒子的size應該盡可能地小。因為Unity的粒子系統(tǒng)的shader無論是alpha test還是alpha blending都是一筆不小的開銷。同時,對于非常小的粒子,建議粒子紋理去掉alpha通道。
    • 盡量不要開啟粒子的碰撞功能。
    非常耗時。

    ?

    7、音頻

    • 游戲中播放時間較長的音樂(如背景音樂)
    使用.ogg或.mp3的壓縮格式。
    • 較短音樂(如槍聲)
    使用.wav和.aif的未壓縮音頻格式。

    ?

    8、相機

    • 裁剪平面
    將遠平面設置成合適的距離。遠平面過大會將一些不必要的物體加入渲染,降低效率。
    • 根據(jù)不同的物體設置不同的遠裁剪平面
    Unity提供了可以根據(jù)不同的layer來設置不同的view distance,所以我們可以實現(xiàn)將物體進行分層,大物體層設置的可視距離大些,而小物體層可以設置地小些,另外,一些開銷比較大的實體(如粒子系統(tǒng))可以設置得更小些等等。

    ?

    9、碰撞

    • 盡量不用MeshCollider
    如果可以的話,盡量不用MeshCollider,以節(jié)省不必要的開銷。如果不能避免的話,盡量用減少Mesh的面片數(shù),或用較少面片的代理體來代替。

    ?

    10、其他

    • Drawcall
    盡可能地減少Drawcall的數(shù)量。IOS設備上建議不超過100。減少的方法主要有如下幾種:Frustum Culling,Occlusion Culling,Texture Packing。Frustum Culling是Unity內(nèi)建的,我們需要做的就是尋求一個合適的遠裁剪平面;Occlusion Culling,遮擋剔除,Unity內(nèi)嵌了Umbra,一個非常好OC庫。但Occlusion Culling也并不是放之四海而皆準的,有時候進行OC反而比不進行還要慢,建議在OC之前先確定自己的場景是否適合利用OC來優(yōu)化;Texture Packing,或者叫Texture Atlasing,是將同種shader的紋理進行拼合,根據(jù)Unity的static batching的特性來減少draw call。建議使用,但也有弊端,那就是一定要將場景中距離相近的實體紋理進行拼合,否則,拼合后很可能會增加每幀渲染所需的紋理大小,加大內(nèi)存帶寬的負擔。這也就是為什么會出現(xiàn)“DrawCall降了,渲染速度也變慢了”的原因。

    ?

    • 非運動物體盡量打上Static標簽
    Unity在運行時會對static物體進行自動優(yōu)化處理,所以應該盡可能將非運行實體勾上static標簽。

    ?

    • 場景中盡可能地使用prefab
    盡可能地使用prefab的實例化物體,以降低內(nèi)存帶寬的負擔。檢查實體的PrefabType,盡量將其變成PrefabInstance,而不是ModelPrefabInstance。



    ========================================分割線====================================?
    ?

    移動平臺相對于PC機,具有體積小,計算弱,帶寬少的特點。

    因此做手機游戲的開發(fā),優(yōu)化的方向,與力度對比PC游戲都有所區(qū)別。

    ?

    必須要做到優(yōu)化流程,合理利用資源。

    目前在手機上面,還不能夠像PC游戲那樣追求高質(zhì)量渲染效果,為了讓手機不那么容易發(fā)燙,還要控制cpu,gpu,不能讓他們?nèi)龠\算。

    ?

    材質(zhì)方面:

    紋理方面,建議使用壓縮紋理,

    上面使用ETC1,蘋果上面使用PVRTC。

    ?

    UV坐標控制在0到1之間,人物模型面數(shù)控制在1500內(nèi),骨骼控制在30個以內(nèi)。

    場景中使用一個主光(不能再多了)。

    ?

    盡量減少alphaTest和alphaBlend材質(zhì)的使用。在手機上,這是很殺效率的。

    ?

    骨骼動畫方面:

    在動畫方面可以考慮不使用插值,固定的幀率的動畫。

    如果要做插值,考慮使用四元數(shù)(表示旋轉(zhuǎn))和向量(表示位移)來做插值。

    四元數(shù)做插值速度比矩陣來的快,Slerp提供了平滑插值。



    ========================================分割線====================================?

    優(yōu)化的常規(guī)技巧
    剖析你的游戲。
    不要花費時間來優(yōu)化那些晦澀的代碼或者縮減圖形文件的大小,除非這是你游戲的瓶頸。
    第一次剖析你的游戲?qū)鼓惆l(fā)現(xiàn)你游戲的瓶頸。Apple's Shark是一個很好的用來剖析基于OpenGL的程序的工具。
    再次剖析你的游戲。
    優(yōu)化之后不要忘記再剖析一次你的游戲,這樣可以檢查你所做的優(yōu)化是否達到了預期的效果。
    當然,這樣做也可能會使你發(fā)現(xiàn)更多的瓶頸。
    流程第一、性能第二。花費時間來使你游戲的創(chuàng)建盡可能地流暢。
    盡可能快地修正游戲中的錯誤將會使你后期更容易優(yōu)化你的游戲。
    在Scene View中測試場景。
    這樣做將會使你清楚了解這個場景中的物體或者附加在物體上的腳本是否降低了游戲性能。
    如果Scene View反應遲鈍,那么有可能是圖形方面的原因,如果Scene View反應不遲鈍,那么瓶頸可能出在腳本或者物理系統(tǒng)上。
    禁用指定游戲物體。
    在play模式下,嘗試禁用并啟用游戲物體來排查出游戲慢的原因。

    網(wǎng)格
    如果可能的話,把相鄰的物體(網(wǎng)格)合并為一個只有一個材質(zhì)的物體(網(wǎng)格)。比如,你的游戲中包含一個桌子,上面有一堆東西,你完全可以在3D程序中將它們合并在一起(這可能也需要你將這些物體的紋理合并為一個大的紋理集)。減少需要渲染的物體的數(shù)量可以極大地提高游戲性能。

    不要有不必要的網(wǎng)格。
    如果你的游戲場景中有一個人物,那么他應該是一個網(wǎng)格。如果你有一個船,那么它也應該只是一個網(wǎng)格。
    每一個網(wǎng)格只用一種材質(zhì)。
    使用極少的面數(shù)的網(wǎng)格(比如500個多邊形以下)。
    最好把你人物的三角面數(shù)量控制在1500-2000個之間。
    這個數(shù)量可以說是游戲質(zhì)量和性能之間一個均衡值。如果你的模型有四邊形,那么在導入模型的時候,引擎將會把每個四邊形變?yōu)閮蓚€三角形。

    光照
    像素光。
    像素光可以讓你的游戲看起來效果很牛逼,但是不要使用過多的像素光。
    在你的游戲中可以使用質(zhì)量管理器來調(diào)節(jié)像素光的數(shù)量來取得一個性能和質(zhì)量的均衡點.

    性能占用順序:聚光燈>點光源>平行光。
    一個好的點亮場景的方法就是先得到你想要的效果,然后看看哪些光更重要;
    在保持光效的前提下看看哪些光可以去掉。

    點光源和聚光燈只影響它們范圍內(nèi)的網(wǎng)格。
    如果一個網(wǎng)格處于點光源或者聚光燈的照射范圍之外,并且光源的attenuate開關是打開的,那么這個網(wǎng)格將不會被光源所影響,這樣就可以節(jié)省性能開銷。
    這樣做理論上來講可以使用很多小的點光源而且依然能有一個好的性能,因為這些光源只影響一小部分物體。
    一個網(wǎng)格在有8個以上光源影響的時候,只響應前8個最亮的光源。

    貼圖
    在外觀不變的前提下,貼圖大小越小越好。
    如果你的顯卡的顯存不夠大的話,你游戲中的貼圖將會被轉(zhuǎn)存到系統(tǒng)內(nèi)存中,在顯卡調(diào)用它們的時候再傳到顯卡中。
    對于比較新的電腦來說,內(nèi)存和顯卡之間有足夠的帶寬來達到一個很好的性能;
    如果你很無恥地用了巨多的大圖片的話,在低顯存的電腦上運行你的游戲的時候,你的游戲必然會掛掉。
    倒是沒有必要在圖形編輯軟件中調(diào)整貼圖的大小。你可以在unity導入貼圖的時候進行調(diào)整。

    不要使用低質(zhì)量的圖片。
    在小播放界面的游戲中使用低質(zhì)量的jpeg圖片或者低色彩的png圖片亦或是gif圖片沒什么問題。
    在發(fā)布游戲的時候,引擎會自動壓縮這些圖片,多重壓縮和解壓將會降低圖片的質(zhì)量,所以最好保持貼圖文件的分辨率為原始分辨率。
    這樣就會減少多重壓縮和解壓所導致的圖片失真現(xiàn)象。

    Shaders
    多重效果的shader就比看起來樣式很單一的shader要更耗費資源。
    同樣在一個擁有貼圖和光反射的物體上,使用VertexLit Diffuse shader無疑是最省資源的。


    ========================================分割線====================================?

    在美術制作場景的過程中,會使用到大量的粒子系統(tǒng)。
    比如場景中的火把。在我們的一個地下城場景中,美術們放置了大量的火把。整個場景中的各個地方,有100來個火把。

    unity中,在攝像機范圍外的粒子系統(tǒng)雖然不會被繪制。
    但是update是一直持續(xù)的。這也就意味著,這100多個火把,不論是否可見都在更新。

    這個設計應該是很不合理的,在我看過的其他引擎中,都會有一個開關,來控制不可見的粒子系統(tǒng)是否需要update。
    有的粒子系統(tǒng)在不可見的時候需要更新,比如爆炸。有的不需要更新,比如火堆火把。

    為了避免不必要的update開銷,尤其是最后游戲是要發(fā)布到頁游平臺(web player只能使用一個cpu的核)。
    于是寫了一個腳本,控制不可見的粒子系統(tǒng)就不更新。

    該腳本主要是用到了2個MonoBehaviour的函數(shù)。
    OnBecameInvisible()?當變?yōu)椴豢梢? ?和? ?OnBecameVisible()?當變成可見。?

    要這2個函數(shù)起作用的前提是,該GameObject綁定了MeshRender組件。
    所以,我們要在粒子系統(tǒng)的GameObject放置在一個GameObject??下,且給該GameObject綁定一個MeshRender 與 MeshFilter。
    MeshFilter中的mesh可以隨便找個cube。

    在Start() 的時候,把最GameObject的scale設置為很小,以保證該cube不被看見。
    其實遍歷所有的child,把active設置為false。

    在OnBecameVisible 中 遍歷所有child,把active設置為true。
    在OnBecameInvisible中 遍歷所有child,把active設置為false。


    ========================================分割線====================================?

    Unity 性能優(yōu)化 Draw Call?

    Unity(或者說基本所有圖形引擎)生成一幀畫面的處理過程大致可以這樣簡化描述:引擎首先經(jīng)過簡單的可見性測試,確定攝像機可以看到的物體,然后把這些物體的頂點(包括本地位置、法線、UV等),索引(頂點如何組成三角形),變換(就是物體的位置、旋轉(zhuǎn)、縮放、以及攝像機位置等),相關光源,紋理,渲染方式(由材質(zhì)/Shader決定)等數(shù)據(jù)準備好,然后通知圖形API——或者就簡單地看作是通知GPU——開始繪制,GPU基于這些數(shù)據(jù),經(jīng)過一系列運算,在屏幕上畫出成千上萬的三角形,最終構成一幅圖像。

    在Unity中,每次引擎準備數(shù)據(jù)并通知GPU的過程稱為一次Draw Call。這一過程是逐個物體進行的,對于每個物體,不只GPU的渲染,引擎重新設置材質(zhì)/Shader也是一項非常耗時的操作。因此每幀的Draw Call次數(shù)是一項非常重要的性能指標,對于iOS來說應盡量控制在20次以內(nèi),這個值可以在編輯器的Statistic窗口看到。

    Unity內(nèi)置了Draw Call Batching技術,從名字就可以看出,它的主要目標就是在一次Draw Call中批量處理多個物體。只要物體的變換和材質(zhì)相同,GPU就可以按完全相同的方式進行處理,即可以把它們放在一個Draw Call中。Draw Call Batching技術的核心就是在可見性測試之后,檢查所有要繪制的物體的材質(zhì),把相同材質(zhì)的分為一組(一個Batch),然后把它們組合成一個物體(統(tǒng)一變換),這樣就可以在一個Draw Call中處理多個物體了(實際上是組合后的一個物體)。

    但Draw Call Batching存在一個缺陷,就是它需要把一個Batch中的所有物體組合到一起,相當于創(chuàng)建了一個與這些物體加起來一樣大的物體,與此同時就需要分配相應大小的內(nèi)存。這不僅會消耗更多內(nèi)存,還需要消耗CPU時間。特別是對于移動的物體,每一幀都得重新進行組合,這就需要進行一些權衡,否則得不償失。但對于靜止不動的物體來說,只需要進行一次組合,之后就可以一直使用,效率要高得多。

    Unity提供了Dynamic Batching和Static Batching兩種方式。Dynamic Batching是完全自動進行的,不需要也無法進行任何干預,對于頂點數(shù)在300以內(nèi)的可移動物體,只要使用相同的材質(zhì),就會組成Batch。Static Batching則需要把靜止的物體標記為Static,然后無論大小,都會組成Batch。如前文所說,Static Batching顯然比Dynamic Batching要高效得多,于是,Static Batching功能是收費的……

    要有效利用Draw Call Batching,首先是盡量減少場景中使用的材質(zhì)數(shù)量,即盡量共享材質(zhì),對于僅紋理不同的材質(zhì)可以把紋理組合到一張更大的紋理中(稱為Texture Atlasing)。然后是把不會移動的物體標記為Static。此外還可以通過CombineChildren腳本(Standard Assets/Scripts/Unity Scripts/CombineChildren)手動把物體組合在一起,但這個腳本會影響可見性測試,因為組合在一起的物體始終會被看作一個物體,從而會增加GPU要處理的幾何體數(shù)量,因此要小心使用。

    對于復雜的靜態(tài)場景,還可以考慮自行設計遮擋剔除算法,減少可見的物體數(shù)量同時也可以減少Draw Call。

    總之,理解Draw Call和Draw Call Batching原理,根據(jù)場景特點設計相應的方案來盡量減少Draw Call次數(shù)才是王道,其它方面亦然。



    Draw Call Batching (繪制調(diào)用批處理)

    To draw an object on the screen, the engine has to issue a draw call to the graphics API (OpenGL ES in the case of iOS). Every single draw call requires a significant amount of work on the part of the graphics API, causing significant performance overhead on the CPU side.
    在屏幕上渲染物體,引擎需要發(fā)出一個繪制調(diào)用來訪問圖形API(iOS系統(tǒng)中為OpenGL ES)。
    每個繪制調(diào)用需要進行大量的工作來訪問圖形API,從而導致了CPU方面顯著的性能開銷。

    Unity combines a number of objects at runtime and draws them together with a single draw call. This operation is called "batching". The more objects Unity can batch together, the better rendering performance you will get.
    Unity在運行時可以將一些物體進行合并,從而用一個繪制調(diào)用來渲染他們。這一操作,我們稱之為“批處理”。
    一般來說,Unity批處理的物體越多,你就會得到越好的渲染性能。

    Built-in batching support in Unity has significant benefit over simply combining geometry in the modeling tool (or using theCombineChildren script from the Standard Assets package). Batching in Unity happensafter visibility determination step. The engine does culling on each object individually, and the amount of rendered geometry is going to be the same as without batching. Combining geometry in the modeling tool, on the other hand, prevents effecient culling and results in much higher amount of geometry being rendered.
    Unity中內(nèi)建的批處理機制所達到的效果要明顯強于使用幾何建模工具(或使用Standard Assets包中的CombineChildren腳本)的批處理效果。
    這是因為,Unity引擎的批處理操作是在物體的可視裁剪操作之后進行的。
    Unity先對每個物體進行裁剪,然后再進行批處理,這樣可以使渲染的幾何總量在批處理前后保持不變。
    但是,使用幾何建模工具來拼合物體,會妨礙引擎對其進行有效的裁剪操作,從而導致引擎需要渲染更多的幾何面片。

    Materials
    材質(zhì)
    Only objects sharing the same material can be batched together. Therefore, if you want to achieve good batching, you need to share as many materials among different objects as possible.
    只有擁有相同材質(zhì)的物體才可以進行批處理。
    因此,如果你想要得到良好的批處理效果,你需要在程序中盡可能地復用材質(zhì)和物體。

    If you have two identical materials which differ only in textures, you can combine those textures into a single big texture - a process often calledtexture atlasing. Once textures are in the same atlas, you can use single material instead.
    如果你的兩個材質(zhì)僅僅是紋理不同,那么你可以通過 紋理拼合 操作來將這兩張紋理拼合成一張大的紋理。
    一旦紋理拼合在一起,你就可以使用這個單一材質(zhì)來替代之前的兩個材質(zhì)了。

    If you need to access shared material properties from the scripts, then it is important to note that modifyingRenderer.material will create a copy of the material. Instead, you should useRenderer.sharedMaterial to keep material shared.
    如果你需要通過腳本來訪問復用材質(zhì)屬性,那么值得注意的是改變Renderer.material將會造成一份材質(zhì)的拷貝。
    因此,你應該使用Renderer.sharedMaterial來保證材質(zhì)的共享狀態(tài)。

    Dynamic Batching
    動態(tài)批處理
    Unity can automatically batch moving objects into the same draw call if they share the same material.
    如果動態(tài)物體共用著相同的材質(zhì),那么Unity會自動對這些物體進行批處理。

    Dynamic batching is done automatically and does not require any additional effort on your side.
    動態(tài)批處理操作是自動完成的,并不需要你進行額外的操作。

    Tips:
    提醒:
    1、? ?? ?Batching dynamic objects has certain overheadper vertex, so batching is applied only to meshes containing less than900 vertex attributes in total.
    ? ?? ?? ?? ? 批處理動態(tài)物體需要在每個頂點上進行一定的開銷,所以動態(tài)批處理僅支持小于900頂點的網(wǎng)格物體。

    2、? ?? ?If your shader is using Vertex Position, Normal and single UV, then you can batch up to 300 verts and if your shader is using Vertex Position, Normal, UV0, UV1 and
    ? ?? ?? ?? ?Tangent, then only 180 verts.
    ? ?? ?? ?? ?Please note: attribute count limit might be changed in future
    ? ?? ?? ?? ?如果你的著色器使用頂點位置,法線和UV值三種屬性,那么你只能批處理300頂點以下的物體;
    如果你的著色器需要使用頂點位置,法線,UV0,UV1和切向量,那你只
    ? ?? ?? ?? ?能批處理180頂點以下的物體。
    ? ?? ?? ?? ?請注意:屬性數(shù)量的限制可能會在將來進行改變。

    4、? ?? ?Don't use scale. Objects with scale (1,1,1) and (2,2,2) won't batch.
    ? ?? ?? ?? ?不要使用縮放尺度(scale)。分別擁有縮放尺度(1,1,1)和(2,2,2)的兩個物體將不會進行批處理。

    5、? ?? ?Uniformly scaled objects won't be batched with non-uniformly scaled ones.
    ? ?? ?? ?? ?統(tǒng)一縮放尺度的物體不會與非統(tǒng)一縮放尺度的物體進行批處理。
    ? ?? ?? ???Objects with scale (1,1,1) and (1,2,1) won't be batched. On the other hand (1,2,1) and (1,3,1) will be.
    ? ?? ?? ???使用縮放尺度(1,1,1)和 (1,2,1)的兩個物體將不會進行批處理,但是使用縮放尺度(1,2,1)和(1,3,1)的兩個物體將可以進行批處理。

    6、? ???Using different material instances will cause batching to fail.
    ? ?? ?? ???使用不同材質(zhì)的實例化物體(instance)將會導致批處理失敗。

    7、? ???Objects with lightmaps have additional (hidden) material parameter: offset/scale in lightmap, so lightmapped objects won't be batched (unless they point to same
    ? ?? ?? ???portions of lightmap)
    ? ?? ?? ???擁有l(wèi)ightmap的物體含有額外(隱藏)的材質(zhì)屬性,比如:lightmap的偏移和縮放系數(shù)等。所以,擁有l(wèi)ightmap的物體將不會進行批處理(除非他們指向lightmap的同一
    ? ?? ?? ???部分)。

    8、? ???Multi-pass shaders will break batching. E.g. Almost all unity shaders supports several lights in forward rendering, effectively doing additional pass for them
    ? ?? ?? ???多通道的shader會妨礙批處理操作。比如,幾乎unity中所有的著色器在前向渲染中都支持多個光源,并為它們有效地開辟多個通道。

    9、? ???Using instances of a prefab automatically are using the same mesh and material.
    ? ?? ?? ???預設體的實例會自動地使用相同的網(wǎng)格模型和材質(zhì)。

    Static Batching
    靜態(tài)批處理

    Static batching, on the other hand, allows the engine to reduce draw calls for geometry of any size (provided it does not move and shares the same material). Static batching is significantly more efficient than dynamic batching. You should choose static batching as it will require less CPU power.
    相對而言,靜態(tài)批處理操作允許引擎對任意大小的幾何物體進行批處理操作來降低繪制調(diào)用(只要這些物體不移動,并且擁有相同的材質(zhì))。因此,靜態(tài)批處理比動態(tài)批處理更加有效,你應該盡量低使用它,因為它需要更少的CPU開銷。

    In order to take advantage of static batching, you need explicitly specify that certain objects are static and willnot move, rotate or scale in the game. To do so, you can mark objects as static using the Static checkbox in the Inspector:
    為了更好地使用靜態(tài)批處理,你需要明確指出哪些物體是靜止的,并且在游戲中永遠不會移動、旋轉(zhuǎn)和縮放。想完成這一步,你只需要在檢測器(Inspector)中將Static復選框打勾即可,如下圖所示:


    Using static batching will require additional memory for storing the combined geometry. If several objects shared the same geometry before static batching, then a copy of geometry will be created for each object, either in the Editor or at runtime. This might not always be a good idea - sometimes you will have to sacrifice rendering performance by avoiding static batching for some objects to keep a smaller memory footprint. For example, marking trees as static in a dense forest level can have serious memory impact.
    使用靜態(tài)批處理操作需要額外的內(nèi)存開銷來儲存合并后的幾何數(shù)據(jù)。在靜態(tài)批處理之前,如果一些物體共用了同樣的幾何數(shù)據(jù),那么引擎會在編輯以及運行狀態(tài)對每個物體創(chuàng)建一個幾何數(shù)據(jù)的備份。這并不總是一個好的想法,因為有時候,你將不得不犧牲一點渲染性能來防止一些物體的靜態(tài)批處理,從而保持較少的內(nèi)存開銷。比如,將濃密森里中樹設為Static,會導致嚴重的內(nèi)存開銷。

    Static batching is only available in Unity iOS Advanced.
    靜態(tài)批處理目前只支持Unity iOS Advanced。



    備注:最近一直在研究Unity3D的性能優(yōu)化問題,這段時間可能會多翻譯這方面的文章。

    前兩天,MadFinger,就是當今iOS與Android上畫質(zhì)最牛逼閃閃的游戲之一——ShadowGun的開發(fā)商,令人驚異地放出了一個ShadowGun的樣例關卡以及若干可免費使用的Shader,國外同行們的分享精神真的是令人贊嘆不已。原文在這里,以下是我的一些摘錄和筆記。

    首先是一些優(yōu)化常識。針對圖形方面的優(yōu)化主要包括三角形數(shù)量,紋理所占內(nèi)存,以及Shader,前兩項基本沒什么好講的,針對設備機能的限制制定相應的指標即可,所以Shader就成為了圖形性能優(yōu)化的關鍵。

    Alpha blending

    在Unity官方文檔中講,由于硬件原因,在iOS設備上使用alpha-test會造成很大的性能開銷,應盡量使用alpha-blend代替。這里提到,在同屏使用alpha-blend的面數(shù),尤其是這些面所占屏幕面積的大小,對性能也會造成很大影響。原因是使用alpha-blend的面會造成overdraw的增加,這尤其對低性能設備的影響很大。不過沒有購買Pro版,沒有Occlusion Culling功能的話,就不必顧慮這一問題了,反正overdraw是必然的。

    復雜的Per-pixel shader

    Per-pixel shader即Fragment shader,顧名思義是要對每個渲染到屏幕上的像素做處理的shader,如果per-pixel shader比較復雜且需要處理的像素很多時,也就是使用該shader的面占屏幕面積很大時,對性能的影響甚至要超過alpha blending。因此復雜的per-pixel shader只適用于小物體。

    下面是對幾個Shader的逐一講解:

    Environment specular maps(Shader Virtual Gloss Per Vertex Additive)
    Specular map通常都是利用貼圖的alpha通道來定義物體表面的光滑程度(反光度),這個shader的特點是per-vertex計算反光度的,有著相當不錯的效果的同時比per-pixel的shader性能要高得多。這個shader很適用于關卡環(huán)境等占很大區(qū)域的模型。

    經(jīng)過優(yōu)化的動態(tài)角色光照和陰影(Light probes和BRDF Shader)
    傳統(tǒng)的Lightmaps無法支持動態(tài)物體,對此Unity提供了Light probes技術,預先把動態(tài)物體的光照信息保存在代理對象(即Light probes)中,運行時動態(tài)物體從距離最近的Probe中獲取光照信息。

    Unity本身還提供了一個效果非常棒的專為移動設備優(yōu)化過的角色Shader,支持Diffuse、Specular和Normal maps,并通過一個特殊的腳本生成貼圖用于模仿BRDF光照效果。最終產(chǎn)生的效果堪比次時代大作中的角色光影效果。

    霧和體積光(Shader Blinking Godrays)
    目前在移動設備上要開啟真正的霧效基本不可行,ShadowGun的方案是通過簡單的網(wǎng)格+透明貼圖(稱為霧面)來模擬霧效。在玩家靠近時,霧面逐漸變淡,同時fog plane的頂點也會移開(即使完全透明的alpha面也會消耗很多渲染時間)。

    使用這個Shader的網(wǎng)格需要經(jīng)過處理:

    頂點的alpha值用于決定頂點是否可以移動(在例子中0為不可動,1為可動)。
    頂點法線決定移動的方向
    然后Shader通過計算與觀察者的距離來控制霧面的淡入/淡出。
    這個Shader還可以用來做體積光和其它一些alpha效果。

    飛機墜毀的濃煙效果(Shader Scroll 2 Layers Sine Alpha-blended)
    通過粒子產(chǎn)生濃煙的代價太高,所以ShadowGun中使用了網(wǎng)格+貼圖動畫來制作這個效果。通過混合兩層貼圖并讓它們交錯移動來產(chǎn)生動畫效果。其中頂點alpha值用于讓網(wǎng)格的邊緣看起來比較柔和,同時使用頂點顏色來模擬從火焰到煙霧的過渡效果。

    帶動態(tài)效果的天空盒(Shader Scroll 2 Layers Multiplicative)
    通過兩張貼圖的混合和移動產(chǎn)生云的動態(tài)效果。

    旗幟和衣服的飄動效果(Shader Lightmap + Wind)
    同樣利用頂點alpha值決定哪些頂點可以移動,然后shader的參數(shù)用于調(diào)整擺動的方向和速度。
    =======================分割線========================

    一、程序方面
      01、務必刪除腳本中為空或不需要的默認方法;
      02、只在一個腳本中使用OnGUI方法;
      03、避免在OnGUI中對變量、方法進行更新、賦值,輸出變量建議在Update內(nèi);
      04、同一腳本中頻繁使用的變量建議聲明其為全局變量,腳本之間頻繁調(diào)用的變量或方法建議聲明為全局靜態(tài)變量或方法;
      05、不要去頻繁獲取組件,將其聲明為全局變量;
      06、數(shù)組、集合類元素優(yōu)先使用Array,其次是List;
      07、腳本在不使用時腳本禁用之,需要時再啟用;
      08、可以使用Ray來代替OnMouseXXX類方法;
      09、需要隱藏/顯示或?qū)嵗瘉砘厍袚Q的對象,盡量不要使用SetActiveRecursively或active,而使用將對象遠遠移出相機范圍和移回原位的做法;
      10、盡量少用模運算和除法運算,比如a/5f,一定要寫成a*0.2f。
      11、對于不經(jīng)常調(diào)用或更改的變量或方法建議使用Coroutines & Yield;
      12、盡量直接聲明腳本變量,而不使用GetComponent來獲取腳本;
    iPhone
      13、盡量使用整數(shù)數(shù)字,因為iPhone的浮點數(shù)計算能力很差;
      14、不要使用原生的GUI方法;
      15、不要實例化(Instantiate)對象,事先建好對象池,并使用Translate“生成”對象;
     

    二、模型方面
      01、合并使用同貼圖的材質(zhì)球,合并使用相同材質(zhì)球的Mesh;
      02、角色的貼圖和材質(zhì)球只要一個,若必須多個則將模型離分離為多個部分;
      02、骨骼系統(tǒng)不要使用太多;
      03、當使用多角色時,將動畫單獨分離出來;
      04、使用層距離來控制模型的顯示距離;
      05、陰影其實包含兩方面陰暗和影子,建議使用實時影子時把陰暗效果烘焙出來,不要使用燈光來調(diào)節(jié)光線陰暗。
      06、少用像素燈和使用像素燈的Shader;
      08、如果硬陰影可以解決問題就不要用軟陰影,并且使用不影響效果的低分辨率陰影;
      08、實時陰影很耗性能,盡量減小產(chǎn)生陰影的距離;
      09、允許的話在大場景中使用線性霧,這樣可以使遠距離對象或陰影不易察覺,因此可以通過減小相機和陰影距離來提高性能;
      10、使用圓滑組來盡量減少模型的面數(shù);
      11、項目中如果沒有燈光或?qū)ο笤谝苿幽敲淳筒灰褂脤崟r燈光;
      12、水面、鏡子等實時反射/折射的效果單獨放在Water圖層中,并且根據(jù)其實時反射/折射的范圍來調(diào)整;
      13、碰撞對效率的影響很小,但碰撞還是建議使用Box、Sphere碰撞體;
      14、建材質(zhì)球時盡量考慮使用Substance;
      15、盡量將所有的實時反射/折射(如水面、鏡子、地板等等)都集合成一個面;
      16、假反射/折射沒有必要使用過大分辨率,一般64*64就可以,不建議超過256*256;
      17、需要更改的材質(zhì)球,建議實例化一個,而不是使用公共的材質(zhì)球;
      18、將不須射線或碰撞事件的對象置于IgnoreRaycast圖層;
      19、將水面或類似效果置于Water圖層
      20、將透明通道的對象置于TransparentFX圖層;
      21、養(yǎng)成良好的標簽(Tags)、層次(Hieratchy)和圖層(Layer)的條理化習慣,將不同的對象置于不同的標簽或圖層,三者有效的結(jié)合將很方便的按名稱、類別和屬性來查找;
      22、通過Stats和Profile查看對效率影響最大的方面或?qū)ο?#xff0c;或者使用禁用部分模型的方式查看問題到底在哪兒;
      23、使用遮擋剔除(Occlusion Culling)處理大場景,一種較原生的類LOD技術,并且能夠“分割”作為整體的一個模型。

    三、其它
      場景中如果沒有使用燈光和像素燈,就不要使用法線貼圖,因為法線效果只有在有光源(Direct Light/Point Light/Angle Light/Pixel Light)的情況下才有效果。
    ?

    C#語言 優(yōu)化

    一、用屬性代替可訪問的字段

      1、.NET數(shù)據(jù)綁定只支持數(shù)據(jù)綁定,使用屬性可以獲得數(shù)據(jù)綁定的好處;

      2、在屬性的get和set訪問器重可使用lock添加多線程的支持。

      二、readonly(運行時常量)和const(編譯時常量)

      1、const只可用于基元類型、枚舉、字符串,而readonly則可以是任何的類型;

      2、const在編譯時將替換成具體的常量,這樣如果在引用中同時使用了const和readonly兩種值,則對readonly的再次改變將會改變設計的初衷,這是需要重新編譯所更改的程序集,以重新引用新的常量值。

      3、const比readonly效率高,但失去了應用的靈活性。

      三、is與as

      1、兩者都是在運行時進行類型的轉(zhuǎn)換,as操作符只能使用在引用類型,而is可以使用值和引用類型;

      2、通常的做法是用is判斷類型,然后選擇使用as或強類型轉(zhuǎn)換操作符(用operater定義的轉(zhuǎn)換)有選擇地進行。

      四、ConditionalAttribute代替#if #endif條件編譯

      1、ConditionalAttribute只用于方法級,對其他的如類型、屬性等的添加都是無效的;而#if #endif則不受此限制;

      2、ConditionalAttribute可以添加多個編譯條件的或(OR)操作,而#if #endif則可以添加與(AND)[這里可以完全定義為另一個單獨的符號];

      3、ConditioanlAttribute定義可以放在一個單獨的方法中,使得程序更為靈活。

      五、提供ToString()方法

      1、可以更友好的方式提供用戶詳細的信息;

      2、使用IFormatter.ToString()方法提供更靈活的定制,如果添加IFormatProvider 和ICustomFormatter接口則更有意義的定制消息輸出。

      六、值和引用類型的區(qū)別

      1、值類型不支持多態(tài),適合存儲應用程序操作的數(shù)據(jù),而引用則支持多態(tài),適用于定義應用程序的行為;

      2、對于數(shù)組定義為值類型可以顯著提高程序的性能;

      3、值類型具有較少的堆內(nèi)存碎片、內(nèi)存垃圾和間接訪問時間,其在方法中的返回是以復制的方式進行,避免暴露內(nèi)部結(jié)構到外界;

      4、值類型應用在如下的場景中:類型的職責主要是用于數(shù)據(jù)存儲;公共接口完全由一些數(shù)據(jù)成員存取屬性定義;永遠沒有子類;永遠沒有多態(tài)行為。

      七、值類型盡可能實現(xiàn)為常量性和原子性的類型

      1、使我們的代碼更易于編寫和維護;

      2、初始化常量的三種策略:在構造中;工廠方法;構造一個可變的輔助類(如StringBuilder)。

      八、確保0為值得有效狀態(tài)

      1、值類型的默認狀態(tài)應為0;

      2、枚舉類型的0不應為無效的狀態(tài);在FlagsAttribute是應確保0值為有效地狀態(tài);

      3、在字符串為為空時可以返回一個string.Empty的空字符串;

      九、相等判斷的多種表示關系

      1、ReferenceEquals()判斷引用相等,需要兩個是引用同一個對象時方可返回true;

      2、靜態(tài)的Equals()方法先進性引用判斷再進行值類型判斷的;

      3、對于引用類型的判斷可以在使用值語義時使用重寫Equals()方法;

      4、重寫Equals()方法時也應當重寫GetHashCode()方法,同時提供operater==()操作。

      十、理解GetHashCode()方法的缺陷

      1、GetHashCode()僅應用在基于散列的集合定義鍵的散列值,如HashTable或Dictionary;

      2、GetHashCode()應當遵循相應的三條規(guī)則:兩個相等對象應當返回相同的散列碼;應當是一個實例不變式;散列函數(shù)應該在所有的整數(shù)中產(chǎn)生一個隨機的分布;

      十一、優(yōu)先使用foreach循環(huán)語句

      1、foreach可以消除編譯器對for循環(huán)對數(shù)組邊界的檢查;

      2、foreach的循環(huán)變量是只讀的,且存在一個顯式的轉(zhuǎn)換,在集合對象的對象類型不正確時拋出異常;

      3、foreach使用的集合需要有:具備公有的GetEnumberator()方法;顯式實現(xiàn)了IEnumberable接口;實現(xiàn)了IEnumerator接口;

      4、foreach可以帶來資源管理的好處,因為如果編譯器可以確定IDisposable接口時可以使用優(yōu)化的try…finally塊;

      十二、默認字段的初始化優(yōu)于賦值語句

      1、字段生命默認會將值類型初始化為0,引用類型初始化為null;

      2、對同一個對象進行多次初始化會降低代碼的執(zhí)行效率;

      3、將字段的初始化放到構造器中有利于進行異常處理。

      十三、使用靜態(tài)構造器初始化靜態(tài)成員

      1、靜態(tài)構造器會在一個類的任何方法、變量或者屬性訪問之前執(zhí)行;

      2、靜態(tài)字段同樣會在靜態(tài)構造器之前運行,同時靜態(tài)構造器有利于異常處理。

      十四、利用構造器鏈(在.NET 4.0已經(jīng)用可選參數(shù)解決了這個問題)

      1、用this將初始化工作交給另一個構造器,用base調(diào)用基類的構造器;

      2、類型實例的操作順序是:將所有的靜態(tài)字段都設置為0;執(zhí)行靜態(tài)字段初始化器;執(zhí)行基類的靜態(tài)構造器;執(zhí)行當前類型的靜態(tài)構造器;

      將所有的實例字段設置為0;執(zhí)行實例字段初始化器;執(zhí)行合適的基類實例構造器;執(zhí)行當前類型的實例構造器。

      十五、利用using和try/finally語句來清理資源

      在IDisposable接口的Dispose()方法中用GC.SuppressFinalize()可通知垃圾收集器不再執(zhí)行終結(jié)操作。

      十六、盡量減少內(nèi)存垃圾

      1、分配和銷毀一個對上的對象都要花費額外的處理器時間;

      2、減少分配對象數(shù)量的技巧:經(jīng)常使用的局部變量提升為字段;提供一個類,用于存儲Singleton對象來表達特定類型的常用實例。

      3、用StringBuilder進行復雜的字符串操作。

      十七、盡量減少裝箱和拆箱

      1、關注一個類型到System.Object的隱式轉(zhuǎn)換,同時值類型不應該被替換為System.Object類型;

      2、使用接口而不是使用類型可以避免裝箱,即將值類型從接口實現(xiàn),然后通過接口調(diào)用成員。

      十八、實現(xiàn)標準Dispose模式

      1、使用非內(nèi)存資源,它必須有一個終結(jié)器,垃圾收集器在完成沒有終結(jié)其的內(nèi)存對象后會將實現(xiàn)了終結(jié)器對象的添加到終結(jié)隊列中,然后垃圾收集器會啟動一個新的線程來運行這些對象上的終結(jié)器,這種防御性的變成方式是因為如果用戶忘記了調(diào)用Dispose()方法,垃圾回收器總是會調(diào)用終結(jié)器方法的,這樣可以避免出現(xiàn)非托管的內(nèi)存資源不被釋放引起內(nèi)存泄漏的問題;

      2、使用IDisposable.Dispose()方法需要做四個方面的工作:釋放所有的非托管資源;釋放所有的托管資源;設置一個狀態(tài)標記來表示是否已經(jīng)執(zhí)行了Dispose();調(diào)用GC.SuppressFinalize(this)取消對象的終結(jié)操作;

      3、為需要多態(tài)的類型添加一個受保護的虛方法Dispose(),派生類通過重寫這個方法來釋放自己的任務;

      4、在需要IDisoposable接口的類型中,即使我們不需要一個終結(jié)器也應該實現(xiàn)一個終結(jié)器。

      十九、定義并實現(xiàn)接口優(yōu)于繼承類型

      1、不相關的類型可以共同實現(xiàn)一個共同的接口,而且實現(xiàn)接口比繼承更容易;

      2、接口比較穩(wěn)定,他將一組功能封裝在一個接口中,作為其他類型的實現(xiàn)合同,而基類則可以隨著時間的推移進行擴展。

      二十、明辨接口實現(xiàn)和虛方法重寫

      1、在基類中實現(xiàn)一個接口時,派生類需要使用new來隱藏對基類方法的使用;

      2、可以將基類接口的方法申明為虛方法,然后再派生類中實現(xiàn)。

      二十一、使用委托表達回調(diào)

      1、委托對象本身不提供任何異常捕獲,所以任何的多播委托調(diào)用都會結(jié)束整個調(diào)用鏈;

      2、通過顯示調(diào)用委托鏈上的每個委托目標可以避免多播委托僅返回最后一個委托的輸出。

      二十二、使用事件定義外部接口

      1、應當聲明為共有的事件,讓編譯器為我們創(chuàng)建add和renmove方法;

      2、使用System.ComponentModel.EventHandlerList容器來存儲各個事件處理器,在類型中包含大量事件時可以使用他來隱藏所有事件的復雜性。

      二十三、避免返回內(nèi)部類對象的引用

      1、由于值類型對象的訪問會創(chuàng)建一個該對象的副本,所以定義一個值類型的的屬性完全不會改變類型對象內(nèi)部的狀態(tài);

      2、常量類型可以避免改變對象的狀態(tài);

      3、定義接口將訪問限制在一個子集中從而最小化對對象內(nèi)部狀態(tài)的破壞;

      4、定義一個包裝器對象來限制另一個對象的訪問;

      5、希望客戶代碼更改內(nèi)部數(shù)據(jù)元素時可以實現(xiàn)Observer模式,以使對象可以對更改進行校驗或相應。

      二十四、聲明式編程優(yōu)于命令式編程

      可以避免在多個類似的手工編寫的算法中犯錯誤的可能性,并提供清晰和可讀的代碼。

      二十五、盡可能將類型實現(xiàn)為可序列化的類型

      1、類型表示的不是UI控件、窗口或者表單,都應使類型支持序列化;

      2、在添加了NonSerializedAttribute的反序列化的屬性時可以通過實現(xiàn)IDeserializationCallback的OnDeserialization()方法裝入默認值;

      3、在版本控制中可以使用ISerializable接口來進行靈活的控制,同時提供一個序列化的構造器來根據(jù)流中的數(shù)據(jù)初始化對象,在實現(xiàn)時還要求SerializationFormatter異常的許可。

      4、如果需要創(chuàng)建派生類則需要提供一個掛鉤方法供派生類使用。

      二十六、使用IComparable和IComparer接口實現(xiàn)排序關系

      1、IComparable接口用于為類型實現(xiàn)最自然的排序關系,重載四個比較操作符,可以提供一個重載版的CompareTo()方法,讓其接受具體類型作為參數(shù);

      2、IComparer用于提供有別于IComparable的排序關系,或者為我們提供類型本身說沒有實現(xiàn)的排序關系。

      二十七、避免ICloneable接口

      1、對于值類型永遠不需要支持ICloneable接口使用默認的賦值操作即可;

      2、對于可能需要支持ICloneable接口的基類,應該為其創(chuàng)造一個受保護的復制構造器,并應當避免支持IConeable接口。

      二十八、避免強制轉(zhuǎn)換操作符

      通過使用構造器來代替轉(zhuǎn)換操作符可以使轉(zhuǎn)換工作變得更清晰,由于在轉(zhuǎn)換后使用的臨時對象,容易導致一些詭異的BUG。

      二十九、只有當新版積累導致問題是才考慮使用new修飾符

      三十、盡可能實現(xiàn)CLS兼容的程序集

      1、創(chuàng)建一個兼容的程序集需要遵循兩條規(guī)則:程序集中所有公有和受保護成員所使用的參數(shù)和返回值類型都必須與CLS兼容;任何與CLS不兼容的公有和受保護成員都必須有一個與CLS兼容的替代品;

      2、可以通過顯式實現(xiàn)接口來避開CLS兼容類型檢查,及CLSCompliantAttribute不會檢查私有的成員的CLS兼容性。

      三十一、盡可能實現(xiàn)短小簡潔的方法

      1、JIT編譯器以方法為單位進行編譯,沒有被調(diào)用的方法不會被JIT編譯;

      2、如果將較長的Switch中的Case語句的代碼替換成一個一個的方法,則JIT編譯器所節(jié)省的時間將成倍增加;

      3、短小精悍的方法并選擇較少的局部變量可以獲得優(yōu)化的寄存器使用;

      4、方法內(nèi)的控制分支越少,JIT編譯器越容易將變量放入寄存器。

      三十二、盡可能實現(xiàn)小尺寸、高內(nèi)聚的程序集

      1、將所有的公有類以及共用的基類放到一些程序集中,把為公有類提供功能的工具類也放入同樣的程序集中,把相關的公有接口打包到他們自己的程序集中,最后處理遍布應用程序中水平位置的類;

      2、原則上創(chuàng)建兩種組件:一種為小而聚合、具有某項特定功能的程序集,另一種為大而寬、包含共用功能的程序集。

      三十三、限制類型的可見性

      1、使用接口來暴露類型的功能,可以使我們更方便地創(chuàng)建內(nèi)部類,同時又不會限制他們在程序集外的可用性;

      2、向外暴露的公有類型越少,未來擴展和更改實現(xiàn)所擁有的選擇就越多。

      三十四、創(chuàng)建大粒度的Web API

      這是在機器之間的交易的頻率和載荷都降到最低,將大的操作和細粒度的執(zhí)行放到服務器執(zhí)行。

      三十五、重寫優(yōu)于事件處理器

      1、一個事件處理器拋出異常,則事件鏈上的其他處理器將不會被調(diào)用,而重寫的虛方法則不會出現(xiàn)這種情況;

      2、重寫要比關聯(lián)事件處理器高效得多,事件處理器需要迭代整個請求列表,這樣占用了更多的CPU時間;

      3、事件能在運行時響應,具有更多的靈活性,可以對同一個事件關聯(lián)多個響應;

      4、通行的規(guī)則是處理一個派生類的事件是,重寫方式較好。

      三十六、合理使用.NET運行時診斷

      1、System.Diagnostics.Debug\Trace\EventLog為運行時提供了程序添加診斷信息所需要的所有工具,EventLog提供入口時的應用程序能寫到系統(tǒng)事件日志中;

      2、最后不要寫自己的診斷庫,.NET FCL 已經(jīng)擁有了我們需要的核心庫。

      三十七、使用標準配置機制

      1、.NET框架的System.Windows.Application類為我們定義了建立通用配置路徑的屬性;

      2、Application.LocalAppDataPath和Application.userDataPath 會生成本地數(shù)據(jù)目錄和用戶數(shù)據(jù)的路徑名;

      3、不要在ProgramFiles和Windows系統(tǒng)目錄中寫入數(shù)據(jù),這些位置需要更高的安全權限,不要指望用戶擁有寫入的權限。

      三十八、定制和支持數(shù)據(jù)綁定

      1、BindingMananger和CurrencyManager這兩個對象實現(xiàn)了控件和數(shù)據(jù)源之間的數(shù)據(jù)傳輸;

      2、數(shù)據(jù)綁定的優(yōu)勢:使用數(shù)據(jù)綁定要比編寫自己的代碼簡單得多;應該將它用于文本數(shù)據(jù)項之外的范圍-其他顯示屬性也可以被綁定;對于Windowos Forms 數(shù)據(jù)綁定能夠處理多個控件同步的檢查相關數(shù)據(jù)源;

      3、在對象不支持所需的屬性時可以通過屏蔽當前的對象然后添加一個想要的對象來支持數(shù)據(jù)綁定。

      三十九、使用.NET驗證

      1、ASP.NET中有五種控件來驗證有效性,可以用CustomValidator派生一個新類來增加自己的認證器;

      2、Windows驗證需要子System.Windows.Forms.Control.Validating些一個事件處理器。

      四十、根據(jù)需要選用恰當?shù)募?/h2>

      1、數(shù)組有兩個比較明顯的缺陷:不能動態(tài)的調(diào)整大小;調(diào)整大小非常耗時;

      2、ArrayList混合了一維數(shù)組和鏈表的特征,Queue和Stack是建立在Array基礎上的特殊數(shù)組;

      3、當程序更加靈活的添加和刪除項時,可以使更加健壯的集合類型,當創(chuàng)建一個模擬集合的類時,應當為其實現(xiàn)索引器和IEnumberable接口。

      四十一、DataSet優(yōu)于自定義結(jié)構

      1、DataSet有兩個缺點個:使用XML序列化機制的DataSet與非.NET 代碼之間的交互不是很好;DataSet是一個非常通用的容器;

      2、強類型的DataSet打破了更多的設計規(guī)則,其獲得的開發(fā)效率要遠遠高于自己編寫的看上去更為優(yōu)雅的設計。

      四十二、利用特性簡化反射

      通過設計和實現(xiàn)特性類,強制開發(fā)人員用他們來聲明可被動態(tài)使用的類型、方法和屬性,可以減少應用程序的運行時錯誤,提高軟件的用戶滿意度。

      四十三、避免過度使用反射

      1、Invoke成員使用的參數(shù)和返回值都是System.Object,在運行時進行類型的轉(zhuǎn)換,但出現(xiàn)問題的可能性也變得更多了;

      2、接口使我們可以得到一個更為清晰、也更具可維護性的系統(tǒng),反射式一個很強大的晚期綁定機制.NET框架使用它來實現(xiàn)Windows控件和Web控件的數(shù)據(jù)綁定。

      四十四、為應用程序創(chuàng)建特定的異常類

      1、需要不同的異常類的唯一原因是讓用戶在編寫catch處理器時能夠方便地對不同的錯誤采取不同的做法;

      2、可能有不同的修復行為時我們才應該創(chuàng)建多種不同的異常類,通過提供異常基類所支持的所有構造器,可以為應用程序創(chuàng)建功能完整的異常類,使用InnerException屬性可以保存更低級別錯誤條件所產(chǎn)生的所有錯誤信息。

      四十五、優(yōu)先選擇異常安全保證

      1、強異常保證在從異常中恢復和簡化異常處理之間提供了最好的平衡,在操作因為異常而中斷,程序的狀態(tài)保留不變;

      2、對將要修改的數(shù)據(jù)做防御性的復制,對這些數(shù)據(jù)的防御性復制進行修改,這中間的操作可能會引發(fā)異常,將臨時的副本和原對象進行交換;

      3、終結(jié)器、Dispose()方法和委托對象所綁定的目標方法在任何情況下都應當確保他們不會拋出異常。

      四十六、最小化互操作

      1、互操作有三個方面的代價:數(shù)據(jù)在托管堆和非托管堆之間的列舉成本,托管代碼和非托管代碼之間切換的成本,對開發(fā)人員來說與混合環(huán)境打交道的開發(fā)工作;

      2、在interop中使用blittable類型可以有效地在托管和非托管環(huán)境中來回復制,而不受對象內(nèi)部結(jié)構的影響;

      3、使用In/Out特性來確保最貼切的不必要的多次復制,通過聲明數(shù)據(jù)如何被列舉來提高性能;

      4、使用COM Interop用最簡單的方式實現(xiàn)和COM組件的互操作,使用P/Invoke調(diào)用Win32 API,或者使用C++編譯器的/CLR開關來混合托管和非托管的代碼;

      四十七、優(yōu)先選擇安全代碼

      1、盡可能的避免訪問非托管內(nèi)存,隔離存儲不能防止來自托管代碼和受信用戶的訪問;

      2、程序集在Web上運行時可以考慮使用隔離存儲,當某些算法確實需要更高的安全許可時,應該將那些代碼隔離在一個單獨的程序集中。

      四十八、掌握相關工具與資源

      1、使用NUnit建立自動單元測試(集成在VS2010 中了);

      2、FXCop工具會獲取程序集中的IL代碼,并將其與異族編碼規(guī)則和最佳實踐對照分析,最后報告違例情況;

      3、ILDasm是一個IL反匯編工具,可以幫助我們洞察細節(jié);

      4、Shared Source CLI是一個包含.NET框架內(nèi)核和C#編譯器的實現(xiàn)源碼。

    總結(jié)

    以上是生活随笔為你收集整理的Unity 性能优化归纳的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    日日碰狠狠躁久久躁蜜桃 | 东京无码熟妇人妻av在线网址 | 人人爽人人爽人人片av亚洲 | 亚洲狠狠婷婷综合久久 | 久久伊人色av天堂九九小黄鸭 | 高潮毛片无遮挡高清免费 | 精品成人av一区二区三区 | 国产精品久久国产三级国 | 成熟人妻av无码专区 | 激情爆乳一区二区三区 | av人摸人人人澡人人超碰下载 | 婷婷丁香六月激情综合啪 | 国产手机在线αⅴ片无码观看 | 精品国偷自产在线视频 | 日韩av无码中文无码电影 | 嫩b人妻精品一区二区三区 | 日本www一道久久久免费榴莲 | 亚洲乱码国产乱码精品精 | 沈阳熟女露脸对白视频 | 精品国产成人一区二区三区 | 亚洲 欧美 激情 小说 另类 | 天堂一区人妻无码 | 一本色道久久综合狠狠躁 | 国产绳艺sm调教室论坛 | 宝宝好涨水快流出来免费视频 | 成人欧美一区二区三区黑人 | 午夜肉伦伦影院 | 夜夜高潮次次欢爽av女 | 欧美野外疯狂做受xxxx高潮 | 亚洲熟妇自偷自拍另类 | 亚洲中文字幕乱码av波多ji | 国产精华av午夜在线观看 | 亚洲欧洲中文日韩av乱码 | 亚洲精品午夜国产va久久成人 | 九九热爱视频精品 | 中文字幕久久久久人妻 | 久久久精品欧美一区二区免费 | 精品国产一区av天美传媒 | 日日干夜夜干 | 曰韩少妇内射免费播放 | 巨爆乳无码视频在线观看 | 久久精品无码一区二区三区 | 成人动漫在线观看 | 麻豆av传媒蜜桃天美传媒 | 日韩精品成人一区二区三区 | 图片区 小说区 区 亚洲五月 | 国产在线精品一区二区高清不卡 | 国产又爽又黄又刺激的视频 | 一二三四社区在线中文视频 | 无码午夜成人1000部免费视频 | 国产精品理论片在线观看 | 久久精品中文字幕一区 | 一本无码人妻在中文字幕免费 | 在线播放免费人成毛片乱码 | 强伦人妻一区二区三区视频18 | 鲁大师影院在线观看 | 亚洲精品久久久久久一区二区 | 啦啦啦www在线观看免费视频 | 无码人妻精品一区二区三区下载 | 国产免费久久精品国产传媒 | 亚洲高清偷拍一区二区三区 | 在线成人www免费观看视频 | 久久无码人妻影院 | 最新国产麻豆aⅴ精品无码 | 无码中文字幕色专区 | 国产精品久久福利网站 | 人妻中文无码久热丝袜 | 中文字幕人妻无码一区二区三区 | 野外少妇愉情中文字幕 | 久久精品一区二区三区四区 | 成人无码视频在线观看网站 | 无码人妻丰满熟妇区五十路百度 | 自拍偷自拍亚洲精品10p | 久久久久人妻一区精品色欧美 | 亚洲熟妇色xxxxx欧美老妇 | 麻豆国产丝袜白领秘书在线观看 | 清纯唯美经典一区二区 | 亚洲啪av永久无码精品放毛片 | 日韩精品乱码av一区二区 | 精品成人av一区二区三区 | 中文亚洲成a人片在线观看 | 精品国产精品久久一区免费式 | 67194成是人免费无码 | 波多野42部无码喷潮在线 | 久久国内精品自在自线 | 亚洲国精产品一二二线 | 亚洲码国产精品高潮在线 | 一本无码人妻在中文字幕免费 | 亚洲自偷精品视频自拍 | www国产精品内射老师 | 国产日产欧产精品精品app | 一本久久伊人热热精品中文字幕 | 日欧一片内射va在线影院 | 动漫av一区二区在线观看 | 国产日产欧产精品精品app | 国产福利视频一区二区 | 久久伊人色av天堂九九小黄鸭 | а√资源新版在线天堂 | 人人爽人人澡人人高潮 | 精品国产成人一区二区三区 | 亚洲男人av天堂午夜在 | 久久综合九色综合欧美狠狠 | 国产精品嫩草久久久久 | 人妻少妇精品视频专区 | 综合激情五月综合激情五月激情1 | 中文字幕亚洲情99在线 | 欧洲欧美人成视频在线 | 精品国产青草久久久久福利 | 日韩av无码一区二区三区不卡 | 精品少妇爆乳无码av无码专区 | 国产电影无码午夜在线播放 | 中文字幕av伊人av无码av | 亚洲国产av精品一区二区蜜芽 | 国产精品.xx视频.xxtv | 成人性做爰aaa片免费看 | 98国产精品综合一区二区三区 | 欧美老妇交乱视频在线观看 | 领导边摸边吃奶边做爽在线观看 | 国产精品美女久久久久av爽李琼 | 97夜夜澡人人爽人人喊中国片 | 欧美丰满熟妇xxxx性ppx人交 | 精品日本一区二区三区在线观看 | 性欧美牲交在线视频 | 三级4级全黄60分钟 | а√天堂www在线天堂小说 | 国产另类ts人妖一区二区 | 纯爱无遮挡h肉动漫在线播放 | 熟女俱乐部五十路六十路av | 国产成人精品一区二区在线小狼 | 永久免费精品精品永久-夜色 | 国产精品va在线观看无码 | 激情内射亚州一区二区三区爱妻 | 国内精品久久毛片一区二区 | 天堂无码人妻精品一区二区三区 | 国产亚洲视频中文字幕97精品 | 初尝人妻少妇中文字幕 | 久激情内射婷内射蜜桃人妖 | 国内精品人妻无码久久久影院蜜桃 | 国产sm调教视频在线观看 | 性欧美大战久久久久久久 | 亚洲娇小与黑人巨大交 | 人妻熟女一区 | 欧美日韩人成综合在线播放 | 久久99国产综合精品 | 久久亚洲精品成人无码 | 熟妇人妻中文av无码 | 日韩人妻系列无码专区 | 欧美熟妇另类久久久久久不卡 | 国产黑色丝袜在线播放 | 亚洲中文字幕无码中字 | 内射欧美老妇wbb | 无码一区二区三区在线 | 波多野42部无码喷潮在线 | 色五月丁香五月综合五月 | ass日本丰满熟妇pics | 性啪啪chinese东北女人 | 麻豆人妻少妇精品无码专区 | 狠狠色噜噜狠狠狠7777奇米 | 国产精品99爱免费视频 | 综合人妻久久一区二区精品 | 真人与拘做受免费视频 | 岛国片人妻三上悠亚 | 国产免费久久久久久无码 | 18无码粉嫩小泬无套在线观看 | 偷窥日本少妇撒尿chinese | 成人无码精品一区二区三区 | 午夜免费福利小电影 | 欧美性生交xxxxx久久久 | 国产午夜精品一区二区三区嫩草 | 免费男性肉肉影院 | 欧美丰满熟妇xxxx | 性欧美videos高清精品 | 精品国产国产综合精品 | 中文字幕无码人妻少妇免费 | 国产精品免费大片 | 亚洲日本va午夜在线电影 | 牛和人交xxxx欧美 | 无码纯肉视频在线观看 | 最新国产麻豆aⅴ精品无码 | 亚洲精品一区二区三区四区五区 | 久久人人爽人人人人片 | 国产午夜福利100集发布 | 男女猛烈xx00免费视频试看 | 99视频精品全部免费免费观看 | 东京热一精品无码av | 久久99久久99精品中文字幕 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲精品一区二区三区大桥未久 | 亚洲狠狠婷婷综合久久 | 成人性做爰aaa片免费看 | 美女毛片一区二区三区四区 | 亲嘴扒胸摸屁股激烈网站 | 国产成人无码一二三区视频 | 国产av一区二区精品久久凹凸 | 色情久久久av熟女人妻网站 | 天天拍夜夜添久久精品 | 中国大陆精品视频xxxx | 狠狠色噜噜狠狠狠狠7777米奇 | 精品国产一区二区三区av 性色 | 亚洲国产午夜精品理论片 | 真人与拘做受免费视频 | 午夜精品一区二区三区的区别 | 亚洲国产午夜精品理论片 | 色一情一乱一伦一视频免费看 | 牲欲强的熟妇农村老妇女 | 伊人久久大香线蕉亚洲 | 国产又爽又猛又粗的视频a片 | 特级做a爰片毛片免费69 | 精品国产一区二区三区av 性色 | 极品尤物被啪到呻吟喷水 | 久久综合久久自在自线精品自 | 国产人妻精品午夜福利免费 | 伊人久久大香线焦av综合影院 | 99久久99久久免费精品蜜桃 | 波多野结衣乳巨码无在线观看 | √天堂资源地址中文在线 | 成人免费视频在线观看 | 亚洲国产精品久久人人爱 | 野外少妇愉情中文字幕 | 日欧一片内射va在线影院 | 蜜桃臀无码内射一区二区三区 | av无码不卡在线观看免费 | 国产精品99久久精品爆乳 | 久久久久成人片免费观看蜜芽 | 老头边吃奶边弄进去呻吟 | 久久国产精品二国产精品 | 午夜精品久久久内射近拍高清 | 亚欧洲精品在线视频免费观看 | 丰满少妇弄高潮了www | 人妻无码αv中文字幕久久琪琪布 | 日韩无码专区 | 国内精品九九久久久精品 | 大地资源网第二页免费观看 | 精品国产一区二区三区四区 | 欧美35页视频在线观看 | 欧美高清在线精品一区 | 久久久精品国产sm最大网站 | 久久久久久av无码免费看大片 | 国产成人精品必看 | 日本精品人妻无码免费大全 | 中文字幕乱码人妻无码久久 | 亚洲精品综合一区二区三区在线 | 少妇人妻大乳在线视频 | 欧美乱妇无乱码大黄a片 | 成 人影片 免费观看 | 日韩av无码一区二区三区不卡 | 日韩成人一区二区三区在线观看 | 无码精品人妻一区二区三区av | 国产精品毛片一区二区 | 欧美人与牲动交xxxx | 亚洲日本va午夜在线电影 | 久久熟妇人妻午夜寂寞影院 | 亚洲a无码综合a国产av中文 | 亚洲成a人片在线观看无码 | 亚洲精品国产品国语在线观看 | 牲交欧美兽交欧美 | 国产又爽又黄又刺激的视频 | 欧美激情综合亚洲一二区 | 99久久精品国产一区二区蜜芽 | 欧美乱妇无乱码大黄a片 | 国产亚洲人成在线播放 | 亚洲毛片av日韩av无码 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲一区av无码专区在线观看 | 性做久久久久久久久 | 欧美35页视频在线观看 | 国产熟妇另类久久久久 | 久久精品人妻少妇一区二区三区 | 色婷婷av一区二区三区之红樱桃 | 日本大香伊一区二区三区 | 大屁股大乳丰满人妻 | 性欧美牲交xxxxx视频 | 精品无码成人片一区二区98 | 欧美日本日韩 | 成人无码视频在线观看网站 | 亚洲精品成人福利网站 | 97se亚洲精品一区 | 久久这里只有精品视频9 | 一二三四社区在线中文视频 | 动漫av一区二区在线观看 | 无遮挡国产高潮视频免费观看 | 激情亚洲一区国产精品 | 强伦人妻一区二区三区视频18 | 香港三级日本三级妇三级 | 青草视频在线播放 | 免费男性肉肉影院 | 国产又爽又猛又粗的视频a片 | 免费国产黄网站在线观看 | 国产人妻大战黑人第1集 | 人人妻人人澡人人爽人人精品浪潮 | 伊人久久大香线蕉av一区二区 | 丰腴饱满的极品熟妇 | 强辱丰满人妻hd中文字幕 | 色一情一乱一伦一区二区三欧美 | 麻花豆传媒剧国产免费mv在线 | 国产精品无码一区二区三区不卡 | 娇妻被黑人粗大高潮白浆 | 真人与拘做受免费视频 | 欧美性生交活xxxxxdddd | 免费观看又污又黄的网站 | 自拍偷自拍亚洲精品被多人伦好爽 | 狠狠色欧美亚洲狠狠色www | 强辱丰满人妻hd中文字幕 | 国产精品第一国产精品 | 亚洲人成无码网www | 日韩少妇内射免费播放 | 一二三四社区在线中文视频 | 沈阳熟女露脸对白视频 | 99久久99久久免费精品蜜桃 | 东京一本一道一二三区 | 领导边摸边吃奶边做爽在线观看 | 亚洲经典千人经典日产 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 男女性色大片免费网站 | 午夜不卡av免费 一本久久a久久精品vr综合 | 久久99精品久久久久久动态图 | 色综合久久久久综合一本到桃花网 | 国内精品久久毛片一区二区 | 人人澡人摸人人添 | 一本无码人妻在中文字幕免费 | 国产精品人人爽人人做我的可爱 | 色 综合 欧美 亚洲 国产 | 国产两女互慰高潮视频在线观看 | 又粗又大又硬毛片免费看 | 俺去俺来也www色官网 | 国产精品爱久久久久久久 | 欧美日本精品一区二区三区 | 青青青爽视频在线观看 | 少妇被黑人到高潮喷出白浆 | 欧美喷潮久久久xxxxx | aⅴ亚洲 日韩 色 图网站 播放 | 漂亮人妻洗澡被公强 日日躁 | 国产精品无码一区二区三区不卡 | 日本爽爽爽爽爽爽在线观看免 | 国产三级久久久精品麻豆三级 | 麻豆精品国产精华精华液好用吗 | 在线播放免费人成毛片乱码 | 久久婷婷五月综合色国产香蕉 | 亚洲国产av精品一区二区蜜芽 | 国产成人一区二区三区在线观看 | 女高中生第一次破苞av | 99精品视频在线观看免费 | 中文字幕无码人妻少妇免费 | 丰满护士巨好爽好大乳 | 西西人体www44rt大胆高清 | 国产午夜福利100集发布 | 免费观看又污又黄的网站 | 日日麻批免费40分钟无码 | 中文字幕精品av一区二区五区 | 性色欲网站人妻丰满中文久久不卡 | 国内精品久久久久久中文字幕 | 丝袜美腿亚洲一区二区 | 性欧美大战久久久久久久 | 永久免费观看国产裸体美女 | 天天燥日日燥 | 人人爽人人澡人人人妻 | av无码电影一区二区三区 | 亚洲第一无码av无码专区 | 十八禁真人啪啪免费网站 | 国产无遮挡又黄又爽又色 | 国模大胆一区二区三区 | 98国产精品综合一区二区三区 | 少妇无套内谢久久久久 | 夜夜影院未满十八勿进 | 两性色午夜视频免费播放 | 久久精品国产精品国产精品污 | 人妻无码αv中文字幕久久琪琪布 | 国产综合久久久久鬼色 | 国产一区二区三区精品视频 | 99久久精品午夜一区二区 | 高潮毛片无遮挡高清免费视频 | 亚洲va中文字幕无码久久不卡 | 宝宝好涨水快流出来免费视频 | 又大又黄又粗又爽的免费视频 | 亚洲成av人片天堂网无码】 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲成av人片在线观看无码不卡 | 国产精品-区区久久久狼 | 久久人妻内射无码一区三区 | 丰满少妇高潮惨叫视频 | 欧美zoozzooz性欧美 | 精品少妇爆乳无码av无码专区 | 无遮挡国产高潮视频免费观看 | 99精品无人区乱码1区2区3区 | 亚洲成熟女人毛毛耸耸多 | 精品人妻中文字幕有码在线 | 欧美 日韩 亚洲 在线 | 久久国产36精品色熟妇 | 在线а√天堂中文官网 | 午夜无码区在线观看 | 熟妇人妻无乱码中文字幕 | 免费人成网站视频在线观看 | www国产亚洲精品久久久日本 | 国产亚洲欧美日韩亚洲中文色 | 蜜桃av抽搐高潮一区二区 | 国产欧美亚洲精品a | 无码人妻丰满熟妇区五十路百度 | 国产美女精品一区二区三区 | 一本大道久久东京热无码av | 国产高潮视频在线观看 | 无遮挡啪啪摇乳动态图 | 奇米影视7777久久精品人人爽 | 夜精品a片一区二区三区无码白浆 | 欧美性生交xxxxx久久久 | 老熟女乱子伦 | 国精产品一区二区三区 | 中国女人内谢69xxxxxa片 | 国产成人精品必看 | 免费中文字幕日韩欧美 | 亚洲欧美综合区丁香五月小说 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产精品久久久 | 亚洲精品久久久久久久久久久 | 欧美日韩一区二区三区自拍 | 黑人巨大精品欧美一区二区 | 亚洲阿v天堂在线 | 纯爱无遮挡h肉动漫在线播放 | 小鲜肉自慰网站xnxx | 性欧美熟妇videofreesex | 夜夜躁日日躁狠狠久久av | 少妇被黑人到高潮喷出白浆 | 国产熟妇高潮叫床视频播放 | 亚洲 日韩 欧美 成人 在线观看 | 女人被男人躁得好爽免费视频 | 帮老师解开蕾丝奶罩吸乳网站 | aa片在线观看视频在线播放 | 美女毛片一区二区三区四区 | 精品国产乱码久久久久乱码 | 日韩人妻少妇一区二区三区 | 纯爱无遮挡h肉动漫在线播放 | 久久精品国产大片免费观看 | 无码人妻精品一区二区三区下载 | 蜜桃av抽搐高潮一区二区 | 亚洲日韩中文字幕在线播放 | 久久亚洲精品中文字幕无男同 | 夜先锋av资源网站 | 亚洲精品成人av在线 | 老司机亚洲精品影院 | 色情久久久av熟女人妻网站 | 亚洲国产一区二区三区在线观看 | 久久综合久久自在自线精品自 | 在线精品亚洲一区二区 | 色五月丁香五月综合五月 | 永久黄网站色视频免费直播 | 国产人妻人伦精品 | 国产香蕉尹人综合在线观看 | 无码av免费一区二区三区试看 | 夜夜高潮次次欢爽av女 | 欧洲极品少妇 | 人人超人人超碰超国产 | 国产午夜精品一区二区三区嫩草 | 欧美老熟妇乱xxxxx | 最近免费中文字幕中文高清百度 | 精品亚洲韩国一区二区三区 | 又粗又大又硬毛片免费看 | 少妇性l交大片欧洲热妇乱xxx | 国产熟女一区二区三区四区五区 | 欧美亚洲日韩国产人成在线播放 | 丰满人妻精品国产99aⅴ | 欧美人妻一区二区三区 | 亚洲成a人片在线观看日本 | 99riav国产精品视频 | 亚洲国产精品美女久久久久 | 在线精品国产一区二区三区 | 激情内射日本一区二区三区 | 强辱丰满人妻hd中文字幕 | 麻豆果冻传媒2021精品传媒一区下载 | 强伦人妻一区二区三区视频18 | 精品一区二区三区波多野结衣 | 奇米影视7777久久精品 | 国产精品久久久久影院嫩草 | 综合人妻久久一区二区精品 | 男人扒开女人内裤强吻桶进去 | 俺去俺来也在线www色官网 | 激情内射日本一区二区三区 | 成人av无码一区二区三区 | 无码人妻出轨黑人中文字幕 | 亚洲 欧美 激情 小说 另类 | 国产精品美女久久久久av爽李琼 | 无码吃奶揉捏奶头高潮视频 | 婷婷五月综合缴情在线视频 | 精品午夜福利在线观看 | 国产一区二区三区精品视频 | 宝宝好涨水快流出来免费视频 | 欧美三级不卡在线观看 | 特黄特色大片免费播放器图片 | 在线a亚洲视频播放在线观看 | 久久久中文字幕日本无吗 | 亚洲乱码日产精品bd | 午夜免费福利小电影 | 亚洲天堂2017无码中文 | 欧美日韩在线亚洲综合国产人 | 六月丁香婷婷色狠狠久久 | 强伦人妻一区二区三区视频18 | 亚洲gv猛男gv无码男同 | 色婷婷av一区二区三区之红樱桃 | 国产亚洲精品久久久久久国模美 | 亲嘴扒胸摸屁股激烈网站 | 午夜无码人妻av大片色欲 | 亚洲中文字幕乱码av波多ji | 免费中文字幕日韩欧美 | 日韩在线不卡免费视频一区 | 麻豆果冻传媒2021精品传媒一区下载 | 精品厕所偷拍各类美女tp嘘嘘 | 国产午夜无码视频在线观看 | 欧美人妻一区二区三区 | 欧美日韩一区二区综合 | 国内少妇偷人精品视频 | 综合人妻久久一区二区精品 | 国内少妇偷人精品视频免费 | 无码人妻精品一区二区三区不卡 | 影音先锋中文字幕无码 | 亚洲日韩一区二区 | 国产亚洲tv在线观看 | 亚洲a无码综合a国产av中文 | 未满小14洗澡无码视频网站 | 国产97在线 | 亚洲 | 成人毛片一区二区 | 亚洲热妇无码av在线播放 | 少妇性荡欲午夜性开放视频剧场 | 精品国产成人一区二区三区 | 国产网红无码精品视频 | 99久久精品国产一区二区蜜芽 | 国内精品久久毛片一区二区 | 无码国产激情在线观看 | 久久国产精品萌白酱免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产极品美女高潮无套在线观看 | 日韩成人一区二区三区在线观看 | 在线天堂新版最新版在线8 | 无码av最新清无码专区吞精 | 国产免费无码一区二区视频 | 亚洲精品无码国产 | 97精品国产97久久久久久免费 | 九月婷婷人人澡人人添人人爽 | 荫蒂被男人添的好舒服爽免费视频 | 国产成人无码av在线影院 | 内射老妇bbwx0c0ck | 久久亚洲国产成人精品性色 | 欧洲vodafone精品性 | 又紧又大又爽精品一区二区 | 国产明星裸体无码xxxx视频 | 国产卡一卡二卡三 | 国产免费久久精品国产传媒 | 成人免费视频一区二区 | 日本一卡2卡3卡四卡精品网站 | 精品久久久无码人妻字幂 | 日日躁夜夜躁狠狠躁 | 男人和女人高潮免费网站 | 国产成人无码av片在线观看不卡 | 在教室伦流澡到高潮hnp视频 | 在教室伦流澡到高潮hnp视频 | 波多野结衣一区二区三区av免费 | 亚洲色www成人永久网址 | 国产内射爽爽大片视频社区在线 | 大胆欧美熟妇xx | 亚洲精品午夜无码电影网 | 人人澡人人妻人人爽人人蜜桃 | 日本护士毛茸茸高潮 | 国精品人妻无码一区二区三区蜜柚 | 澳门永久av免费网站 | 中文字幕无码热在线视频 | 亚洲日本在线电影 | 午夜时刻免费入口 | 永久免费精品精品永久-夜色 | 久久久久久av无码免费看大片 | 国产亚洲精品久久久久久 | 又粗又大又硬又长又爽 | 成人av无码一区二区三区 | 麻豆md0077饥渴少妇 | 亚洲色成人中文字幕网站 | 国产精品亚洲专区无码不卡 | 亚洲无人区午夜福利码高清完整版 | 亚洲中文字幕无码中字 | 国产欧美精品一区二区三区 | 色偷偷人人澡人人爽人人模 | 国产精品怡红院永久免费 | 无码精品人妻一区二区三区av | 欧美刺激性大交 | 男人的天堂av网站 | a在线观看免费网站大全 | 两性色午夜视频免费播放 | 草草网站影院白丝内射 | ass日本丰满熟妇pics | 精品 日韩 国产 欧美 视频 | 国产亚洲精品精品国产亚洲综合 | 老司机亚洲精品影院无码 | 国产香蕉尹人综合在线观看 | 免费看少妇作爱视频 | 久久精品无码一区二区三区 | 亚洲欧美日韩成人高清在线一区 | 人妻尝试又大又粗久久 | 国产口爆吞精在线视频 | 亚洲综合在线一区二区三区 | 成年美女黄网站色大免费视频 | 中文字幕无码热在线视频 | 丝袜足控一区二区三区 | 精品 日韩 国产 欧美 视频 | 国模大胆一区二区三区 | 亚洲综合色区中文字幕 | 国产精品无码一区二区三区不卡 | 亚洲综合色区中文字幕 | 搡女人真爽免费视频大全 | 亚洲va欧美va天堂v国产综合 | 又色又爽又黄的美女裸体网站 | 天天做天天爱天天爽综合网 | 国产精品手机免费 | 欧美一区二区三区视频在线观看 | 狠狠综合久久久久综合网 | www一区二区www免费 | 亚洲熟妇色xxxxx亚洲 | 亚洲乱码日产精品bd | 色婷婷香蕉在线一区二区 | 婷婷六月久久综合丁香 | 少妇人妻av毛片在线看 | 国产猛烈高潮尖叫视频免费 | 亚洲日韩一区二区三区 | 无套内射视频囯产 | 国产精品久久久久影院嫩草 | 67194成是人免费无码 | 久精品国产欧美亚洲色aⅴ大片 | 色综合久久久久综合一本到桃花网 | 国产成人无码一二三区视频 | 丝袜美腿亚洲一区二区 | 亚洲中文字幕在线观看 | 中文字幕人妻无码一夲道 | 欧洲熟妇精品视频 | 日韩欧美群交p片內射中文 | 国内精品九九久久久精品 | 99久久精品国产一区二区蜜芽 | 午夜男女很黄的视频 | 黑人大群体交免费视频 | 国产精品嫩草久久久久 | 内射白嫩少妇超碰 | 国产av人人夜夜澡人人爽麻豆 | 日产精品高潮呻吟av久久 | 久久国内精品自在自线 | 少妇人妻偷人精品无码视频 | 女人被男人爽到呻吟的视频 | 玩弄少妇高潮ⅹxxxyw | 男女超爽视频免费播放 | 俺去俺来也在线www色官网 | 伦伦影院午夜理论片 | 欧美成人家庭影院 | 色偷偷人人澡人人爽人人模 | 国产成人无码av一区二区 | 久久人人爽人人人人片 | 亚洲精品一区二区三区四区五区 | 国产片av国语在线观看 | 精品国产一区av天美传媒 | 狠狠色色综合网站 | 亚洲国产精品一区二区美利坚 | 国产人妻人伦精品1国产丝袜 | 亚洲国产精品成人久久蜜臀 | 国产午夜福利亚洲第一 | 久久综合狠狠综合久久综合88 | 97人妻精品一区二区三区 | 国产激情精品一区二区三区 | 久久亚洲国产成人精品性色 | 婷婷五月综合激情中文字幕 | 国产精华av午夜在线观看 | 国产亚av手机在线观看 | 小鲜肉自慰网站xnxx | 亚洲の无码国产の无码步美 | 熟妇人妻中文av无码 | 无码人妻出轨黑人中文字幕 | 无码人妻精品一区二区三区不卡 | 亚洲精品无码人妻无码 | 国产精华av午夜在线观看 | 东京热无码av男人的天堂 | 玩弄人妻少妇500系列视频 | 欧美国产日韩久久mv | 一二三四在线观看免费视频 | 国产人妻精品午夜福利免费 | 久久精品99久久香蕉国产色戒 | 国产精品内射视频免费 | 永久免费精品精品永久-夜色 | 久久亚洲中文字幕无码 | 中文字幕亚洲情99在线 | 国产免费久久精品国产传媒 | 东京无码熟妇人妻av在线网址 | 少妇厨房愉情理9仑片视频 | 午夜福利一区二区三区在线观看 | 伊人久久婷婷五月综合97色 | 一二三四社区在线中文视频 | 三上悠亚人妻中文字幕在线 | 麻花豆传媒剧国产免费mv在线 | 天堂久久天堂av色综合 | 日韩人妻无码中文字幕视频 | 成人免费视频视频在线观看 免费 | 人妻人人添人妻人人爱 | 97人妻精品一区二区三区 | 国产三级精品三级男人的天堂 | 狂野欧美性猛交免费视频 | 美女张开腿让人桶 | 亚洲综合另类小说色区 | 狠狠cao日日穞夜夜穞av | 未满小14洗澡无码视频网站 | a片在线免费观看 | 国产人妻久久精品二区三区老狼 | 兔费看少妇性l交大片免费 | 亚洲中文无码av永久不收费 | 在线天堂新版最新版在线8 | 国产午夜亚洲精品不卡 | 成人女人看片免费视频放人 | 国产亚洲精品久久久久久 | 色一情一乱一伦 | 亚洲第一网站男人都懂 | 亚洲国产精品毛片av不卡在线 | 蜜桃无码一区二区三区 | 精品国产一区二区三区四区 | 久久亚洲精品中文字幕无男同 | 狠狠色噜噜狠狠狠7777奇米 | 好男人www社区 | 国产精品内射视频免费 | 亚洲 日韩 欧美 成人 在线观看 | 国产成人精品一区二区在线小狼 | 国产在线一区二区三区四区五区 | 人人妻人人澡人人爽欧美一区 | 久久精品国产99久久6动漫 | 天堂一区人妻无码 | 欧美精品在线观看 | 丰满妇女强制高潮18xxxx | aa片在线观看视频在线播放 | 天天躁夜夜躁狠狠是什么心态 | 欧美成人午夜精品久久久 | 亚洲综合无码久久精品综合 | 丁香花在线影院观看在线播放 | 思思久久99热只有频精品66 | 精品国产青草久久久久福利 | 人妻aⅴ无码一区二区三区 | 夜精品a片一区二区三区无码白浆 | 中国女人内谢69xxxxxa片 | 高中生自慰www网站 | 成人无码精品一区二区三区 | 台湾无码一区二区 | 亚洲综合无码一区二区三区 | 精品国产精品久久一区免费式 | 亚洲精品中文字幕 | 97夜夜澡人人爽人人喊中国片 | 领导边摸边吃奶边做爽在线观看 | 久久无码专区国产精品s | 欧美野外疯狂做受xxxx高潮 | 一区二区三区乱码在线 | 欧洲 | 亚洲欧美日韩成人高清在线一区 | 国产人妻人伦精品 | 国产精品99爱免费视频 | 欧洲熟妇色 欧美 | 午夜性刺激在线视频免费 | 任你躁在线精品免费 | 婷婷丁香六月激情综合啪 | 亚洲精品中文字幕乱码 | 国产97在线 | 亚洲 | 真人与拘做受免费视频一 | 波多野结衣乳巨码无在线观看 | 亚洲日韩精品欧美一区二区 | 久久久久久久女国产乱让韩 | 国内精品久久久久久中文字幕 | 国产极品美女高潮无套在线观看 | 人妻夜夜爽天天爽三区 | 国产绳艺sm调教室论坛 | 波多野结衣av在线观看 | 欧美日韩视频无码一区二区三 | 久久亚洲精品成人无码 | 国产精品二区一区二区aⅴ污介绍 | 兔费看少妇性l交大片免费 | 亚洲日韩精品欧美一区二区 | 国产香蕉尹人视频在线 | 高潮毛片无遮挡高清免费视频 | 亚洲日韩乱码中文无码蜜桃臀网站 | 无码人妻少妇伦在线电影 | 亚洲综合在线一区二区三区 | 波多野结衣一区二区三区av免费 | 欧美日本日韩 | 久久99精品久久久久婷婷 | 日韩精品无码免费一区二区三区 | 婷婷色婷婷开心五月四房播播 | 国产一区二区三区精品视频 | 久久午夜无码鲁丝片 | 熟女俱乐部五十路六十路av | 午夜精品久久久久久久 | 精品厕所偷拍各类美女tp嘘嘘 | 久久综合狠狠综合久久综合88 | 又黄又爽又色的视频 | 狠狠色色综合网站 | 激情亚洲一区国产精品 | 免费视频欧美无人区码 | 日日橹狠狠爱欧美视频 | 丝袜美腿亚洲一区二区 | 黑人巨大精品欧美黑寡妇 | 亚洲综合精品香蕉久久网 | 久久综合久久自在自线精品自 | 国产明星裸体无码xxxx视频 | 亚洲精品午夜国产va久久成人 | 久久这里只有精品视频9 | 黑人巨大精品欧美一区二区 | 任你躁国产自任一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 国产激情无码一区二区app | 国内精品久久久久久中文字幕 | 六月丁香婷婷色狠狠久久 | 欧美日本免费一区二区三区 | 老熟妇仑乱视频一区二区 | 国产成人无码av片在线观看不卡 | 蜜臀av无码人妻精品 | а天堂中文在线官网 | 熟女俱乐部五十路六十路av | 国产精品多人p群无码 | 亚洲毛片av日韩av无码 | 午夜精品久久久久久久 | 欧美激情内射喷水高潮 | 99久久无码一区人妻 | 欧美黑人性暴力猛交喷水 | 精品午夜福利在线观看 | 久热国产vs视频在线观看 | 欧美国产日韩久久mv | 激情综合激情五月俺也去 | 久久国产精品偷任你爽任你 | 国产精品.xx视频.xxtv | 中文字幕av日韩精品一区二区 | 亚洲精品成人福利网站 | 夜夜夜高潮夜夜爽夜夜爰爰 | 又大又黄又粗又爽的免费视频 | 欧美肥老太牲交大战 | 2020久久超碰国产精品最新 | 又紧又大又爽精品一区二区 | 99久久无码一区人妻 | 乱人伦人妻中文字幕无码 | 四虎4hu永久免费 | 无码av最新清无码专区吞精 | 精品无码成人片一区二区98 | 97久久精品无码一区二区 | 88国产精品欧美一区二区三区 | 国产凸凹视频一区二区 | 久久精品女人天堂av免费观看 | √天堂中文官网8在线 | 欧美日韩久久久精品a片 | 大胆欧美熟妇xx | 国产激情无码一区二区app | 亚洲中文字幕无码中文字在线 | 亚洲性无码av中文字幕 | 亚洲乱亚洲乱妇50p | 亚洲 日韩 欧美 成人 在线观看 | 国産精品久久久久久久 | 无码人妻出轨黑人中文字幕 | 国产免费无码一区二区视频 | 高潮毛片无遮挡高清免费视频 | 国产口爆吞精在线视频 | 欧美三级不卡在线观看 | 又大又硬又黄的免费视频 | 人人妻人人澡人人爽欧美精品 | 国产莉萝无码av在线播放 | 中文字幕无码av波多野吉衣 | 午夜嘿嘿嘿影院 | 成人影院yy111111在线观看 | 国产激情艳情在线看视频 | 精品aⅴ一区二区三区 | 激情爆乳一区二区三区 | 亚洲精品久久久久avwww潮水 | 久久久精品成人免费观看 | 精品亚洲韩国一区二区三区 | 男人和女人高潮免费网站 | 久久精品国产大片免费观看 | 国产高清不卡无码视频 | 欧美喷潮久久久xxxxx | 奇米影视888欧美在线观看 | 55夜色66夜色国产精品视频 | 欧美人与动性行为视频 | 成人免费无码大片a毛片 | 国产精品内射视频免费 | 少妇人妻av毛片在线看 | 女人被爽到呻吟gif动态图视看 | 无码免费一区二区三区 | 久久精品中文字幕大胸 | 玩弄少妇高潮ⅹxxxyw | 77777熟女视频在线观看 а天堂中文在线官网 | а√天堂www在线天堂小说 | 人人妻人人澡人人爽人人精品浪潮 | 国产精品人人爽人人做我的可爱 | 国产欧美精品一区二区三区 | 88国产精品欧美一区二区三区 | 国产亚洲人成在线播放 | 老子影院午夜伦不卡 | 欧美国产日韩亚洲中文 | 久久综合久久自在自线精品自 | 日韩精品成人一区二区三区 | 精品无人国产偷自产在线 | 日本肉体xxxx裸交 | 麻豆md0077饥渴少妇 | 夜夜躁日日躁狠狠久久av | 亚洲日韩一区二区三区 | 欧美日韩人成综合在线播放 | 2020久久超碰国产精品最新 | 在线精品国产一区二区三区 | 精品aⅴ一区二区三区 | 亚洲爆乳精品无码一区二区三区 | 全黄性性激高免费视频 | 男女性色大片免费网站 | 妺妺窝人体色www婷婷 | 国产凸凹视频一区二区 | 精品国产一区av天美传媒 | 最近免费中文字幕中文高清百度 | 大屁股大乳丰满人妻 | 亚洲爆乳无码专区 | 国产精品福利视频导航 | 日本精品人妻无码免费大全 | 日本高清一区免费中文视频 | 国产成人亚洲综合无码 | 亚洲人亚洲人成电影网站色 | 欧美成人午夜精品久久久 | 丰满少妇女裸体bbw | 欧美日韩在线亚洲综合国产人 | 男人扒开女人内裤强吻桶进去 | 国产人妻人伦精品1国产丝袜 | 日本精品久久久久中文字幕 | 在线欧美精品一区二区三区 | 国产激情艳情在线看视频 | 天堂а√在线地址中文在线 | av在线亚洲欧洲日产一区二区 | 亚洲区小说区激情区图片区 | 久久综合给合久久狠狠狠97色 | 无码播放一区二区三区 | 一个人看的视频www在线 | 国产成人av免费观看 | 最新国产乱人伦偷精品免费网站 | 性欧美熟妇videofreesex | 国产精品对白交换视频 | 国产成人无码av在线影院 | 四虎4hu永久免费 | 国产精品人妻一区二区三区四 | 天堂а√在线地址中文在线 | 天堂亚洲免费视频 | 亚洲中文字幕成人无码 | 国产熟妇另类久久久久 | 成人一区二区免费视频 | 无码午夜成人1000部免费视频 | 图片区 小说区 区 亚洲五月 | 国产精品igao视频网 | 欧美日韩视频无码一区二区三 | 无码成人精品区在线观看 | 全球成人中文在线 | 亚洲精品一区二区三区四区五区 | 精品久久8x国产免费观看 | 玩弄人妻少妇500系列视频 | 亚洲成av人片在线观看无码不卡 | 中文字幕无码日韩欧毛 | 久久人人爽人人爽人人片ⅴ | 亚洲一区二区三区 | 日日摸夜夜摸狠狠摸婷婷 | 国产精品无码一区二区桃花视频 | 亚洲一区二区三区国产精华液 | 少妇无码av无码专区在线观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 性生交片免费无码看人 | 国产精品igao视频网 | 六月丁香婷婷色狠狠久久 | 国产精品人人妻人人爽 | 无套内谢的新婚少妇国语播放 | 亚洲 激情 小说 另类 欧美 | 亚洲日本一区二区三区在线 | 亚洲色欲色欲天天天www | 精品成在人线av无码免费看 | 黑人大群体交免费视频 | 亚洲欧美中文字幕5发布 | 无遮挡啪啪摇乳动态图 | 秋霞特色aa大片 | 久久久久av无码免费网 | 午夜免费福利小电影 | 久久久久久av无码免费看大片 | 99久久久国产精品无码免费 | 伊人久久大香线蕉午夜 | 日本丰满护士爆乳xxxx | 久久人人97超碰a片精品 | 亚洲国产欧美日韩精品一区二区三区 | 狠狠色欧美亚洲狠狠色www | 免费视频欧美无人区码 | 亚洲狠狠婷婷综合久久 | 综合人妻久久一区二区精品 | 日本www一道久久久免费榴莲 | 久久亚洲日韩精品一区二区三区 | 国产香蕉97碰碰久久人人 | 久久国产36精品色熟妇 | 亚洲爆乳精品无码一区二区三区 | 国产在线精品一区二区三区直播 | 俄罗斯老熟妇色xxxx | 国产性生交xxxxx无码 | 精品少妇爆乳无码av无码专区 | 99久久婷婷国产综合精品青草免费 | 永久免费观看国产裸体美女 | 国产精品人人妻人人爽 | av香港经典三级级 在线 | 日本精品少妇一区二区三区 | 一个人看的www免费视频在线观看 | 国产精品亚洲а∨无码播放麻豆 | 亚洲欧美国产精品久久 | 扒开双腿吃奶呻吟做受视频 | 国产精品视频免费播放 | 国产精品无码一区二区桃花视频 | 久久99精品国产.久久久久 | 中文字幕人妻无码一区二区三区 | a在线观看免费网站大全 | 国产艳妇av在线观看果冻传媒 | 欧美zoozzooz性欧美 | 久久午夜无码鲁丝片午夜精品 | 欧美喷潮久久久xxxxx | 国产乱子伦视频在线播放 | 国产人妻精品一区二区三区不卡 | 2019nv天堂香蕉在线观看 | 理论片87福利理论电影 | 日韩人妻无码中文字幕视频 | 日韩成人一区二区三区在线观看 | 99视频精品全部免费免费观看 | 久久视频在线观看精品 | 色窝窝无码一区二区三区色欲 | 美女极度色诱视频国产 | 国产亚洲精品精品国产亚洲综合 | 色综合视频一区二区三区 | 国产精品.xx视频.xxtv | 精品成在人线av无码免费看 | 亚洲国产成人a精品不卡在线 | 天堂在线观看www | 99久久婷婷国产综合精品青草免费 | 精品国产青草久久久久福利 | 88国产精品欧美一区二区三区 | 久久国内精品自在自线 | 九九在线中文字幕无码 | 国产极品美女高潮无套在线观看 | 久久99精品久久久久久 | 国产三级精品三级男人的天堂 | 亚洲人成影院在线观看 | 无码av最新清无码专区吞精 | 欧美人与禽猛交狂配 | 久久熟妇人妻午夜寂寞影院 | 国产精品久久久午夜夜伦鲁鲁 | 国产热a欧美热a在线视频 | 国内揄拍国内精品人妻 | 国产无套粉嫩白浆在线 | 国产精品人妻一区二区三区四 | 精品久久8x国产免费观看 | 丰满人妻翻云覆雨呻吟视频 | 国产成人人人97超碰超爽8 | 久久www免费人成人片 | 国产亚洲人成a在线v网站 | 波多野结衣 黑人 | 亚洲欧美中文字幕5发布 | 国产美女极度色诱视频www | 牲欲强的熟妇农村老妇女视频 | 国产精品久久久久无码av色戒 | 宝宝好涨水快流出来免费视频 | 奇米影视888欧美在线观看 | 国产精品久久久久久亚洲影视内衣 | 国产人妻精品午夜福利免费 | 亚洲综合在线一区二区三区 | 国产午夜无码精品免费看 | 无码人妻少妇伦在线电影 | 国产在热线精品视频 | 亚洲日本va中文字幕 | 欧美xxxxx精品 | 亚洲国产精品毛片av不卡在线 | 中国大陆精品视频xxxx | 又色又爽又黄的美女裸体网站 | aa片在线观看视频在线播放 | 久久综合狠狠综合久久综合88 | 免费无码肉片在线观看 | 精品无码一区二区三区的天堂 | 领导边摸边吃奶边做爽在线观看 | 一二三四社区在线中文视频 | 中文字幕久久久久人妻 | 国产成人综合在线女婷五月99播放 | 久久久精品成人免费观看 | 四虎影视成人永久免费观看视频 | 国产精品.xx视频.xxtv | 久久综合网欧美色妞网 | 对白脏话肉麻粗话av | a在线亚洲男人的天堂 | 亚洲精品午夜无码电影网 | 乱人伦人妻中文字幕无码久久网 | 亚洲午夜久久久影院 | 亚洲区小说区激情区图片区 | 国产无套内射久久久国产 | 性做久久久久久久久 | 久久精品国产日本波多野结衣 | 欧美放荡的少妇 | 中文无码成人免费视频在线观看 | 国产内射爽爽大片视频社区在线 | 露脸叫床粗话东北少妇 | 老司机亚洲精品影院无码 | 亚洲国产一区二区三区在线观看 | 午夜精品久久久久久久久 | 国产一区二区三区四区五区加勒比 | 青青草原综合久久大伊人精品 | 欧美日韩一区二区三区自拍 | 狠狠色噜噜狠狠狠7777奇米 | 日本精品人妻无码77777 天堂一区人妻无码 | 131美女爱做视频 | 久久久久久九九精品久 | 国产美女极度色诱视频www | 精品无码国产自产拍在线观看蜜 | 国内精品一区二区三区不卡 | 国产成人无码av片在线观看不卡 | 久久天天躁狠狠躁夜夜免费观看 | 一本久道久久综合狠狠爱 | 国产午夜福利100集发布 | 国产高清不卡无码视频 | 久久久www成人免费毛片 | 国产精品亚洲一区二区三区喷水 | 日本一本二本三区免费 | 99riav国产精品视频 | 亚洲七七久久桃花影院 | 中文字幕日韩精品一区二区三区 | 欧美真人作爱免费视频 | 午夜无码人妻av大片色欲 | 成 人 网 站国产免费观看 | 国产精品多人p群无码 | 欧美黑人性暴力猛交喷水 | 又湿又紧又大又爽a视频国产 | 成人aaa片一区国产精品 | 全黄性性激高免费视频 | 成人毛片一区二区 | 国产亲子乱弄免费视频 | 国产无遮挡吃胸膜奶免费看 | 99久久久无码国产aaa精品 | 国产精品久久久午夜夜伦鲁鲁 | 少妇性俱乐部纵欲狂欢电影 | 清纯唯美经典一区二区 | 国产一区二区不卡老阿姨 | 国产九九九九九九九a片 | 午夜福利试看120秒体验区 | 久久精品成人欧美大片 | 国产成人亚洲综合无码 | 亚洲理论电影在线观看 | 精品无码一区二区三区爱欲 | 午夜免费福利小电影 | 久久精品99久久香蕉国产色戒 | 免费观看激色视频网站 | 2019午夜福利不卡片在线 | 久久精品国产日本波多野结衣 | 国产亚洲精品久久久闺蜜 | 亚洲啪av永久无码精品放毛片 | 日本一区二区三区免费播放 | 亚洲男人av香蕉爽爽爽爽 | 丝袜足控一区二区三区 | 国产精华av午夜在线观看 | 国产午夜视频在线观看 | 久久综合九色综合97网 | 小泽玛莉亚一区二区视频在线 | 波多野结衣一区二区三区av免费 | 国产成人无码av片在线观看不卡 | 特级做a爰片毛片免费69 | 在线亚洲高清揄拍自拍一品区 | 国产精品无套呻吟在线 | 中文字幕无线码免费人妻 | 欧美成人家庭影院 | 色 综合 欧美 亚洲 国产 | 精品无码国产自产拍在线观看蜜 | 国产欧美熟妇另类久久久 | 午夜精品一区二区三区在线观看 | 国产成人无码av在线影院 | 色欲综合久久中文字幕网 | 一本大道久久东京热无码av | 人妻少妇精品无码专区动漫 | 国产精品无码mv在线观看 | 性史性农村dvd毛片 | 丰满人妻精品国产99aⅴ | 草草网站影院白丝内射 | 国产一精品一av一免费 | 综合人妻久久一区二区精品 | 亚洲aⅴ无码成人网站国产app | 日本成熟视频免费视频 | 沈阳熟女露脸对白视频 | 亚洲欧美精品aaaaaa片 | 日韩在线不卡免费视频一区 | 97精品人妻一区二区三区香蕉 | 精品无码av一区二区三区 | 国产精品高潮呻吟av久久4虎 | 丝袜足控一区二区三区 | 在线视频网站www色 | 又紧又大又爽精品一区二区 | 亚洲色在线无码国产精品不卡 | 国产av人人夜夜澡人人爽麻豆 | 国产亚洲精品久久久久久大师 | 成人精品天堂一区二区三区 | 欧美精品国产综合久久 | 色欲综合久久中文字幕网 | 又湿又紧又大又爽a视频国产 | 精品成人av一区二区三区 | 成人免费无码大片a毛片 | 欧美成人高清在线播放 | 在线a亚洲视频播放在线观看 | 成人女人看片免费视频放人 | 九九久久精品国产免费看小说 | 成人一在线视频日韩国产 | 久久国产自偷自偷免费一区调 | 少妇无码吹潮 | 亚洲一区二区三区播放 | 少妇无套内谢久久久久 | 国产成人一区二区三区别 | 色老头在线一区二区三区 | 日韩人妻无码中文字幕视频 | 男女爱爱好爽视频免费看 | 四十如虎的丰满熟妇啪啪 | 精品国产一区二区三区av 性色 | 欧美日韩综合一区二区三区 | 国产又粗又硬又大爽黄老大爷视 | 性欧美牲交在线视频 | 亚洲人成人无码网www国产 | 欧美 亚洲 国产 另类 | 少妇的肉体aa片免费 | 兔费看少妇性l交大片免费 | 强辱丰满人妻hd中文字幕 | 成人免费无码大片a毛片 | 内射欧美老妇wbb | 国产肉丝袜在线观看 | 青春草在线视频免费观看 | 欧美日韩色另类综合 | 中文字幕中文有码在线 | 日本丰满护士爆乳xxxx | 四虎永久在线精品免费网址 | 中文字幕无码日韩专区 | 国产亚av手机在线观看 | 国产绳艺sm调教室论坛 | 2019nv天堂香蕉在线观看 | 内射巨臀欧美在线视频 | 国产超碰人人爽人人做人人添 | 亚洲 另类 在线 欧美 制服 | 在线观看欧美一区二区三区 | 国产午夜福利100集发布 | 欧美成人午夜精品久久久 | 国产小呦泬泬99精品 | 东北女人啪啪对白 | 精品一区二区三区无码免费视频 | 女人被男人爽到呻吟的视频 | 午夜时刻免费入口 | а√天堂www在线天堂小说 | 国语自产偷拍精品视频偷 | 日本欧美一区二区三区乱码 | 美女毛片一区二区三区四区 | 亚洲色无码一区二区三区 | 精品国产国产综合精品 | 丝袜 中出 制服 人妻 美腿 | 国产成人精品优优av | 久久精品99久久香蕉国产色戒 | 亚洲精品国产第一综合99久久 | 久久久精品成人免费观看 | 亚洲中文字幕无码中文字在线 | 国内精品人妻无码久久久影院蜜桃 | 亚洲成av人影院在线观看 | 曰韩少妇内射免费播放 | 成人女人看片免费视频放人 | 国产卡一卡二卡三 | 欧美国产日韩久久mv | 国产成人久久精品流白浆 | 乱人伦中文视频在线观看 | a国产一区二区免费入口 | 性欧美疯狂xxxxbbbb | 成年美女黄网站色大免费全看 | 正在播放老肥熟妇露脸 | 日韩精品乱码av一区二区 | 亚洲综合色区中文字幕 | 久久精品国产日本波多野结衣 | 免费播放一区二区三区 | 国产九九九九九九九a片 | 久久熟妇人妻午夜寂寞影院 | 日本精品高清一区二区 | 色老头在线一区二区三区 | 免费中文字幕日韩欧美 | 成人精品视频一区二区三区尤物 | 伊人久久大香线蕉亚洲 | 国产精品无码久久av | 亚洲熟熟妇xxxx | 麻花豆传媒剧国产免费mv在线 | 人妻无码久久精品人妻 | 全球成人中文在线 | 欧美性生交活xxxxxdddd | 中文字幕无码免费久久99 | 麻豆国产人妻欲求不满谁演的 | 天天做天天爱天天爽综合网 | 国产精品久免费的黄网站 | 在线 国产 欧美 亚洲 天堂 | 乱码av麻豆丝袜熟女系列 | 夜夜影院未满十八勿进 | 亚洲精品国偷拍自产在线麻豆 | 国产另类ts人妖一区二区 | 5858s亚洲色大成网站www | 亚洲欧美日韩成人高清在线一区 | 中文字幕人妻丝袜二区 | 亚洲精品一区二区三区婷婷月 | 午夜嘿嘿嘿影院 | 精品熟女少妇av免费观看 | 4hu四虎永久在线观看 | 欧美一区二区三区视频在线观看 | 日本肉体xxxx裸交 | 国内精品久久毛片一区二区 | 国产内射老熟女aaaa | 久久久久se色偷偷亚洲精品av | 亚洲成a人一区二区三区 | 亚洲色欲色欲天天天www | 一区二区三区乱码在线 | 欧洲 | 国产一区二区不卡老阿姨 | 无码人妻丰满熟妇区毛片18 | 中文精品久久久久人妻不卡 | 四虎国产精品一区二区 | 国产精品久久久午夜夜伦鲁鲁 | 人人妻人人藻人人爽欧美一区 | 高清国产亚洲精品自在久久 | 一本久道久久综合婷婷五月 | 妺妺窝人体色www婷婷 | 熟妇人妻无乱码中文字幕 | 午夜福利电影 | 精品国产一区av天美传媒 | 国产激情一区二区三区 | 九九久久精品国产免费看小说 | 我要看www免费看插插视频 | 久久五月精品中文字幕 | 99国产精品白浆在线观看免费 | 夫妻免费无码v看片 | 精品人人妻人人澡人人爽人人 | 人妻少妇精品视频专区 | 99国产精品白浆在线观看免费 | 日本精品高清一区二区 | 国产麻豆精品一区二区三区v视界 | 中文字幕无码人妻少妇免费 | 国产精品沙发午睡系列 | 久久久久国色av免费观看性色 | 日本一卡2卡3卡四卡精品网站 | 欧美老妇与禽交 | 性欧美熟妇videofreesex | 久9re热视频这里只有精品 | 内射爽无广熟女亚洲 | 装睡被陌生人摸出水好爽 | 免费国产黄网站在线观看 | 久久亚洲精品中文字幕无男同 | 丰满护士巨好爽好大乳 | 一本久道久久综合狠狠爱 | 一个人看的视频www在线 | 欧美老熟妇乱xxxxx | 东北女人啪啪对白 | 亚洲精品国产精品乱码不卡 | 中文字幕 亚洲精品 第1页 | 岛国片人妻三上悠亚 | 两性色午夜视频免费播放 | 欧美日本精品一区二区三区 | 无码人妻av免费一区二区三区 | 国产偷国产偷精品高清尤物 | 午夜男女很黄的视频 | a国产一区二区免费入口 | 亚洲男人av香蕉爽爽爽爽 | 久久久av男人的天堂 | 色妞www精品免费视频 | 一本大道伊人av久久综合 | 天干天干啦夜天干天2017 | 人妻有码中文字幕在线 | 精品无人区无码乱码毛片国产 | 精品国产一区二区三区四区在线看 | 香蕉久久久久久av成人 | 国产亚洲欧美日韩亚洲中文色 | 亚洲七七久久桃花影院 | 国产人妻久久精品二区三区老狼 | 99久久精品日本一区二区免费 | 久久99精品国产.久久久久 | 精品国精品国产自在久国产87 | 日韩无套无码精品 | 婷婷丁香六月激情综合啪 | 亚洲色偷偷偷综合网 | 国产av一区二区三区最新精品 | 性生交大片免费看女人按摩摩 | 亚洲成av人片天堂网无码】 | 国产偷抇久久精品a片69 | 自拍偷自拍亚洲精品10p | 一本色道婷婷久久欧美 | 国内精品人妻无码久久久影院 | 18禁黄网站男男禁片免费观看 | 正在播放老肥熟妇露脸 | 乌克兰少妇性做爰 | 国产成人精品久久亚洲高清不卡 | 国产综合在线观看 | 一个人看的视频www在线 | 澳门永久av免费网站 | 人妻少妇被猛烈进入中文字幕 | 综合网日日天干夜夜久久 | 性色欲情网站iwww九文堂 | 又大又硬又爽免费视频 | 国产激情精品一区二区三区 | 国产又粗又硬又大爽黄老大爷视 | 蜜桃无码一区二区三区 | 久久久婷婷五月亚洲97号色 | 午夜肉伦伦影院 | 欧美高清在线精品一区 | 一本久道久久综合婷婷五月 | 国产两女互慰高潮视频在线观看 | 日本免费一区二区三区最新 | 亚洲精品午夜国产va久久成人 | 领导边摸边吃奶边做爽在线观看 | 无码人妻av免费一区二区三区 | 人人妻人人藻人人爽欧美一区 | 日韩亚洲欧美精品综合 | 又大又黄又粗又爽的免费视频 | 99久久精品无码一区二区毛片 | 又大又硬又爽免费视频 | а√资源新版在线天堂 | www一区二区www免费 | 国产猛烈高潮尖叫视频免费 | 98国产精品综合一区二区三区 | 无码午夜成人1000部免费视频 | 欧美成人免费全部网站 | 露脸叫床粗话东北少妇 | 亚洲综合无码一区二区三区 | 天天躁夜夜躁狠狠是什么心态 | 5858s亚洲色大成网站www | 丰满妇女强制高潮18xxxx | 狂野欧美激情性xxxx | 国产人妻久久精品二区三区老狼 | 国产情侣作爱视频免费观看 | 88国产精品欧美一区二区三区 | 国产黑色丝袜在线播放 | 亚洲精品午夜国产va久久成人 | 国产无遮挡又黄又爽又色 | 日本va欧美va欧美va精品 | 久久午夜无码鲁丝片 | 在线亚洲高清揄拍自拍一品区 | 久久精品国产一区二区三区 | 国产手机在线αⅴ片无码观看 | 99在线 | 亚洲 | 亚洲の无码国产の无码步美 | 欧美精品一区二区精品久久 | 男女猛烈xx00免费视频试看 | 精品人妻人人做人人爽 | 色窝窝无码一区二区三区色欲 | 又大又硬又黄的免费视频 | 任你躁国产自任一区二区三区 | 国内综合精品午夜久久资源 | 荫蒂添的好舒服视频囗交 | 精品熟女少妇av免费观看 | 欧美日韩综合一区二区三区 | 麻豆av传媒蜜桃天美传媒 | 日产精品高潮呻吟av久久 | 日韩精品无码一本二本三本色 | 欧美老人巨大xxxx做受 | 牲欲强的熟妇农村老妇女 | 一区二区三区乱码在线 | 欧洲 | 美女张开腿让人桶 | 国产精品亚洲一区二区三区喷水 | 在线播放无码字幕亚洲 | 国产熟妇另类久久久久 | 噜噜噜亚洲色成人网站 | 午夜精品一区二区三区在线观看 | 免费国产黄网站在线观看 | 国产艳妇av在线观看果冻传媒 | 国产综合久久久久鬼色 | 影音先锋中文字幕无码 | 亚洲国产精品久久久久久 | 国产在线aaa片一区二区99 | 亲嘴扒胸摸屁股激烈网站 | 国产精品99久久精品爆乳 | 亚洲国产精华液网站w | 伊人久久大香线焦av综合影院 | 1000部夫妻午夜免费 | 亚洲精品一区二区三区大桥未久 | 久激情内射婷内射蜜桃人妖 | 国产精品久久久一区二区三区 | 欧美成人家庭影院 | 装睡被陌生人摸出水好爽 | 亚洲精品久久久久中文第一幕 | 精品亚洲成av人在线观看 | 国内精品久久久久久中文字幕 | 亚洲色偷偷偷综合网 | 黑人玩弄人妻中文在线 | 国产成人精品无码播放 | 欧美日韩亚洲国产精品 | 久久午夜无码鲁丝片午夜精品 | 精品人妻人人做人人爽夜夜爽 | 欧美熟妇另类久久久久久不卡 | 日本精品人妻无码免费大全 | 青青青爽视频在线观看 | 国产无遮挡又黄又爽免费视频 | ass日本丰满熟妇pics | 亚洲成av人片在线观看无码不卡 | 成人欧美一区二区三区黑人 | 妺妺窝人体色www在线小说 | 欧美刺激性大交 | 天堂а√在线地址中文在线 | 中文字幕无码视频专区 | 日韩人妻无码中文字幕视频 | 亚洲人成影院在线无码按摩店 | 免费无码肉片在线观看 | 暴力强奷在线播放无码 | 国产精品久久国产三级国 | 特黄特色大片免费播放器图片 | 亚洲欧美国产精品专区久久 | 老熟妇仑乱视频一区二区 | 四虎影视成人永久免费观看视频 | 最近中文2019字幕第二页 | 精品欧洲av无码一区二区三区 | 性开放的女人aaa片 | 无码av免费一区二区三区试看 | 国产精品无码久久av | 女人色极品影院 | 图片小说视频一区二区 | 99re在线播放 | 人妻少妇精品无码专区二区 | 无码人妻黑人中文字幕 | 美女扒开屁股让男人桶 | 国产性生大片免费观看性 | 性做久久久久久久久 | 波多野结衣一区二区三区av免费 | 自拍偷自拍亚洲精品10p | 超碰97人人做人人爱少妇 | 好爽又高潮了毛片免费下载 | 久久亚洲精品成人无码 | 久久精品国产日本波多野结衣 | 无码人妻久久一区二区三区不卡 | 中文字幕无码av激情不卡 | 熟女少妇在线视频播放 | 国产激情无码一区二区app | 美女极度色诱视频国产 | 欧美阿v高清资源不卡在线播放 | 国产精品人人爽人人做我的可爱 | 亚洲成色www久久网站 | 亚洲国产精品一区二区第一页 | 5858s亚洲色大成网站www | 久久亚洲中文字幕精品一区 | 日韩亚洲欧美精品综合 | 十八禁真人啪啪免费网站 | 大地资源网第二页免费观看 | 欧美亚洲日韩国产人成在线播放 | 国产人妻人伦精品 | 久久久久久亚洲精品a片成人 | 欧美xxxx黑人又粗又长 | 国产精品久久久一区二区三区 | 最近免费中文字幕中文高清百度 | 老熟妇乱子伦牲交视频 | 一个人免费观看的www视频 | 精品无人区无码乱码毛片国产 | 国精产品一区二区三区 | aⅴ亚洲 日韩 色 图网站 播放 | 国产精品二区一区二区aⅴ污介绍 | 国产精品二区一区二区aⅴ污介绍 | 无码精品国产va在线观看dvd | 精品国产一区二区三区四区在线看 | 激情五月综合色婷婷一区二区 | 精品亚洲成av人在线观看 | 日本一区二区更新不卡 | 亚洲男人av香蕉爽爽爽爽 | 天堂一区人妻无码 | 妺妺窝人体色www在线小说 | 中国女人内谢69xxxxxa片 | 国产精品自产拍在线观看 | 一本久久a久久精品亚洲 | 日韩人妻系列无码专区 | 精品熟女少妇av免费观看 | www国产亚洲精品久久久日本 | 麻豆av传媒蜜桃天美传媒 | 午夜丰满少妇性开放视频 | 亚洲精品中文字幕乱码 | 亚洲理论电影在线观看 | 女人被男人爽到呻吟的视频 | 麻豆国产人妻欲求不满谁演的 | 精品 日韩 国产 欧美 视频 | 秋霞成人午夜鲁丝一区二区三区 | 免费男性肉肉影院 | 久久伊人色av天堂九九小黄鸭 | 人人澡人人透人人爽 | 精品久久久无码中文字幕 | 国产精品久久久一区二区三区 | 亚洲欧洲日本综合aⅴ在线 | 97无码免费人妻超级碰碰夜夜 | 99久久精品无码一区二区毛片 | 国精产品一区二区三区 | 亚洲国产成人a精品不卡在线 | 国产一区二区不卡老阿姨 | 国产亚洲精品久久久久久久久动漫 | 岛国片人妻三上悠亚 | 在线视频网站www色 | 久久久久av无码免费网 | 精品人妻人人做人人爽夜夜爽 | 亚洲狠狠色丁香婷婷综合 | 狂野欧美性猛交免费视频 | 香蕉久久久久久av成人 | 亚洲色偷偷男人的天堂 | 98国产精品综合一区二区三区 | 久久精品中文字幕大胸 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产精品无码mv在线观看 | 亚洲热妇无码av在线播放 | 国产精品二区一区二区aⅴ污介绍 | 中文无码伦av中文字幕 | 国产黄在线观看免费观看不卡 | 女人高潮内射99精品 | 六月丁香婷婷色狠狠久久 | 人妻少妇精品无码专区动漫 | 欧美一区二区三区视频在线观看 | 欧美日本免费一区二区三区 | 人人爽人人澡人人高潮 | 久久久精品人妻久久影视 | 久久人人97超碰a片精品 | 天堂а√在线地址中文在线 | 久久久av男人的天堂 | 国产亚洲美女精品久久久2020 | 岛国片人妻三上悠亚 | 国色天香社区在线视频 | 国产在线aaa片一区二区99 | 国产精品对白交换视频 | 久久人人爽人人爽人人片av高清 | 亚洲成av人片在线观看无码不卡 | 国内精品人妻无码久久久影院蜜桃 | 亚洲欧美精品aaaaaa片 | 老司机亚洲精品影院无码 | 疯狂三人交性欧美 | 人人妻人人藻人人爽欧美一区 | 在线播放亚洲第一字幕 | 亚洲精品综合一区二区三区在线 | 国产精品-区区久久久狼 | 亚洲无人区一区二区三区 | 国产在线aaa片一区二区99 | 亚洲精品久久久久久一区二区 | 国产97人人超碰caoprom | 欧美日韩综合一区二区三区 | 亚洲 激情 小说 另类 欧美 | 亚洲成色www久久网站 | 国产莉萝无码av在线播放 | 日产精品99久久久久久 | 97人妻精品一区二区三区 | 亚洲国产精品美女久久久久 | 久久精品国产一区二区三区肥胖 | 国产69精品久久久久app下载 | 麻豆国产97在线 | 欧洲 | 色综合久久88色综合天天 | 久久伊人色av天堂九九小黄鸭 | 久久精品国产一区二区三区 | 国产精品香蕉在线观看 | 久久久精品人妻久久影视 | 亚洲熟妇色xxxxx欧美老妇y | 无套内射视频囯产 | 俺去俺来也www色官网 | 99riav国产精品视频 | 99精品无人区乱码1区2区3区 | 亚洲男人av天堂午夜在 | 久久久久人妻一区精品色欧美 | 亚洲va欧美va天堂v国产综合 | 欧美精品国产综合久久 | 奇米影视888欧美在线观看 | 国产情侣作爱视频免费观看 | 乱中年女人伦av三区 | 久久精品女人的天堂av | 人人妻人人澡人人爽人人精品浪潮 | 久久国内精品自在自线 | 麻豆成人精品国产免费 | 亚洲爆乳精品无码一区二区三区 | 最近免费中文字幕中文高清百度 | 亚洲区欧美区综合区自拍区 | 亚洲成色在线综合网站 | 波多野结衣高清一区二区三区 | 中文无码成人免费视频在线观看 | 欧洲熟妇精品视频 | 无码精品人妻一区二区三区av | 暴力强奷在线播放无码 | 亚洲国产午夜精品理论片 | 国产午夜视频在线观看 | 亚洲中文字幕在线观看 | 99久久久国产精品无码免费 | 国产成人综合美国十次 | 国产av一区二区三区最新精品 | 天堂а√在线中文在线 | 激情内射日本一区二区三区 | 人妻少妇精品无码专区二区 | 日本精品久久久久中文字幕 | 乱人伦人妻中文字幕无码久久网 | 天干天干啦夜天干天2017 | 午夜熟女插插xx免费视频 | 欧美人与牲动交xxxx | 麻豆精品国产精华精华液好用吗 | 狠狠噜狠狠狠狠丁香五月 | 国产国产精品人在线视 | 香蕉久久久久久av成人 | 欧美午夜特黄aaaaaa片 | 性色欲网站人妻丰满中文久久不卡 |