Ограничить область перемещения объекта (2D)

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

Ограничить область перемещения объекта (2D)

Сообщение denprox 13 сен 2017, 14:00

Доброго времени суток! Подскажите пожалуйста, как ограничить экран, чтобы при передвижении объекта, невозможно было выйти за установленные пределы ? Объект передвигаю с помощью такого скрипта:

Синтаксис:
Используется csharp

    GameObject getTarget;
    bool isMouseDragging;
    Vector3 offsetValue;
    Vector3 positionOfScreen;

    private GameObject ActualObject;

    void Update()
    {

        //Mouse Button Press Down
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit2D aHit = new RaycastHit2D(); //инициализируем луч.
            if (Camera.main.orthographic)
            {
                // Присваиваем нашему лучу позицию мыши при клике .
                aHit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
            }

            if (aHit.transform.gameObject != ActualObject)
            {
                ActualObject = aHit.transform.gameObject;
            }

            getTarget = ActualObject;
            if (getTarget != null)
            {
                isMouseDragging = true;
                //Converting world position to screen position.
                positionOfScreen = Camera.main.WorldToScreenPoint(getTarget.transform.position);
                offsetValue = getTarget.transform.position - Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y));
            }
        }

        //Mouse Button Up
        if (Input.GetMouseButtonUp(0))
        {
            isMouseDragging = false;
        }

        //Is mouse Moving
        if (isMouseDragging)
        {
            Vector2 currentScreenSpace = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
            Vector2 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenSpace) + offsetValue;
            getTarget.transform.position = currentPosition;

        }
    }
 
Аватара пользователя
denprox
UNIт
 
Сообщения: 107
Зарегистрирован: 25 май 2017, 09:06
  • Сайт

Re: Ограничить область перемещения объекта (2D)

Сообщение samana 13 сен 2017, 19:18

Логика вашего скрипта вроде и понятна, но как-то запутано с этими ActualObject и getTarget, ну да ладно.
Если вы хотите ограничить передвижение по x или y, то можете просто после перемещения проводить проверку на выход за пределы конкретной оси и если выход есть, то возвращать объект обратно, например ограничение по икс, чтобы не выходить дальше 10.
Синтаксис:
Используется csharp
if (getTarget.transform.position.x > 10) getTarget.transform.position = new Vector2(10, getTarget.transform.position.y);
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Ограничить область перемещения объекта (2D)

Сообщение denprox 15 сен 2017, 08:10

Спасибо!) Так и сделаю!

p.s. в скрипте ActualObject не нужен)) Это осталось от промежуточных попыток.
Аватара пользователя
denprox
UNIт
 
Сообщения: 107
Зарегистрирован: 25 май 2017, 09:06
  • Сайт

Re: Ограничить область перемещения объекта (2D)

Сообщение danquimby 18 сен 2017, 16:03

[quote="denprox"]Спасибо!) Так и сделаю!

Знаешь что я видел. В офф туториалах есть такая фича.
Делают обьект (область у которого есть размер) и вот в этом черех угольнике
бегал шарик и не мог выйти, он проверял на то что он не выходит из квадрата котором он находиться.

и transparent проверяй этого бьекта
Пока компьютер еще не научился самостоятельно мыслить, доверять ему можно
Аватара пользователя
danquimby
UNIт
 
Сообщения: 54
Зарегистрирован: 29 янв 2015, 21:33
Откуда: Иваново
Skype: danquimby
  • Сайт


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

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

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