yurickon Posted January 21, 2023 Share Posted January 21, 2023 Всем привет! Уважаемые разработчики, подскажите пожалуйста! Я размещаю на поверхности какие-либо объекты (грибы, растения, вещи инвентаря и т.д.) Координаты X и Y тут все просто. Но как найти высоту поверхности под/над размещаемом объекте? Подскажите, есть ли метод позволяющий, к примеру, по известным глобальным координатам X и Y определить из карты высот, нужную мне, что бы spawn-предмет не проваливался или не парил под/над поверхностью? Или есть другой способ? Спасибо! Link to comment
dmitrij.shevchenko Posted January 21, 2023 Share Posted January 21, 2023 Обычно для этого вручную бросают пустышку, которая и служит точкой спавна чего-то. Link to comment
yurickon Posted January 22, 2023 Author Share Posted January 22, 2023 20 hours ago, dmitrij.shevchenko said: Обычно для этого вручную бросают пустышку, которая и служит точкой спавна чего-то. Да, можно, накидал пустышек по всему миру и спавни по их координатам что угодно... Это выход из ситуации в какой-то мере. Только много ручной работы, и нет рандомности при спавне. А вдруг есть метод который всё это упращает?) Помню в Unity делал игру, там это реализовывал. Летом можно было рассаживать ягоду, осенью грибы в местах о которых не знал сам. И росли они при каждом новом заходе в игру в разных местах, в лесу, в определенной области. Как то так. Link to comment
dmitrij.shevchenko Posted January 22, 2023 Share Posted January 22, 2023 7 hours ago, Yurickon said: Да, можно, накидал пустышек по всему миру и спавни по их координатам что угодно... Это выход из ситуации в какой-то мере. Только много ручной работы, и нет рандомности при спавне. А вдруг есть метод который всё это упращает?) Помню в Unity делал игру, там это реализовывал. Летом можно было рассаживать ягоду, осенью грибы в местах о которых не знал сам. И росли они при каждом новом заходе в игру в разных местах, в лесу, в определенной области. Как то так. Для этого у Clutter'a есть параметр Seed, можно дергать через Set Seed и получать псевдослучайный результат, остальное Clutter посчитает сам в пределах области. С полностью случайным спавном есть проблема - никому не нужно чтобы грибы вдруг появились в стволе дерева, или в камне, или трава выросла там где лежит камень. Link to comment
moody_pooch Posted January 23, 2023 Share Posted January 23, 2023 Добрый день! Для нахождения координат точки поверхность над/под объектом, Вы можете воспользоваться методом getIntersection() следующим образом: float z_shift = 100; // начальная точка линии, по которой ищем пересечение vec3 p0 = node.Position; // конечная точка линии, по которой ищем пересечение vec3 p1 = p0 + new vec3(0.0, 0.0, -z_shift); Unigine.Object obj = World.GetIntersection(p0, p1, intersectionMask, intersection); // проверка на то, что пересечение было найдено if (obj) { vec3 point = intersection.Point; // точка пересечения с поверхностью node.Position = point; // смещаем ноду в точку пересечения } где intersectionMask - маска поверхности, на которую Вы хотите опустить свою ноду (не совпадающая с маской самой ноды, чтобы не находить пересечение с ней же); z_shift - максимальное расстояние по оси Z, на котором ищем пересечение с поверхностью. В зависимости от значения z_shift Вы можете искать пересечения, как над нодой, так и под ней. В этой статье приведена более подробная информация о getIntersection(). Для того, чтобы переместить ноду на ближайшую поверхность при работе в редакторе, можете воспользоваться кнопкой Drop To Ground: Link to comment
yurickon Posted January 23, 2023 Author Share Posted January 23, 2023 Быстро и профессионально. Всё работает. Спасибо за ответ! Link to comment
Recommended Posts