• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

      2017-03-08 03:12宋傳磊劉俊婷張光亮侯世中
      中國新通信 2017年1期
      關鍵詞:數組優(yōu)化

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

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

      【關鍵詞】 U3D 優(yōu)化 數組 函數調用

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

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

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

      二、深度優(yōu)化

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

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

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

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

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

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

      function OnBecameVisible () {

      enabled = true;}

      三、結束語

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

      參 考 文 獻

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

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

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

      猜你喜歡
      數組優(yōu)化
      優(yōu)化問題設計
      JAVA稀疏矩陣算法
      營商環(huán)境五方面持續(xù)優(yōu)化
      JAVA玩轉數學之二維數組排序
      深入淺出理解C語言指針與二維數組
      優(yōu)化英語課堂教學策略的探索
      促進學生認識發(fā)展 優(yōu)化初中化學復習
      更高效用好 Excel的數組公式
      倍增法之后綴數組解決重復子串的問題
      CAE軟件操作小百科(30)
      五大连池市| 江华| 库伦旗| 兴化市| 邯郸县| 左权县| 镇安县| 康平县| 湛江市| 新闻| 门头沟区| 綦江县| 巩义市| 宿松县| 依安县| 安义县| 尼勒克县| 江门市| 友谊县| 孝义市| 扎赉特旗| 成安县| 准格尔旗| 黔江区| 长泰县| 二连浩特市| 大港区| 清丰县| 青田县| 沈丘县| 肃宁县| 茂名市| 抚远县| 宜川县| 四会市| 偃师市| 棋牌| 随州市| 舒城县| 南溪县| 蓝山县|