2

不确定这是解决 Unity3d/NGUI 问题的最佳论坛,但请尝试一下……

我正在尝试通过重新设置它来将游戏对象从可滚动面板移动到普通面板。

firstGameObject.transform.parent = secondGameObject.transform;

firstGameObject 最初是剪辑的可滚动面板的子项。转换似乎在层次结构中移动得很好,不再可滚动。但它仍然像被剪裁面板的孩子一样被剪裁。

有任何想法吗?

编辑:NGUI 论坛上有人建议在两个 uipanels 上调用 Refresh(),但没有效果。http://www.tasharen.com/forum/index.php?topic=1941.0

4

3 回答 3

3

终于让它工作了。正确的方法是在重新设置父级后在旧面板中的每个小部件上调用 CheckParent()。

UIPanel smallPanel = NGUITools.FindInParents<UIPanel>(firstGameObject);
List<UIWidget> list = new List<UIWidget>(smallPanel.widgets.buffer);

foreach (UIWidget widget in list)
{
    if (widget != null)
    {
        widget.CheckParent();
    }
}
于 2012-10-09T12:26:22.060 回答
2

功能CheckParent()已过时。现在您可以ParentHasChanged()在重新设置的 UIWidget 上使用。

于 2013-11-15T01:46:08.790 回答
0

这取决于您使用的是什么滚动条。将新父级设置为预制件,您只需为其设置新的局部坐标系。您说此滚动条中的对象正在剪切。因此,必须有一个数组或列表或类似的东西,存储您的预制件并在您的预制件上执行一些操作。或者,有某种掩码可以隐藏特定区域中的所有对象(我认为这是你的情况)。在这种情况下,您应该将预制件移出面具区域。如果您不需要更改屏幕位置,只需更改 Z 坐标,这样预制件将更靠近相机,并且超出遮罩区域。

于 2012-10-08T13:14:24.667 回答