奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌

您現在所在的位置:首頁 >關于奇酷 > 行業動態 > Unity3D培訓:MMORPG游戲優化經驗分享(一)

Unity3D培訓:MMORPG游戲優化經驗分享(一)

來源:奇酷教育 發表于:

奇酷教育-unity3D培訓_unity3D游戲_unity3D教程

  Unity3D培訓:MMORPG游戲在優化Unity3d游戲時,我們一般從四個方面:CPU、GPU、內存、工程配置等入手,它們都可能是影響游戲性能瓶頸的關鍵。
  unity3d游戲教程:CPU
  我們平常游戲的很多性能瓶頸都在CPU。例如:MONO內存分配帶來CPU開銷,當Mono內存從50M、60M、70M,一直增大到100M,這些內存分配都相當于CPU的開銷。當在Update函數中存在比較復雜的邏輯時,很容易出現每一幀都觸發內存分配,如圖01所示。
Unity3D培訓:MMORPG游戲優化經驗分享(一)
  雖然截圖中一幀里的GC Alloc只有0.6KB,但是當游戲運行很長時間后,累計數量是相當高的,這就讓每一幀都存在GC Alloc帶來的CPU開銷。
  處理客戶端與服務器通信的數據包時,會存在序列化與反序列化,如果實現方式不合理時,會帶來多余的內存分配。一般很多項目都現在使用Protobuff,如果是自行設計的數據包格式,就要考慮如何控制序列化與反序列化的內存分配。
  靜態數據表如果使用Json、xml等格式時,同時解析邏輯與數據結構設計不良,在初始化數據表時容易由于過大的內存分配而撐大MONO堆內存。所以要在項目設計時找到最優化的方式來實現功能需求與性能需求。
  String是一個很常用的引用類型對象。當代碼里存在字符串拼接、直接或間接調用ToString()函數時,會生成字符串的副本,也就產生了內存分配。例如:調用Object.name屬性,即使每次返回值是固定的,依然是不同的String對象,因為這里每次返回都是一個對象拷貝。所以建議可以通過把這類字符串預先緩存,或者在打包時生成一個名字的列表作為靜態數據,提供給運行時的邏輯直接讀取。
  部分Unity內置API在被調用時,都是返回對象拷貝。例如:Getcomponents、Sprite.Vertices、Input.Touches等。從設計角度是考慮代碼安全性,防止外部直接去修改真正的對象數據。所以,這些屬性返回值要做緩存。或者通過其他API來實現需求從而規避掉這個問題。請注意,Getcomponent只會在編輯器環境下存在內存開銷,真機上不存在,大家在Profiling時不要被誤導。
  通常Debug.Log一類的日志函數應該只存在Debug階段,但是很多時候這些函數沒有屏蔽。如果它們出現在調用次數較多的邏輯中,就帶來額外的CPU開銷。同樣Warning和Log存在相同的情況。雖然日常在console或真機Log里常見,但是經常沒有被處理。建議對待Warning也要找到它的觸發原因并解決,防止在Release中出現。Log函數不會因為打包為release版本就會自動屏蔽,需要使用宏定義來屏蔽。
  閉包與匿名函數盡可能不要使用。閉包中調用外部變量,需要創建一個臨時class對象來包含外部變量并且傳給閉包函數,從而帶來內存開銷。匿名函數在作為一個函數的參數傳入時,也存在內存分配。il2cpp中如果使用匿名函數當參數,不要用預聲明的函數。
  ParticleSystem API在Unity 2017.2之前的版本中,Stop和Simulate內部實現使用了閉包。粒子系統的一些API,例如:Start、Stop、Pause、Clear、Simulate在調用它們時會遞歸調用當前粒子節點下面的所有子級節點,并會觸發GetComponent,這帶來了一定的CPU開銷。如果需要調這幾個方法的時候,函數參數withChildren可以設為false,不觸發遍歷子節點。在粒子對象初始化時,預存子節點,在需要時直接根據緩存的子節點列表分別調用它們的Start。
  Camera.main的調用是存在開銷的,可以把Object.FindObjectWithTag(“MainCamera”)緩存下來來代替。調用射線檢測函數時應該使用那些不存在開銷的函數,例如Physics.RaycastNonAlloc。
  當Canvas重建時,會引起材質的重新創建、排序、Mesh重建,這都會帶來CPU的開銷。當Canvas內容非常復雜的時候,每次重建很可能會帶來比較明顯的卡頓。UGUI里面的Mask會使用StencilBuffer,蒙版內的元素是沒法和外面的元素做合批,即便在圖集與材質都是相同的。這時可以用RectMask2D來實現蒙版,可以稍微降低一些開銷。Canvas上的GraphicRaycaster選項,在不需要有交互時可以不勾選。而Layout組件會涉及到節點的遍歷操作,都有內存與CPU的開銷,如果能不用就不用它,或者自行硬編碼實現簡單的自動布局。
  Canvas都建議做動靜分離,頻繁改動的元素和固定不變的元素分開到不同的Canvas。需要注意Canvas數量,數量多少根據UI的復雜程度、動靜分離的Canvas個數進行測試,評估多少個Canvas是合理的。目前發現Unity2017.3中,出現過當Canvas數量達到十幾個或更多時,帶來的開銷反而比不分拆時還大。
  UI元素存在半透并很多元素進行疊加,就導致OverDraw消耗比較大。可以通過減少疊加層數、縮小Sprite的空白區域等方式來控制。
  當Canvas 處于Worldspace或者Screen Space時,Canvas存在Event Camera或者Render Camera屬性,需要掛接Camera。此處若為None,運行時每幀都會有十幾次訪問它,底層默認返回Camera.main。所以預先關聯Camera對象。
  圖集的分類方式直接影響到UI的合批效率。除了幾個通用圖集外,其它圖集按UI模塊類型區分,一個或多個UI公用一套圖集。圖集的面積利用率要做到最高,避免圖集存在太多空白區域。而圖標是分散還是合并到圖集上,要看項目實際情況,并沒有固定的規則。
  UI背景圖不要出現NPOT尺寸,如果要用NPOT,嘗試多個NPOT圖合并為POT尺寸,或者美術對NPOT圖拉伸為POT,在Unity中還原為原始尺寸。
  通常靜態合批通過給場景上的物體勾上Static實現,但是有時會因為導致包體太大,改為運行時調用staticBatchingUtility.Combine進行物件合并。但是運行時手動靜態合批會有不小的CPU開銷,同時Mesh可讀寫選項也開啟,在內存中邊存在雙份的Mesh數據,同時合并后模型也是一份新Mesh數據。建議可以用第三方插件Mesh Baker來進行靜態合批。同時,各個模型的材質也要針對靜態合批來制作,畢竟相同材質的模型才可以合并。
  動態合批對于大部分有Lightmap的模型是無效的,還存在900左右頂點的合批限制。在Unity 2017.3支持32bit Mesh index buffers,可以合并Mesh時支持更多的頂點,可以在FBX選項內Index Format打開或者運行時設置Mesh.indexFormat。
  骨骼蒙皮計算一般使用CPU Skinning,雖然引擎也是支持GPU skinning的,但需要注意性能瓶頸在CPU端還是GPU端。如果GPU端是性能瓶頸時,盲目打開GPU skinning,會變成一種負優化。當角色模型的骨骼數超過100根、150根時,某些身體部位的骨骼動畫,可以用BlendShapes代替。當某一部位骨骼動畫不播放時,可以把這個部位的Animator組件關掉。Animation Instancing也是一個可以優化大量角色動畫性能的手段。
  物理系統中,MeshCollider的使用在場景比較復雜龐大時,Bake的性能比較差。可以通過配合射線檢測和自定義高度圖數據控制角色高度。
  以上就是奇酷為大家分享的“Unity3D培訓:MMORPG游戲”謝謝大家觀看,如果對unity3D感興趣的話,想學unity3D培訓的,也可以在線咨詢,我們將竭誠為你解答。
主站蜘蛛池模板: 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 辊道窑炉,辊道窑炉厂家-山东艾希尔| 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 手持式3d激光扫描仪-便携式三维立体扫描仪-北京福禄克斯 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 优考试_免费在线考试系统_培训考试系统_题库系统_组卷答题系统_匡优考试 | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 高博医疗集团上海阿特蒙医院| 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 电子书导航网_电子书之家_电子书大全_最新电子书分享发布平台 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 517瓜水果特产网|一个专注特产好物的网站 | 箱式破碎机_移动方箱式破碎机/价格/厂家_【华盛铭重工】 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 太平洋亲子网_健康育儿 品质生活| 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 防堵吹扫装置-防堵风压测量装置-电动操作显示器-兴洲仪器 | 广州展览设计公司_展台设计搭建_展位设计装修公司-众派展览装饰 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 识禅_对禅的了解,从这里开始|