簡體   English   中英

在錯誤的位置繪制的Unity3D / NGUI UI元素

[英]Unity3D/NGUI UI elements drawn at wrong location

當移動基礎面板時,在NGUI小部件中呈現實際內容存在一個奇怪的問題。 由於某些原因,即使邊界是固定的,內容本身也不會更新為正確的位置。 第一個圖像是應該的樣子,第二個圖像是在從右向左移動基礎面板之后的樣子。 您可以從小部件矩形中看到它們在正確的位置,但是內容(文本或精靈)放錯了位置。

我曾嘗試過更新,刷新錨點等,但是似乎都沒有用。 有任何想法嗎? 這似乎是一個渲染問題。 我們目前正在使用Unity 4.6和NGUI 3.7.4。

好不好

我猜想NGUI在(父)游戲對象處於非活動狀態時不能很好地工作。 特別是如果您嘗試UIScrollView.ResetPosition,縮放或重新定位。

所以我有一個擴展看起來像這樣

public static void ResetPositionHack(this UIScrollView scrollView, float animLength = 1f ) {
    scrollView.ResetPosition();
    scrollView.currentMomentum = Vector3.zero;
    KeepMakingDirty.Begin( scrollView, animLength );
}

方法KeepMakingDirty.Begin會將MonoBehavior附加到對象(也請確保沒有重復附加)。
SetDirty()將在其Update()中調用指定的時間。
然后腳本會自毀。

這是NGUI的錯誤。 它與UIPanel.UpdateTransformMatrix()有關,並已在NGUI3.9.3或NGUI 3.9.4中修復。

代碼打擊在我的項目中工作正常:

void UpdateTransformMatrix ()
{
    int fc = Time.frameCount;
    if (cachedTransform.hasChanged)
    {
        mTrans.hasChanged = false;
        mMatrixFrame = -1;
    }

    if (mMatrixFrame != fc)
    {
        mMatrixFrame = fc;
        worldToLocal = mTrans.worldToLocalMatrix;

        Vector2 size = GetViewSize() * 0.5f;

        float x = mClipOffset.x + mClipRange.x;
        float y = mClipOffset.y + mClipRange.y;

        mMin.x = x - size.x;
        mMin.y = y - size.y;
        mMax.x = x + size.x;
        mMax.y = y + size.y;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM