【问题标题】:Bring a UI Element to foreground将 UI 元素置于前台
【发布时间】:2015-08-16 10:22:48
【问题描述】:

我想实现简单的拖放

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

【问题讨论】:

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


    【解决方案1】:

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

    transform.SetParent(transform.root);
    

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

    【讨论】:

      【解决方案2】:

      是的,如果您使用的是统一 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(如果您使用游戏对象)并且不想使用插件,则需要开发自己的系统。 达到预期效果的更简单方法是:

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

      Orthographic : 相机会均匀地渲染物体,没有透视感。

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

      【讨论】:

      • 我会考虑在我的项目中使用 NGUI,但现在,您建议的解决方案听起来不错。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多