繁体   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