亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Unity3D項(xiàng)目腳本優(yōu)化分析與研究

        2017-03-08 03:12:21宋傳磊劉俊婷張光亮侯世中
        中國(guó)新通信 2017年1期
        關(guān)鍵詞:函數(shù)調(diào)用數(shù)組優(yōu)化

        宋傳磊+劉俊婷+張光亮+侯世中

        【摘要】 本文就U3D項(xiàng)目中腳本優(yōu)化進(jìn)行分析研究。分別從常規(guī)優(yōu)化、使用靜態(tài)類型、使用#pragma strict指令、緩存組件查詢、使用內(nèi)建數(shù)組和盡量減少函數(shù)調(diào)用等六個(gè)方面,通過(guò)實(shí)例提出了具體的優(yōu)化方案,優(yōu)化方案的使用在很大程度上提高了項(xiàng)目腳本性能。

        【關(guān)鍵詞】 U3D 優(yōu)化 數(shù)組 函數(shù)調(diào)用

        一個(gè)U3D項(xiàng)目能夠很好的運(yùn)行,較完美的展現(xiàn)項(xiàng)目細(xì)節(jié)內(nèi)容,項(xiàng)目的性能優(yōu)化將起到核心的作用。項(xiàng)目的性能優(yōu)化涉及的范圍很廣,是一項(xiàng)紛繁復(fù)雜的過(guò)程。伴隨著軟硬件性能的提升,如何對(duì)項(xiàng)目進(jìn)行優(yōu)化進(jìn)而展現(xiàn)更多細(xì)節(jié),已經(jīng)成為開(kāi)發(fā)者急需思考的問(wèn)題。本文將針對(duì)JavaScript和C#腳本文件,從常規(guī)優(yōu)化、使用靜態(tài)類型、使用#pragma strict、緩存組件查詢、使用內(nèi)建數(shù)組以及盡量少調(diào)用函數(shù)等6個(gè)方面進(jìn)行闡述[1]。

        一、常規(guī)優(yōu)化

        1、數(shù)組大小在循環(huán)結(jié)構(gòu)中的應(yīng)用。很多程序設(shè)計(jì)語(yǔ)言,包括JS腳本語(yǔ)言,對(duì)于數(shù)組的大?。ㄩL(zhǎng)度)可以通過(guò)length屬性獲取。如果將數(shù)組的大小作為循環(huán)控制條件,應(yīng)該提前將數(shù)組的大小取得并賦給一個(gè)中間變量,在循環(huán)控制條件中使用該中間變量。這種優(yōu)化方式對(duì)數(shù)組的大小只進(jìn)行一次求值,很大程度上減少了處理機(jī)重復(fù)計(jì)算數(shù)組大小的次數(shù)。2、Update和OnGUI優(yōu)化。在JS和C#腳本中Update和OnGUI函數(shù)體每幀都要執(zhí)行一次,針對(duì)不同的具體項(xiàng)目,如果連續(xù)幾幀時(shí)間片代碼的執(zhí)行不會(huì)產(chǎn)生新的對(duì)象變化,可以估算幀時(shí)間片的大小,使用Time對(duì)象的frameCount屬性來(lái)跳躍時(shí)間片執(zhí)行循環(huán)體[2]。3、使用InvokeRepeating函數(shù)實(shí)現(xiàn)定時(shí)。在JS和C#腳本中雖然Start函數(shù)在程序的執(zhí)行過(guò)程中只執(zhí)行一次,但是可以使用InvokeRepeating函數(shù)實(shí)現(xiàn)定時(shí)調(diào)用用戶自定函數(shù)。這樣避免了使用Update函數(shù)重復(fù)執(zhí)行。

        二、深度優(yōu)化

        1、使用靜態(tài)類型。在Unity中采用邏輯推理技術(shù)自動(dòng)完成JavaScript動(dòng)態(tài)腳本到靜態(tài)腳本的轉(zhuǎn)換,無(wú)需程序員做任何設(shè)置。因此,在編寫(xiě)JavaScript時(shí),使用靜態(tài)類型代替動(dòng)態(tài)類型是既方便又有效的優(yōu)化措施。

        例如: var a=1;在定義變量a的同時(shí)用數(shù)值1完成了初始化。在編譯時(shí),Unity會(huì)自動(dòng)把變量a分析為整形,無(wú)需使用動(dòng)態(tài)名稱查找,這樣就節(jié)省了處理機(jī)的時(shí)間。

        2、使用#pragma strict指令。在Unity腳本文件的開(kāi)始處經(jīng)常可以看到 #pragma strict指令。此指令使編譯器處于“嚴(yán)謹(jǐn)編譯模式”,強(qiáng)制使用靜態(tài)類型,要求在聲明變量時(shí),需要明確待聲明的變量是屬于什么類型,不允許讓編譯器自己來(lái)分析變量的類型,因此不能隨便的使用一個(gè)標(biāo)識(shí)符讓編譯器來(lái)為其實(shí)例化。如在使用此指令后,在腳本中有如下語(yǔ)句 。var a; 此語(yǔ)句在編譯時(shí)會(huì)提示錯(cuò)誤。因?yàn)閺?qiáng)制使用靜態(tài)類型,變量“a”的類型未知,Unity將報(bào)告編譯錯(cuò)誤??梢詫⒄Z(yǔ)句做如下修改。 var a: int; 通過(guò)使用#pragma strict,可以強(qiáng)制程序員養(yǎng)成良好的編程習(xí)慣。

        3、緩存組件查詢。如果編寫(xiě)的代碼體積很大,需要盡可能的做到性能優(yōu)化,可以采用緩存組件查詢的優(yōu)化方式。當(dāng)通過(guò)GetComponent()方法獲取一個(gè)組件時(shí),Unity必須從“Hierarchy或Project”視圖中找到相應(yīng)的組件。此時(shí)可以通過(guò)定義一個(gè)緩存組件來(lái)引用到一個(gè)變量,使得Unity不會(huì)再每一幀都去尋找組件,此方法能夠提高代碼運(yùn)行速度。

        4、使用內(nèi)建數(shù)組。雖然ArrayList或Array類很方便使用,能輕易添加元件。但是相比內(nèi)建數(shù)組,速度有很大的差異,內(nèi)建數(shù)組速度非常快。內(nèi)建數(shù)組有固定長(zhǎng)度,通常情況下能夠預(yù)估其長(zhǎng)度然后填充它。內(nèi)建數(shù)組直接嵌入struct數(shù)據(jù)類型在第一個(gè)緩存里,不需要任何額外類型信息或其他資源。因此,能夠非常方便的在緩存中實(shí)現(xiàn)遍歷[3]。

        5、盡量減少函數(shù)調(diào)用。最簡(jiǎn)單最有效的優(yōu)化就是執(zhí)行最少的動(dòng)作。Unity中Update()方法每一幀都會(huì)執(zhí)行,所以減少Update()方法里面的工作量,可以實(shí)現(xiàn)性能優(yōu)化。例如,當(dāng)一個(gè)敵人在遠(yuǎn)處時(shí)100米外,讓他處于睡眠狀態(tài),直到玩家靠近,再喚醒。當(dāng)然這并不是很好的方法,更好更有效的方法是禁用該行為直到玩家靠近。使用 OnBecameVisible和OnBecameInvisible方法可以實(shí)現(xiàn)。當(dāng)物體在攝像機(jī)視野內(nèi),OnBecameVisible 將被調(diào)用,在視野范圍外時(shí),OnBecameInvisible被調(diào)用。

        function OnBecameVisible () {

        enabled = true;}

        三、結(jié)束語(yǔ)

        一般意義上,對(duì)于U3D項(xiàng)目可以通過(guò)修改模型、減少紋理尺寸、優(yōu)化粒子、優(yōu)化渲染、優(yōu)化資源并結(jié)合Unity 3D的相關(guān)特性來(lái)提高性能。但作為編碼人員,本文分析的優(yōu)化方案,可以從代碼優(yōu)化的角度實(shí)現(xiàn)項(xiàng)目性能的高效優(yōu)化。

        參 考 文 獻(xiàn)

        [1]宣雨松.Unity 3D游戲開(kāi)發(fā).北京:人民郵電出版社2013:115-124

        [2]吳亞峰等. Unity 3D游戲開(kāi)發(fā)技術(shù)詳解與典型案例. 北京:人民郵電出版社2014:83-92

        [3]U3D性能優(yōu)化總結(jié).[2016-10-6]. http://www.cnblogs.com/yangyisen/p/5108322.html

        猜你喜歡
        函數(shù)調(diào)用數(shù)組優(yōu)化
        超限高層建筑結(jié)構(gòu)設(shè)計(jì)與優(yōu)化思考
        JAVA稀疏矩陣算法
        C程序設(shè)計(jì)課程教學(xué)中知識(shí)點(diǎn)與德育點(diǎn)映射
        基于C語(yǔ)言的數(shù)學(xué)菜單的設(shè)計(jì)與實(shí)現(xiàn)
        民用建筑防煙排煙設(shè)計(jì)優(yōu)化探討
        關(guān)于優(yōu)化消防安全告知承諾的一些思考
        一道優(yōu)化題的幾何解法
        JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
        基于函數(shù)調(diào)用序列模式和函數(shù)調(diào)用圖的程序缺陷檢測(cè)方法*
        探討C++編程中避免代碼冗余的技巧
        精品的一区二区三区| 无码人妻久久一区二区三区app | 亚洲国产精品久久久久婷婷老年| 狠狠色狠狠色综合| 亚洲一区二区国产精品视频| 久久精品不卡一区二区三区| 精品免费久久久久久久| 日韩精品大片在线观看| 麻豆av一区二区天堂| 日韩中文字幕素人水野一区 | 无码日韩AⅤ一区二区三区| 性一交一乱一乱一视频亚洲熟妇| 99人中文字幕亚洲区三| 少妇aaa级久久久无码精品片| 欧美在线播放一区二区| 人妻少妇偷人精品久久人妻| 中国国产不卡视频在线观看| 日本一卡2卡3卡四卡精品网站 | av蜜桃视频在线观看| 亚洲午夜精品一区二区麻豆av| 在线观看热码亚洲av每日更新 | 欧美两根一起进3p做受视频 | 亚洲中文字幕精品乱码2021| 婷婷中文字幕综合在线| 无码一区二区三区在线在看| 久久国产精品免费一区二区三区| 免费观看a级片| 亚洲av理论在线电影网| 抖射在线免费观看视频网站| 99久久婷婷国产亚洲终合精品| 免费人成视频在线| 国产日韩精品一区二区在线观看播放| 亚洲精品国产av成拍色拍| 医院人妻闷声隔着帘子被中出 | 国产日韩乱码精品一区二区| 亚洲欧洲日产国码av系列天堂 | 特级黄色大片性久久久| 人妻中文字幕无码系列| 欧美自拍丝袜亚洲| 久久精品国产亚洲不卡| 无码av中文一区二区三区桃花岛|