当底层面板移动时,我在 NGUI 小部件中呈现实际内容时遇到了一个奇怪的问题。出于某种原因,即使边界是,内容本身也不会更新到正确的位置。第一个图像是它应该的样子,第二个是它有时在从右到左移动底层面板后的样子。您可以从小部件矩形中看到它们在正确的位置,但内容(文本或精灵)放错了位置。
我尝试过更新、刷新锚点等,但似乎都没有工作。有任何想法吗?这似乎是一个渲染问题。我们目前正在使用 Unity 4.6 和 NGUI 3.7.4。
这是 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;
}
}
我想 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() 中被调用一段指定的时间。
然后脚本自毁。