В настоящее время я пытаюсь внедрить сложное поле поиска в единый проект, над которым я работаю, где у пользователя есть возможность создавать точки в сцене.Моя цель состоит в том, чтобы создать пользовательскую фигуру для этого пользователя на основе созданных им точек, а затем я хотел бы определить, находятся ли другие объекты внутри этой фигуры, аналогично обнаружению точки внутри сложного корпуса (все еще шатко).на теории позади этого, но пример можно найти здесь ).Если возможно, я бы также хотел, чтобы фигура обновлялась сама, если впоследствии точки перемещались, придавая ей почти упругое, растягивающееся ощущение.
Пока что каждый учебник или ресурс, которые я нашел в Интернете, делает точнотот же базовый пример, где сценарий назначает новые вершины, UV и треугольники пользовательской сетке, чтобы создать плоскость, используя два треугольника, но это разочаровывающе просто и совершенно бесполезно, когда я просто не знаю, как будет выглядеть окончательная форма,или какие треугольники на самом деле нарисовать, даже если у пользователя всего пять точек на сцене.
На данный момент наиболее близким визуальным представлением, которое я мог придумать, является List, отслеживающий точки пользователя, и сценарий, который просто рисует группу псевдотреугольников, используя LineRenderers для соединения каждой точки, дажете, которые не являются внешними гранями, повторяя список несколько раз.Хотя это выглядит близко к тому, что я хочу, на самом деле это бесполезно, поскольку я не знаю, как «заполнить» эти лица, и я все еще относительно потерян, когда дело доходит до того, является ли объектвнутри этого корпуса, как красная сфера, показанная в примере ниже.
Я также могу многократно уничтожать и перерисовывать эти строки во время обновления ()метод, который позволяет мне захватывать точку и перемещать ее, что приводит к динамическому изменению формы, но это приводит к нежелательному эффекту мигания, которого я бы скорее избежал на данный момент.
Поскольку это такой широкий вопрос, я также включил метод, который я использую, чтобы нарисовать эти линии ниже, который связывает ряд линий в форме треугольников с пустым игровым объектом для легкого уничтожения и отдыха.:
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);
}
}
}
Если кто-то сталкивался с подобной проблемой в другом месте, которую я просто не мог найти, пожалуйста, дайте мне знать!Все, от знаний о создании пользовательского меша до более глубокого и понятного новичку объяснения, находится ли точка внутри выпуклой оболочки, было бы весьма полезно.Если это вообще уместно, я работаю в VR и работаю с версией 2018.2.6f1, чтобы гарантировать, что пакет Oculus rift и Unity играют хорошо, но у меня не было проблем с работой в среде несколько месяцев назад.
Спасибо!