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

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

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

Синтаксис:
Используется 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;

        }
    }
 

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

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

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

СообщениеДобавлено: 15 сен 2017, 08:10
denprox
Спасибо!) Так и сделаю!

p.s. в скрипте ActualObject не нужен)) Это осталось от промежуточных попыток.

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

СообщениеДобавлено: 18 сен 2017, 16:03
danquimby
[quote="denprox"]Спасибо!) Так и сделаю!

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

и transparent проверяй этого бьекта