Unity性能優(yōu)化
1.lod是什么,優(yōu)缺點(diǎn)是什么
LOD技術(shù)即 Levels of Detail 的簡(jiǎn)稱(chēng),意為多細(xì)節(jié)層次隧甚。LOD 技術(shù)指根據(jù)物體模型的節(jié)點(diǎn)在顯示環(huán)境中所處的位置和重要度代赁,決定物體渲染的資源分配缆镣,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算犹赖。
優(yōu)點(diǎn):可根據(jù)距離動(dòng)態(tài)地選擇渲染不同細(xì)節(jié)的模型
缺點(diǎn):加重美工的負(fù)擔(dān)队他,要準(zhǔn)備不同細(xì)節(jié)的同一模型,同樣的會(huì)稍微增加游戲的容量峻村。
2.MipMap是什么麸折?作用?
在三維計(jì)算機(jī)圖形的貼圖渲染中有一個(gè)常用的技術(shù)被稱(chēng)為Mipmapping粘昨。為了加快渲染速度和減少圖像鋸齒垢啼,貼圖被處理成由一系列被預(yù)先計(jì)算和優(yōu)化過(guò)的圖片組成的文件,這樣的貼圖被稱(chēng)為 MIP map 或者 mipmap。
3.當(dāng)游戲中需要頻繁創(chuàng)建一個(gè)物體對(duì)象時(shí)张肾,我們需要怎么做來(lái)節(jié)省內(nèi)存芭析。
做一個(gè)pool,游戲開(kāi)始時(shí)預(yù)先實(shí)例化足夠的數(shù)量吞瞪,然后用的時(shí)候取不用的時(shí)候收回
4.如何優(yōu)化內(nèi)存馁启?
有很多種方式,例如
1.壓縮自帶類(lèi)庫(kù)芍秆;
2.將暫時(shí)不用的以后還需要使用的物體隱藏起來(lái)而不是直接 Destroy 掉惯疙;
3.釋放 AssetBundle 占用的資源;
4.降低模型的片面數(shù)妖啥,降低模型的骨骼數(shù)量霉颠,降低貼圖的大小荆虱;
5.使用光照貼圖掉分,使用多層次細(xì)節(jié)(LOD),使用著色器(Shader)克伊,使用預(yù)設(shè)(Prefab)酥郭。
5.動(dòng)態(tài)加載資源的方式?和區(qū)別
1.通過(guò) Resources 模塊愿吹,調(diào)用它的 load 函數(shù):可以直接 load 并返回某個(gè)類(lèi)型的 Object不从,前提是要把這個(gè)資源放在 Resource 命名的文件夾下,Unity不關(guān)有沒(méi)有場(chǎng)景引用犁跪,都會(huì)將其全部打入到安裝包中椿息。Resources.Load();
2.通過(guò) bundle 的形式: 即將資源打成 asset bundle 放在服務(wù)器或本地磁盤(pán)歹袁, 然后使用 WWW 模塊 get 下來(lái), 然后從這個(gè) bundle 中 load 某個(gè) object寝优。
AssetBundle
3.通過(guò) AssetDatabase.loadasset :這種方式只在 editor 范圍內(nèi)有效条舔,游戲運(yùn)行時(shí)沒(méi)有這個(gè)函數(shù), 它通常是在開(kāi)發(fā)中調(diào)試用的 【AssetDatabase 資源數(shù)據(jù)庫(kù)】
區(qū)別:Resources的方式需要把所有資源全部打入安裝包乏矾,這對(duì)游戲的分包發(fā)布(微端)和版本升級(jí)(patch)是不利的孟抗,所以 unity 推薦的方式是不用它, 都用 bundle 的方式替代钻心, 把資源達(dá)成幾個(gè)小的 bundle凄硼, 用哪個(gè)就 load哪個(gè),這樣還能分包發(fā)布和 patch捷沸,但是在開(kāi)發(fā)過(guò)程中摊沉,不可能沒(méi)更新一個(gè)資源就打一次 bundle, 所以 editor 環(huán)境下可以使用 AssetDatabase 來(lái)模擬痒给,這通常需要我們封裝一個(gè) dynamic resource 的 loader 模塊说墨,在不同的環(huán)境下做不同實(shí)現(xiàn)。
動(dòng)態(tài)資源的存放
有時(shí)我需要存放一些自己的文件在磁盤(pán)上苍柏,例如我想把幾個(gè)bundle放在初始的安裝里婉刀, unity 有一個(gè) streaming asset 的概念,用于提供存儲(chǔ)接口的訪問(wèn)序仙。我們需要在編輯器建立一個(gè) StreamingAssets 名字的文件夾突颊,把需要我們放在客戶磁盤(pán)上的動(dòng)態(tài)文件放在這個(gè)文件夾下面,這樣安裝后潘悼,這些文件會(huì)放在用戶磁盤(pán)的指定位置律秃,這個(gè)位置可以通過(guò)Application.streamingAssetsPath 來(lái)得到。
6.請(qǐng)簡(jiǎn)述一下對(duì)象池原理,什么情況下使用治唤?
對(duì)象池背后的理念其實(shí)是非常簡(jiǎn)單的棒动。我們將對(duì)象存儲(chǔ)在一個(gè)池子中,當(dāng)需要時(shí)在再次使用宾添,而不是每次都實(shí)例化一個(gè)新的對(duì)象船惨。池的最重要的特性,也就是對(duì)象池設(shè)計(jì)模式的本質(zhì)是允許我們獲取一個(gè)“新的”對(duì)象而不管它真的是一個(gè)新的對(duì)象還是循環(huán)使用的對(duì)象缕陕。
對(duì)象池通常用于在那些需要經(jīng)常創(chuàng)建又銷(xiāo)毀的對(duì)象比如我們場(chǎng)景中的小怪粱锐,經(jīng)常需要?jiǎng)?chuàng)建和銷(xiāo)毀,我們就可以在小怪銷(xiāo)毀的時(shí)候扛邑,不真正的銷(xiāo)毀而是怜浅,而是把它放入對(duì)象池中等到下一次我們需要?jiǎng)?chuàng)建小怪的時(shí)候,再?gòu)膶?duì)象池中取出來(lái)。
7.使用mipmap有什么好處恶座?什么情況下使用搀暑?
Mipmap紋理技術(shù)是目前解決紋理分辨率與視點(diǎn)距離關(guān)系的最有效途徑,它會(huì)先將圖片壓縮成很多逐漸縮小的圖片,例如一張64*64的圖片,會(huì)產(chǎn)生 64*64,32*32,16*16,8*8,4*4,2*2,1*1的7張圖片,當(dāng)屏幕上需要繪制像素點(diǎn)為20*20 時(shí),程序只是利用 32*32 和 16*16 這兩張圖片來(lái)計(jì)算出即將顯示為 20*20 大小的一個(gè)圖片跨琳,這比單獨(dú)利用 32*32 的那張?jiān)计?jì)算出來(lái)的圖片效果要好得多自点,速度也更快。
8.Unity內(nèi)存優(yōu)化脉让?
GC垃圾回收
9.你認(rèn)為unity在開(kāi)發(fā)過(guò)程中哪些地方比較容易造成內(nèi)存泄漏和內(nèi)存泄漏問(wèn)題桂敛?如何避免?
腳本做載入不刪除處理時(shí)侠鳄,往往腳本中還有一些不用的變量,容易導(dǎo)致內(nèi)容泄漏
10.用NGUI開(kāi)發(fā)滾動(dòng)視圖死宣,當(dāng)滾動(dòng)列表達(dá)到幾百條的時(shí)候伟恶,如何才能保證界面的滾動(dòng)流暢運(yùn)行
1.每個(gè)滾動(dòng)條目都是同一個(gè)預(yù)設(shè)體的實(shí)例
2.做緩存,只要實(shí)例化視野范圍內(nèi)滾動(dòng)條目毅该,往上超出視野部分博秫,自動(dòng)填補(bǔ)到視野的下面
11.如何解決過(guò)多創(chuàng)建和刪除對(duì)象帶來(lái)的卡頓問(wèn)題
對(duì)象池,把不用對(duì)象緩存到一個(gè)對(duì)象列表中
12.Unity資源加載的有幾種方式眶掌,簡(jiǎn)述asset bundie
1.直接在腳本中public一個(gè)對(duì)象挡育,然后在監(jiān)視器面板進(jìn)行賦值
2.直接在程序中進(jìn)行find查找
3. Resource.load
4.把資源打成Assetbudle,然后用的時(shí)候load進(jìn)來(lái)
assetbundle就是對(duì)資源的打包處理朴爬,同時(shí)這種資源格式便于從互聯(lián)網(wǎng)上下載
13.背包系統(tǒng)中只有20個(gè)格子即寒,現(xiàn)在有總共有100個(gè)物體,除了顯示在視野中的20個(gè)外召噩,對(duì)其他的處理方法母赵?(注:將其他隱藏起來(lái)不可行,對(duì)象池得有具體的說(shuō)明)
1.每個(gè)滾動(dòng)條目都是同一個(gè)預(yù)設(shè)體的實(shí)例
2.做緩存具滴,只要實(shí)例化視野范圍內(nèi)滾動(dòng)條目凹嘲,往上超出視野部分,自動(dòng)填補(bǔ)到視野的下面