您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進行NGUI戰斗飄字及界面優化,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
1. 飄字問題:飄字會有Alpha的漸變,當漸變到0的時候,會觸發UIPanel的Rebuild
解決問題:查找哪些地方觸發了Rebuild,在UIPanel中添加日志代碼,查找出對應的UI控件,將Animation中的Alpha的最小值修改為大于0.001,并將label的位置設置到無窮遠處,同時不要做顯隱操作
public UIDrawCall FindDrawCall (UIWidget w) { Material mat = w.material; Texture tex = w.mainTexture; int depth = w.depth; for (int i = 0; i < drawCalls.Count; ++i) { UIDrawCall dc = drawCalls[i]; int dcStart = (i == 0) ? int.MinValue : drawCalls[i - 1].depthEnd + 1; int dcEnd = (i + 1 == drawCalls.Count) ? int.MaxValue : drawCalls[i + 1].depthStart - 1; if (dcStart <= depth && dcEnd >= depth) { if (dc.baseMaterial == mat && dc.mainTexture == tex) { if (w.isVisible) { w.drawCall = dc; if (w.hasVertices) dc.isDirty = true; return dc; } } else mRebuild = true; if (mRebuild) { DebugShow(w); } return null; } } DebugShow(w); mRebuild = true; return null; } private void DebugShow(UIWidget w) { string path = ""; Transform t = w.transform; while(null != t) { path += t.transform.name + "/"; t = t.parent; } Debug.LogWarning("<color=white>" + path + "time:" + Time.time+ "</color>"); }
查找出對應的UI控件,將Animation中的Alpha的最小值修改為大于0.001(UIWidget),及TweenAlpha動畫中做同樣的修改
/// <summary> /// Update the widget's visibility and final alpha. /// </summary> public override void Invalidate (bool includeChildren) { mChanged = true; mAlphaFrameID = -1; if (panel != null) { bool vis = (hideIfOffScreen || panel.hasCumulativeClipping) ? panel.IsVisible(this) : true; <span >UpdateVisibility(CalculateCumulativeAlpha(Time.frameCount) > 0.001f</span>, vis); UpdateFinalAlpha(Time.frameCount); if (includeChildren) base.Invalidate(true); } }
2. 戰斗界面 由技能倒計時、連擊數等組成
1). 修改倒計時結束時候的label不隱藏,改為設置為空,設置的string 方法使用U3d內存優化UILabel使用String的問題 。
2). 對經常刷新的區域單獨加UIPanel
3). 盡量減少對界面元素的顯隱操作,以減少UIpanel的Rebuild過程,從而減少DrawCall
經測試 UIPanel的 Rebuild大量減少,尤其是飄字的。
上述內容就是如何進行NGUI戰斗飄字及界面優化,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。