【问题标题】:Unity3D/NGUI UI elements drawn at wrong locationUnity3D/NGUI UI 元素绘制在错误的位置
【发布时间】:2015-05-08 06:37:21
【问题描述】:

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

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

【问题讨论】:

  • 是可拖动的面板吗?
  • 是的。它是这些元素所在的 UIScrollView。
  • 而且它是一个垂直滚动的滚动视图,所以内容不应该水平移动。
  • 快速的方法是将此标签枢轴更改为左,并将锚点应用于面板容器
  • 换句话说,制作这个结构: 1-UIpanel(可拖动) 1.1-Uipanel(不可拖动和锚引用) 1.1.1您的其他项目(标签、精灵等)

标签: c# unity3d ngui


【解决方案1】:

我认为 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() 中被调用一段指定的时间。
然后脚本自毁。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多