将UI元素带到前台

时间:2015-06-02 14:41:49

标签: user-interface unity3d drag-and-drop foreground topmost

我想用:

实现简单的拖放
public void OnDrag (PointerEventData eventData)
{
    transform.position = eventData.position;
}

问题在于,当我开始拖动时,我想将 UI元素带到前景。做这样的事情:

public void OnBeginDrag (PointerEventData eventData)
{
    transform.SetParent (transform.parent);    // giving the parent transform or a transform of an element on top
}

这显然不是一般解决方案。所以我有一个问题。如何制作 UI元素 最顶层,是否有优雅方法?

2 个答案:

答案 0 :(得分:2)

是的,如果您使用的是Unity GUI系统,则可以使用GUI.depth创建某种图层。

  

使用较低深度值绘制的GUI元素将显示在具有较高值的​​元素的顶部(即,您可以将深度视为距离相机的“距离”)。

以下是一个例子:

function OnGUI() {
    GUI.depth = 1; // You set to 1 by default
    if(GUI.RepeatButton(Rect(0,0,100,100), "My Button")) {
        GUI.depth = 0; // When the button is clicked, Depth is set to 0 the button is on top 
    }
}

就我而言,我通常使用NGUI这是非常有效的&优化并允许您处理拖动和下降。

但是,如果您不使用Unity GUI(如果使用gameObjects)并且不想使用插件,则需要开发自己的系统。 实现预期效果的更简单方法是:

  • 首先,你需要一个orthographic camera用于拖拽&掉元素。您应该相应地调整相机的图层。
  

正交:相机将均匀渲染物体,没有透视感。

  • 然后,OnDrag您应该将对象移近相机。这样,它看起来就是最近的。
  • 最后,在OnDrop中,您应该将对象Z位置重置为与相机相同的距离,而不是任何其他对象。

答案 1 :(得分:0)

我实际上找到了一个非常简单的简单解决方案。将UI Element transform设置为:

transform.SetParent(transform.root);

UI Element被放置为first child的{​​{1}},因此有效地将自己置于前景