Как построить набор точек на земле в Unity3D? - PullRequest
0 голосов
/ 16 апреля 2019

Я должен нанести на карту набор точек на своем проекте Unity3D.Двухмерный график точек выглядит примерно так: Plot [1].

Метод грубой силы будет заключаться в назначении gameObjects для каждой точки, но, поскольку существуют тысячи точек, это будет дорогостоящим.Я ищу возможное использование системы частиц Unity для достижения моей цели.На самом деле любые возможные методы будут в порядке.

Моя последняя цель - выделить точки на земле, чтобы указать путь, по которому должен идти мой игрок.

Любое предложение будет оценено.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Посмотрите на компонент Unity LineRenderer . Он принимает массив Vector3, который он использует для построения линии. Вы можете назначить точки из инспектора или использовать код, чтобы назначить весь массив сразу, или пункт за точкой.

private LineRenderer lineRenderer;

public void AddPosition(Vector3 position)
{
    lineRenderer.positionCount += 1;
    lineRenderer.SetPosition(lineRenderer.positionCount - 1, position);
}

public void SetPositions(Vector3[] positionArray)
{
    lineRenderer.SetPositions(positionArray);
}

С помощью linerenderer вы можете установить все виды свойств, таких как цвет и ширина. Вы также можете легко отключить и включить весь объект.

0 голосов
/ 17 апреля 2019

Вы также можете подумать о фильтрации ваших очков.Людям не нужна и часто не может использовать точность, которую могут генерировать машины.Пример фильтра:

const float MinDistanceSqr = 0.00001f; // Min Distance of 0.001 (1mm)
const float MaxCosine = 0.999f; // Approx 2.57 degrees

private Vector3[] FilterPoints(Vector3[] source) {

    var filtered = new Stack<Vector3>(source.Length);

    // Push first point
    filtered.Push(source[0]);

    for ( var i = 1; i < source.Length; i++ ) {
        var step = filtered.Peek() - source[i];

        // Check Minimum Distance
        if (step.sqrMagnitude < MinDistanceSqr)
            continue; // ignore this point

        // if not last point
        if ( i + 1 < source.Length) {
            // Check Minimum Angle to next segment
            var nextStep = source[i] - source[i + 1];

            if (Vector3.Dot(step, nextStep) > MaxCosine)
                continue; // ignore this point
        }

        // Passed all filters, add to stack
        filtered.Push(source[i]);
    }


    return filtered.ToArray();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...