2016-06-15 2 views
0

Я создаю простую игру, и мне нужно создать расширяющийся цилиндр. Я знаю, как обычно это делать - путем изменения точки поворота объектов и масштабирования, но теперь у меня есть текстура, и я не хочу, чтобы она растягивалась.Расширение текстурированной игрыObject плавно в Unity

Я сражался за добавление небольших сегментов к концу цилиндра, когда он должен расти, но это не будет работать гладко и может повлиять на производительность. Вы знаете какое-либо решение этого?

Эта текстура веревки, что я использую сейчас (но это может измениться в будущем):

Перед масштабированием

enter image description here

После масштабирования

enter image description here

+0

Как выглядит текстура до и после шкалы? Измените свой вопрос с помощью (изображений). – Programmer

+0

@Programmer Я обновил сообщение – clone

+0

до и после изображений не одно изображение. – Programmer

ответ

0

Я не хочу, чтобы он растягивался

Это непросто осуществить, но это возможно.

У вас есть два способа сделать это.

. Один из них заключается в процедурной генерации канатной сетки и назначении материала в режиме реального времени. Это сложно для новичков. Не могу помочь в этом.

. Другое решение, не требующее генерации сетчатой ​​процедурной сетки. Измените плитки, пока объект изменит размер.

Для этого, ваша текстура должна быть черепичной. Вы не можете просто использовать случайную текстуру онлайн. Кроме того, вам нужна нормальная карта, чтобы заставить ее выглядеть как веревка. Вот tutorial для создания текстуры веревки с нормальной картой в Майе. Есть и другие части видео, которые вы также должны смотреть.

Выберите текстуру, изменять Texture Type к Texture, изменить Wrap Mode к Repeat затем нажмите Применить .

Получить MeshRenderer из Mesh затем получить Material 3D-объекта из MeshRenderer .use ropeMat.SetTextureScale изменить плитки текстуры. Например, при изменении значений кодаи yTile ниже, текстура сетки будет черепицей.

public float xTile, yTile; 
public GameObject rope; 
Material ropeMat; 

void Start() 
{ 
    ropeMat = rope.GetComponent<MeshRenderer>().material; 
} 

void Update() 
{ 
    ropeMat.SetTextureScale("_MainTex", new Vector2(xTile, yTile)); 
} 

Теперь вы должны найти способ отображения значений xTile и yTile до размера Mesh. Это не просто. Here - это полный способ расчета значения xTile и yTile при повторной калибровке сетки/веревки.

+0

Спасибо! Я думаю, что это будет отлично работать для меня, я попробую, как только смогу. – clone

+0

@clone Я проверил код, который я связал в ответе, и, похоже, он работает. Вы можете просто использовать его напрямую. Единственное, что осталось, это сделать цветную и нормальную карту. – Programmer

+0

У меня есть немного проблем с вычислением значения 'xTile' и' yTile'. Я в основном использую 'void UpdateTiling()' связанный с формой скрипт, и он частично работает, но он изменяет текстуру на неправильной оси (когда я масштабирую ее по оси y, ничего не происходит, но на оси z это фрагментирует текстуру, как это необходимо при масштабировании на у). Также я не знаю, как я могу найти 'planeSizeX = 10f' и' planeSizeZ = 10f' для моего цилиндра. Буду признателен за ваш совет. – clone

Смежные вопросы