我有一个网格布局组,下面有多个图像。我想要实现的是,每当我选择(单击并开始拖动)一个对象时,我希望它的渲染顺序优先,这样由于层次结构,它不会落后于其兄弟姐妹。我如何在 Unity 中实现这一目标?
这是我的代码:
using UnityEngine;
using UnityEngine.EventSystems;
public class DragAndDrop : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
private RectTransform selfRectTransform;
private Canvas canvas;
private int originalSortingOrder;
private void Start()
{
selfRectTransform = GetComponent<RectTransform>();
canvas = GetComponentInParent<Canvas>();
originalSortingOrder = canvas.sortingOrder;
}
public void OnBeginDrag(PointerEventData eventData)
{
// Increase the canvas sorting order to render the object above others
canvas.sortingOrder++;
}
public void OnDrag(PointerEventData eventData)
{
selfRectTransform.anchoredPosition += eventData.delta;
}
public void OnEndDrag(PointerEventData eventData)
{
// Restore the original canvas sorting order
canvas.sortingOrder = originalSortingOrder;
}
}
在编辑器的图层部分中设置顺序设置。
我认为你走在正确的轨道上,我认为缺少的可能是在你的OnBeginDrag函数中,我认为你应该使用originalSortingOrder + 1而不是canvas.sortingOrder ++,这是为了更准确地处理它
canvas.sortingOrder = originalSortingOrder + 1;