用户界面——将UI元素放到前台



我想实现简单的拖放与:

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元素topmost?

是的,如果你使用的是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)并且不想使用插件,你就需要开发自己的系统。实现预期效果的更简单的方法是:

  • 首先,你需要有一个正射影相机拖拽& &;下降的因素。你应该相应地调整相机的图层。

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

  • 然后,OnDrag你应该移动对象更接近相机。这条路看起来是最近的。
  • 最后,OnDrop,你应该重置对象的Z位置,使其与相机的距离与任何其他对象相同。

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

transform.SetParent(transform.root);

UI Element被放置为Canvasfirst child,从而有效地将自己放置在前景

相关内容

  • 没有找到相关文章

最新更新