В настоящее время я пытаюсь реализовать сложное поле поиска в проекте Unity, над которым я работаю, где пользователь имеет возможность создавать точки в сцене. Моя цель - создать настраиваемую форму для этого пользователя на основе созданных им точек, а затем я хотел бы определить, находятся ли другие объекты внутри этой формы, аналогично обнаружению точки внутри сложного корпуса (все еще шаткого на основе теории, но пример можно найти здесь). Если возможно, я бы также хотел, чтобы форма обновлялась, если точки позже перемещаются, придавая ей ощущение почти эластичности и эластичности.
До сих пор каждый учебник или ресурс, который я нашел в Интернете, выполняет один и тот же базовый пример, где сценарий назначает новые вершины, UV и треугольники пользовательской сетке, чтобы создать плоскость с использованием двух треугольников, но это разочаровывающе просто и явно бесполезно. когда я просто не знаю, как будет выглядеть окончательная форма или какие треугольники на самом деле нарисовать, даже если у пользователя всего пять точек в сцене.
На данный момент самое близкое визуальное представление, которое я мог придумать, - это список, отслеживающий точки пользователя, и скрипт, который просто рисует кучу псевдотреугольников, используя LineRenderers для соединения каждой точки, даже если она не является внешней. лиц, повторяя список несколько раз. Хотя это выглядит близко к тому, что я хочу, на самом деле это никоим образом не полезно, поскольку я не знаю, как `` заполнить '' эти лица, и я все еще относительно заблудился, когда дело доходит до того, является ли объект внутри этого корпуса, как красная сфера, показанная в примере ниже.
Я также могу многократно разрушать и перерисовывать эти строки во время метода Update (), что позволяет мне захватывать точку и перемещать ее, что приводит к динамическому изменению формы, но это приводит к нежелательному эффекту мигания, которого я бы скорее избегал Теперь.
Поскольку это такой широкий вопрос, я также включил метод, который я использую для рисования этих линий ниже, который соединяет связку линий в форме треугольников с пустым игровым объектом для легкого разрушения и воссоздания:
void drawHull()
{
if (!GameObject.Find("hullHold"))
{
hullHold = new GameObject();
hullHold.name = "hullHold";
}
foreach(GameObject point in points)
{
for (int i = points.IndexOf(point); i < points.Count - 2; i++)
{
lineEdge = Instantiate(lineReference);
lineEdge.name = "Triangle" + i;
lineEdge.GetComponent<LineRenderer>().startColor = Color.black;
lineEdge.GetComponent<LineRenderer>().endColor = Color.black;
lineEdge.GetComponent<LineRenderer>().positionCount = 3;
lineEdge.GetComponent<LineRenderer>().SetPosition(0, points[points.IndexOf(point)].transform.position);
lineEdge.GetComponent<LineRenderer>().SetPosition(1, points[i + 1].transform.position);
lineEdge.GetComponent<LineRenderer>().SetPosition(2, points[i + 2].transform.position);
lineEdge.GetComponent<LineRenderer>().loop = true;
lineEdge.SetActive(true);
lineEdge.transform.SetParent(hullHold.transform);
}
}
}
Если кто-то сталкивался с подобной проблемой в другом месте, которую я просто не мог найти, дайте мне знать! Все, что угодно, от дополнительных знаний о создании пользовательской сетки до более подробного и удобного для новичков объяснения определения того, находится ли точка внутри выпуклой оболочки, было бы весьма полезно. Если это вообще актуально, я работаю в виртуальной реальности и использую версию 2018.2.6f1, чтобы гарантировать, что пакет Oculus rift и Unity работают нормально, но у меня не было никаких проблем с работой в среде, отставшей на несколько месяцев.
Спасибо!