@marsep

Моделирование в Unity3D, «лепка» объектов на рамках класса Mesh!?

Всем привет! Возникает проблема в Unity3D в плане "лепки" или моделировании объектов, т.е. я хочу создавать, например, сферу в рамках процедурной генерации, а в самой игре изменять форму этой сферы, например при нажатии "мышкой" на определенную область увеличивать или втягивать эту область, как на террейне. Я научился создавать простые объекты, от квадра до сложных фигур, но я не знаю, как заставить в игре заставить изменить эти формы, как подобное происходит при редактировании террейна. В поиске уже все обыскал, есть хорошие примеры, но они не застрагивают этой темы и решается ли этот вопрос с помощью стандартных методов в Mesh или надо затрагивать геометрию объекты, и самому продумывать методы по увеличению или втягиванию конкретной области объекта? Дополнительный вопрос - можно ли как-то достать и посмотреть класс Terrain, чтобы хоть узнать, как он изменяется... Заранее спасибо за любую помощь!
  • Вопрос задан
  • 2617 просмотров
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Стандартных средств для моделирования нет, нужно самому всё писать или брать плагин.

Посмотреть исходники можно с помощью декомпилятора, берите dotPeek или .NET Reflector и вперёд. Всё посмотреть не получится, Terrain и TerrainData написаны на сях, и их исходники можно достать только у разработчиков, но вот TerrainInspector и HeightmapPainter можно, там используются рейкасты по колладеру террэйна:
public bool Raycast(out Vector2 uv, out Vector3 pos)
{
    RaycastHit hit;
    Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
    if (this.m_Terrain.GetComponent<Collider>().Raycast(ray, out hit, float.PositiveInfinity))
    {
        uv = hit.textureCoord;
        pos = hit.point;
        return true;
    }
    uv = Vector2.zero;
    pos = Vector3.zero;
    return false;
}

Насколько я понимаю, в террейне не модифицируются вершины напрямую, он использует текстурные карты, а полученные координаты используются для рисования по карте высот, из которой потом строится меш.

Короче говоря, есть несколько вариантов реализации. Для поиска точки приложения можете повесить мешколлайдер на свою геометрию и рейкастить по нему. Либо можете рейкастить по геометрии с помощью математики, в случае со сферой можно много где сэкономить. Для изменения меша вам нужна карта высот, по которой вы с нуля создаёте меш и не беспокоитесь о геометрии. Как вариант, можете написать структуру данных, которая сумеет находить соседние вершины, тогда сможете работать с существующим мешом. В принципе, одно другому не мешает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы