скрипт ChangePlace

Программирование на Юнити.

скрипт ChangePlace

Сообщение Denis1409 10 авг 2023, 21:47

Всем привет, пожалуйста помогите доделать скрипт, который меняет соседние объекты из очереди, в 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; // возвращаем объект на свою позицию
}
}
}
}
Denis1409
UNец
 
Сообщения: 2
Зарегистрирован: 10 авг 2023, 21:40

Re: скрипт ChangePlace

Сообщение 1max1 10 авг 2023, 22:37

Не думал что 4 версия может написать такое)) (полная Ж)
Может ты не правильно поставил ему условия.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: скрипт ChangePlace

Сообщение Denis1409 13 авг 2023, 20:40

Вот еще такой выдает)
using UnityEngine;

public class ChangePlace : MonoBehaviour
{
// Ссылка на соседний объект в очереди
public GameObject nextObject;

// Позиция объекта в очереди
private Vector3 _position;

// Флаг, показывающий, что объект выбран для обмена
private bool _selected;

// Метод, вызываемый при старте сцены
void Start()
{
// Запоминаем позицию объекта
_position = transform.position;
// Сбрасываем флаг выбора
_selected = false;
}

// Метод, вызываемый при клике мыши на объекте
void OnMouseDown()
{
// Если есть соседний объект в очереди
if (nextObject != null)
{
// Получаем скрипт соседнего объекта
ChangePlace nextScript = nextObject.GetComponent<ChangePlace>();
// Если соседний объект уже выбран для обмена
if (nextScript._selected)
{
// Меняем местами позиции объектов
Vector3 temp = _position;
_position = nextScript._position;
nextScript._position = temp;
// Перемещаем объекты на новые позиции
transform.position = _position;
nextObject.transform.position = nextScript._position;
// Сбрасываем флаги выбора
_selected = false;
nextScript._selected = false;
}
else
{
// Иначе выбираем текущий объект для обмена
_selected = true;
}
}
}
}
Denis1409
UNец
 
Сообщения: 2
Зарегистрирован: 10 авг 2023, 21:40


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15