У меня есть группа макетов сетки и под ней несколько изображений. Чего я хочу добиться, так это того, что всякий раз, когда я выбираю (нажимаю и начинаю перетаскивать) объект, я хочу, чтобы его порядок рендеринга был приоритетным, чтобы из-за иерархии он не отставал от своих братьев и сестер. Как я могу добиться этого в 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, я думаю, что вместо Canvas.sortingOrder++ вам следует использовать originalSortingOrder + 1, это позволит более точно обработать его.
canvas.sortingOrder = originalSortingOrder + 1;
Просто рекомендация: всякий раз, когда вы имеете дело со слоями, намного лучше иметь некоторую конфигурацию слоев и настройку Canvas, которую можно назначить, создать столько слоев сортировки, сколько вам нужно, и присвоить каждому элементу пользовательского интерфейса слой, дополнительно вы можете проверить настройки порядка и холста
Проверьте, правильно ли работает перетаскивание.
Не могли бы вы переименовать ссылки на изображения, пожалуйста?
Для тех, кто столкнулся с такой же проблемой, я нашел решение следующим образом:
По сути, это работает таким образом, что временный держатель сохраняет изображения, и когда я начинаю перетаскивание, я деактивирую родительский элемент перетаскиваемых элементов и активирую временный, чтобы перетаскиваемое изображение располагалось перед неперетаскиваемыми, закрывая объект, по которому щелкнули, во временном список.
Я тоже пробовал это, но проблема в том, что он по-прежнему ведет себя так же. Я не знаю, связано ли это с тем, что я не определил порядок в настройках слоев или с чем-то еще, но он ведет себя не так, как ожидалось.