2015-07-28 1 views
1

В Unity У меня есть поплавок, который представляет расстояниеКак установить GameObject к точной длине в единстве

float distance = Vector3.Distance(start.position,end.position); 

Я хочу использовать этот поплавок, чтобы изменить размер объекта вдоль оси Z.. Я пробовал:

gameobject.transform.localScale.z = distance; 

Однако, это только изменение масштаба, мне нужно изменить объект игры на точную длину. Есть ли простой способ достичь этого?

+0

Не совсем. Лучше всего было бы дать объект, который вы собираетесь масштабировать в размере 1 единицы. Кроме того, в Unity нет концепции длины объекта. – Bart

+0

Да масштаб - это свойство, которое может использоваться для определения длины, ширины и высоты объекта gameObject. Однако вы можете назначить свойство коллайдера другими способами. –

ответ

6

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

public void newScale(GameObject theGameObject, float newSize) { 

    float size = theGameObject.GetComponent<Renderer>().bounds.size.y; 

    Vector3 rescale = theGameObject.transform.localScale; 

    rescale.y = newSize * rescale.y/size; 

    theGameObject.transform.localScale = rescale; 

} 
0

Единство не имеет такой вещи, как «Длина» для любого объекта. В шкале (1,1,1) единство учитывает, что каждый объект имеет одну единицу. это означает, что если вы хотите, чтобы ваш объект имел длину 3 единицы вдоль оси z, вы меняете масштаб на (1,1,3) и аналогично для другой оси. вот почему говорится, что вам нужно проявлять особую осторожность при разработке активов для единства, поскольку все они должны быть сделаны в соответствии с определенной шкалой.

+0

Проблема в том, что это будет во вложенной иерархии, поэтому масштаб основан на родительском. Поэтому мне нужно отвлечься от этого. Я также не знаю, как преобразовать расстояние в «единицы» в любом случае. Особенно учитывая, что единица является произвольной, в зависимости от того, какой примитив был создан. шкала 1 для капсулы отличается от шкалы 1 для кубов и т. д. –

+0

Куб даже со всех сторон, поэтому единство будет считать их равными 1 единице. в случае капсулы. высота больше ширины, поэтому единица будет рассматривать высоту как единицу и обрабатывать ширину в соответствии с разностью высоты. –

+0

для отношений с родительскими родителями вам придется отдельно применять изменение шкалы к ребенку, чтобы оно не мешало другим объектам. для решения проблемы с расстоянием до единицы вы можете попробовать свой собственный метод 'gameobject.transform.localScale.z = distance;' или использовать тот, который указан в вашем собственном ответе –

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