Всем привет, пожалуйста помогите доделать скрипт, который меняет соседние объекты из очереди, в GPT4 выдал такой код, но там меняются все объекты при нажатии не только соседние:
sing UnityEngine;
using UnityEngine.EventSystems;
namespace SortItems
{
public class ChangePlace : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
private int currentIndex = 0;
private Vector3 startPosition;
public void OnPointerDown(PointerEventData eventData)
{
startPosition = transform.position; // сохраняем текущую позицию
}
public void OnPointerUp(PointerEventData eventData)
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // создаем луч от камеры к точке отпускания указателя
if (Physics.Raycast(ray, out hit)) // проверяем, пересекается ли луч с каким-то коллайдером
{
if (hit.collider.gameObject != gameObject) // если это не тот же объект
{
transform.position = startPosition; // возвращаем объект на свою позицию
}
else // если это тот же объект
{
if (Input.GetAxis("Horizontal") > 0) // если вы двигаете указатель вправо
{
currentIndex++; // увеличиваем индекс на единицу
if (currentIndex >= transform.parent.childCount) // если индекс выходит за пределы списка детей родителя
{
currentIndex = 0; // обнуляем индекс
}
}
else if (Input.GetAxis("Horizontal") < 0) // если вы двигаете указатель влево
{
currentIndex--; // уменьшаем индекс на единицу
if (currentIndex < 0) // если индекс становится отрицательным
{
currentIndex = transform.parent.childCount - 1; // делаем индекс равным последнему индексу в списке детей родителя
}
}
Transform transform1;
var otherTransform = (transform1 = transform).parent.GetChild(currentIndex); // получаем другой объект по индексу
var otherPosition = otherTransform.position; // получаем его позицию
otherTransform.position = startPosition; // меняем его позицию на позицию текущего объекта
transform1.position = otherPosition; // меняем позицию текущего объекта на позицию другого объекта
}
}
else // если луч не пересекается ни с одним коллайдером
{
transform.position = startPosition; // возвращаем объект на свою позицию
}
}
}
}