Страница 1 из 1

Перемещение объекта мышкой с ограничением

СообщениеДобавлено: 23 сен 2021, 21:08
MrDmitry
Здравствуйте, помогите решить казалось бы простую задачу. Нужно перемещать объект drag & drop в пределах поля. Для наглядности приложил картинку. Тут синий квадратик можно перемещать по левой стороне, в пределах всего поля, но нельзя переместить за пределы красной черты, черта может смещаться. Пробовал сделать что то типо того


Синтаксис:
Используется csharp
public void OnDrag(PointerEventData eventData)
    {
        Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        if (transform.position.x < wallPos)
            transform.Translate(mousePosition);

    }


где wallPos позиция красной черты, но понятное дело при достижении красной черты, он проходит ее и больше им не пошевелить. Задача вроде простая, но что то у меня в голову ни чего не приходит. Пробовал сделать через срабатывание триггеров, но тогда объект может проскакивать красную черту.

Изображение

Re: Перемещение объекта мышкой с ограничением

СообщениеДобавлено: 23 сен 2021, 21:32
samana
Пока курсор по икс в левой части, то перемещайте квадрат за курсором.
А если курсор по икс в правой части, то перемешайте квадрат за курсором только по игрек, а икс устанавливайте в значение где проходит красная черта.

Re: Перемещение объекта мышкой с ограничением

СообщениеДобавлено: 23 сен 2021, 21:46
MrDmitry
Так я о чем и говорю, это первое что пришло мне в голову. Но

Синтаксис:
Используется csharp
if (transform.position.x <= wallPos)
            transform.Translate(mousePosition);
        else
            transform.Translate(new Vector2(wallPos, mousePosition.y));


Квадрат прилипает к красной черте и не смещается больше по оси X


PS понял, нужно следить за мышкой а не за объектом. заменил


Синтаксис:
Используется csharp
if (transform.position.x <= wallPos)
на

Синтаксис:
Используется csharp
if (mousePosition.x >= 0)


Но теперь проблема что квадрат не смещается за мышкой в обратном направлении. Происходит это, по всей видимости потому что координаты мышки считаются относительно самого квадрата.

Re: Перемещение объекта мышкой с ограничением

СообщениеДобавлено: 23 сен 2021, 22:03
MrDmitry
Синтаксис:
Используется csharp
public void OnDrag(PointerEventData eventData)
    {
        Vector2  ObjectPosition= Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        if (mousePosition.x <= wallPos.x)
            transform.Translate(ObjectPosition);
        else
            transform.Translate(new Vector2(wallPos.x, ObjectPosition.y));
    }


На калякал такое. Теперь при достижении красной линии, квадрат улетает куда то за приделы (

Если я убираю позицию стены, и ставлю 0 за место wallPos.x то все нормально.

Re: Перемещение объекта мышкой с ограничением

СообщениеДобавлено: 24 сен 2021, 04:39
NICO
MrDmitry писал(а):Так я о чем и говорю, это первое что пришло мне в голову. Но

Синтаксис:
Используется csharp
if (transform.position.x <= wallPos)
            transform.Translate(mousePosition);
        else
            transform.Translate(new Vector2(wallPos, mousePosition.y));


Квадрат прилипает к красной черте и не смещается больше по оси X


PS понял, нужно следить за мышкой а не за объектом. заменил


Синтаксис:
Используется csharp
if (transform.position.x <= wallPos)
на

Синтаксис:
Используется csharp
if (mousePosition.x >= 0)


Но теперь проблема что квадрат не смещается за мышкой в обратном направлении. Происходит это, по всей видимости потому что координаты мышки считаются относительно самого квадрата.

Это происходит по той причине, что ежели выполняется первое if, то затем больше ничего не происходит. Эти коды выполняются в порядке от верхнего. Т. е. проверяется верхнее, выполняется действие, ежели нет, то ничего не происходит или выполняется то, что ниже в else if, чем выше, тем первостепеннее значение. Т. е. ежели в самом начале сказано If (что-то происходит), и ЭТО ПРОИСХОДИТ, то это действие выполняется, и все. else if даже не проверяется ниже. Первое выполнено. Все. Приехали.

Re: Перемещение объекта мышкой с ограничением

СообщениеДобавлено: 24 сен 2021, 04:49
NICO
Не факт, что сработает, но попытайтесь таким образом:
Синтаксис:
Используется csharp
if (mousePosition.x <= 0)
            transform.Translate(mousePosition);
else if (mousePosition.x > 0)
            transform.Translate(new Vector2(wallPos, mousePosition.y));
 

Я же верно понимаю, что wallPos по мышке находится по оси x в точке 0?

Re: Перемещение объекта мышкой с ограничением

СообщениеДобавлено: 24 сен 2021, 05:05
NICO
NICO писал(а):Не факт, что сработает, но попытайтесь таким образом:
Синтаксис:
Используется csharp
if (mousePosition.x <= 0)
            transform.Translate(mousePosition);
else if (mousePosition.x > 0)
            transform.Translate(new Vector2(wallPos, mousePosition.y));
 

Я же верно понимаю, что wallPos по мышке находится по оси x в точке 0?

Пардон, только что заметил, что wallPos тоже может смещаться, значит, везде вместо 0 пропишите wallPos. Мне кажется, должно сработать:
Синтаксис:
Используется csharp
if (mousePosition.x <= wallPos)
            transform.Translate(mousePosition);
else if (mousePosition.x > wallPos)
            transform.Translate(new Vector2(wallPos, mousePosition.y));
 

Re: Перемещение объекта мышкой с ограничением

СообщениеДобавлено: 24 сен 2021, 16:24
Tolking