在错误的位置绘制的Unity3D / NGUI UI元素

时间:2015-05-08 06:37:22

标签: c# unity3d ngui

当移动底层面板时,我在NGUI小部件中呈现实际内容时遇到了一个奇怪的问题。由于某种原因,即使边界是内容,内容本身也不会更新到正确的位置。第一个图像是应该如何,第二个是有时在从右到左移动底层面板之后的图像。您可以从小部件矩形中看到它们位于正确的位置,但内容(文本或精灵)放错了位置。

我尝试过更新,刷新锚等,但似乎没有工作。有任何想法吗?这似乎是一个渲染问题。我们目前正在使用Unity 4.6和NGUI 3.7.4。

OK Not OK

2 个答案:

答案 0 :(得分:0)

我认为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()中调用 然后脚本自毁。

答案 1 :(得分:0)

这是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;
    }
}