我想实现简单的拖放与:
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
被放置为Canvas
的first child
,从而有效地将自己放置在前景。