Пятница, 15 Ноября 2024, 01:01

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Динамическая отрисовка линии.
absolute_nullДата: Воскресенье, 22 Апреля 2018, 19:31 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем добрый вечер. Столкнулся с такой проблемой: пытаюсь рисовать динамически линию от одной точки на экране к другой. Механика: Пальцем нажимаю на экран, и веду по нему, и, от точки нажатия, до места, куда я повёл, рисуется линия, которая может увеличиваться, или, если я поведу обратно, уменьшаться. Так же эта линия прямая, и вращается за движением пальца. Ну т.е. рисуется на апдейте от точки нажатия до точки, куда я повёл палец.

Я дошёл до динамического измерения расстояния, между двумя точками. Вот код:

Код
public Vector2 mousePos1;
    public Vector2 mousePos2;

    public LineRenderer lineRenderer;

    private void Start()
    {
        lineRenderer = GetComponent<LineRenderer>();
        mousePos1 = new Vector2(0, 0);
    }

    private void OnMouseDown()
    {
        mousePos2 = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }

    private void OnMouseDrag()
    {
        if (mousePos2 != new Vector2(0, 0))
        {
            mousePos1 = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Debug.Log(mousePos1);
            Debug.Log(Vector2.Distance(mousePos2, mousePos1));

            lineRenderer.SetPosition(1, new Vector3( mousePos2.x, 0, 0));
           
        }
    }


Т.е. у меня получилось определять точку нажатия, и следить за второй точкой. Но я не могу разобраться с самой отрисовкой линии. С LineRenderer проблемы, и походу, он не подойдёт для такой вещи.
InsaneSystemsДата: Воскресенье, 22 Апреля 2018, 19:52 | Сообщение # 2
участник
Сейчас нет на сайте
absolute_null, LineRenderer отлично подойдёт для такой задачи. В вашем коде как минимум одна критичная ошибка - вы задаёте только одну точку LineRenderer, а для построения линии нужно минимум две.

Что сделать для решения проблемы:
1. Задавать две точки LineRenderer.
2. Задавать для каждой точки две координаты как минимум (x и y, у вас сейчас задаётся только одна координата x)
3. Заметьте, что мышь у вас в двумерном пространстве экрана, а LineRenderer работает в трёхмерном пространстве игры. Используя Camera.main.ScreenToWorldPoint вы мыслите в верном направлении, но отмечу, что это может давать не всегда корректные результаты.

Как итог, ваш код мог бы выглядеть примерно следующим образом:
Код

    public Vector2 mousePos1;
    public Vector2 mousePos2;

    public LineRenderer lineRenderer;

    private void Start()
    {
        lineRenderer = GetComponent<LineRenderer>();
        mousePos1 = new Vector2(0, 0);
    }

    private void OnMouseDown()
    {
        mousePos2 = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }

    private void OnMouseDrag()
    {
        if (mousePos2 != new Vector2(0, 0))
        {
            mousePos1 = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Debug.Log(mousePos1);
            Debug.Log(Vector2.Distance(mousePos2, mousePos1));

            lineRenderer.SetPosition(0, new Vector3(mousePos1.x, mousePos1.y, 0));
            lineRenderer.SetPosition(1, new Vector3(mousePos2.x, mousePos2.y, 0));
           
        }
    }


Однако не факт, что он заработает корректно.


Сообщение отредактировал InsaneSystems - Воскресенье, 22 Апреля 2018, 19:54
absolute_nullДата: Воскресенье, 22 Апреля 2018, 20:50 | Сообщение # 3
был не раз
Сейчас нет на сайте
InsaneSystems, да, спасибо. Всё решилось, когда я понял механизм LineRenderer. Не подумал, что нужно использовать две точки, думал, что в SetPosition и так можно задать две координаты типа Vector, 2 или 3, и про индексы не знал, в описании мало что написано.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг