溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進行NGUI戰(zhàn)斗飄字及界面優(yōu)化

發(fā)布時間:2022-01-14 09:07:30 來源:億速云 閱讀:221 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了如何進行NGUI戰(zhàn)斗飄字及界面優(yōu)化,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1. 飄字問題:飄字會有Alpha的漸變,當漸變到0的時候,會觸發(fā)UIPanel的Rebuild

解決問題:查找哪些地方觸發(fā)了Rebuild,在UIPanel中添加日志代碼,查找出對應(yīng)的UI控件,將Animation中的Alpha的最小值修改為大于0.001,并將label的位置設(shè)置到無窮遠處,同時不要做顯隱操作

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>");
    }

查找出對應(yīng)的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.  戰(zhàn)斗界面 由技能倒計時、連擊數(shù)等組成

1). 修改倒計時結(jié)束時候的label不隱藏,改為設(shè)置為空,設(shè)置的string 方法使用U3d內(nèi)存優(yōu)化UILabel使用String的問題 。

2). 對經(jīng)常刷新的區(qū)域單獨加UIPanel

3). 盡量減少對界面元素的顯隱操作,以減少UIpanel的Rebuild過程,從而減少DrawCall

經(jīng)測試 UIPanel的 Rebuild大量減少,尤其是飄字的。

上述內(nèi)容就是如何進行NGUI戰(zhàn)斗飄字及界面優(yōu)化,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI