Моделирование в Unity3D, «лепка» объектов на рамках класса Mesh!? Всем привет! Возникает проблема в Unity3D в плане "лепки" или моделировании объектов, т.е. я хочу создавать, например, сферу в рамках процедурной генерации, а в самой игре изменять форму этой сферы, например при нажатии "мышкой" на определенную область увеличивать или втягивать эту область, как на террейне. Я научился создавать простые объекты, от квадра до сложных фигур, но я не знаю, как заставить в игре заставить изменить эти формы, как подобное происходит при редактировании террейна. В поиске уже все обыскал, есть хорошие примеры, но они не застрагивают этой темы и решается ли этот вопрос с помощью стандартных методов в Mesh или надо затрагивать геометрию объекты, и самому продумывать методы по увеличению или втягиванию конкретной области объекта? Дополнительный вопрос - можно ли как-то достать и посмотреть класс Terrain, чтобы хоть узнать, как он изменяется... Заранее спасибо за любую помощь!

21 Авг 2019 в 06:16
213 +1
0
Ответы
1

Привет! Для изменения формы объектов в Unity3D можно использовать класс Mesh. Для начала, вам нужно создать кастомный скрипт, который будет отслеживать нажатия мыши и изменять вершины Mesh объекта в соответствии с этими действиями.

Примерно так будет выглядеть код:

using UnityEngine;
public class MeshDeformer : MonoBehaviour {
Mesh mesh;
Vector3[] originalVertices; // сохраняем оригинальные вершины для восстановления формы
void Start() {
mesh = GetComponent<MeshFilter>().mesh; // получаем доступ к Mesh объекту
originalVertices = mesh.vertices; // сохраняем оригинальные вершины
}
void Update() {
if (Input.GetMouseButtonDown(0)) {
DeformMesh();
}
}
void DeformMesh() {
Vector3[] vertices = mesh.vertices;
// модифицируем вершины, например, увеличиваем Y координату на 1
for (int i = 0; i < vertices.Length; i++) {
vertices[i].y += 1;
}
mesh.vertices = vertices; // применяем измененные вершины к Mesh
mesh.RecalculateNormals(); // пересчитываем нормали для корректного отображения
}
public void ResetMesh() {
mesh.vertices = originalVertices; // восстанавливаем оригинальные вершины
mesh.RecalculateNormals();
}
}

Просто пример, который увеличивает Y координату вершин объекта на 1. Вы можете изменить логику деформации по своему усмотрению. Также, не забудьте добавить Collider к вашему объекту, чтобы учитывать коллизии при изменении формы.

Что касается класса Terrain, то его исходный код закрыт. Однако, вы можете изучить документацию Unity по работе с террейном, чтобы понять основные принципы изменения террейна в игре.

Надеюсь, это поможет вам разобраться с моделированием объектов в Unity3D! Удачи!

20 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 093 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир