Как изменить scale в unity через код

от admin

Как изменить Scale объекта увеличив его лишь в одну сторону?

Добрый вечер! Как изменить размер к примеру, палочки, что бы она увеличилась лишь вверх, при этом не опускалась в низ по мере увеличения размера?
Задача стоит в том, что бы палочка, являющийся дочерним объектом вращающегося куба, должна увеличиваться в высоту. Но при изменении её Scale y, она пробивает своим дном куб. Подскажите,как решить данную задачу?

Пробовал компенсировать transform.position, но увеличение и смещение идёт не равномерное. По этому палочка всё равно отрывается от куба, и улетает в восвояси.

Я бы хотел получить увеличение длины палочки, аналогично инструменту Rect Tool, который просто удлиняет объект в одну сторону.

Мастера, прошу уделите минутку, и помогите в решении вопроса ,спасибо заранее.

Transform

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Description

Position, rotation and scale of an object.

Every object in a Scene has a Transform. It’s used to store and manipulate the position, rotation and scale of the object. Every Transform can have a parent, which allows you to apply position, rotation and scale hierarchically. This is the hierarchy seen in the Hierarchy pane. They also support enumerators so you can loop through children using:

Visual Scripting Components Part 1: Transform

In this article, we will get to know how we can move, rotate and scale Game Objects in Unity’s Visual Scripting. We’ll explore all the nodes Unity offers for working with the Transform component.

Properties

When working with Game Objects, we want to move and change them by accessing the Transform component’s properties.

Position

To access the position of a Game Object in the world, we use the Get Position node. To modify it, we’ll use the Set Position node.

Scale

We can use the Get Lossy Scale node to get the Object’s actual size.

Unity Visual Scripting – Get Loosty Scale

Rotation

When we want to rotate an Object, we have the Get Euler Angles & Set Euler Angles nodes; we can retrieve and modify the Object’s rotation angle through them.

Unity Visual Scripting – Get/Set Euler Angles

If we want to increase or decrease the existing rotation angle, we can use the Transform Rotate node. It also allows us to configure the Relative To option, which we can set to World or Self – determining whether to rotate the Object relative to itself or to the parent Game Object it is under.

Unity Visual Scripting – Rotate

Check out our high–quality Unity assets!

2D Hand Painted Sample

2D Hand Painted Dungeon

2D Hand Painted Bundle

Parenting

When we nest Objects in the hierarchy, we refer to them as a parent and child.
We have access to various nodes dedicated to controlling the Objects’ hierarchy.
In some cases, we will set a Game Object as a child affected by its parent, such as the case of a tank’s turret. We want the turret to rotate and move along with the tank’s body, so we’ll set it as a child of the body Object.

In the graph, we use the Get Parent & Set Parent nodes to control the Object’s parent and retrieve it.
We got another node for setting the parent, Set Parent (World Position Stays) node, and with it, as its name suggests, we can choose to retain the Object’s world position, rotation, and scale when changing the parent.

Unity Visual Scripting – Get/Set Parnet

A parent Object may have multiple children; we can ask for a specific child using the Get Child node or count them with the Get Child Count node.
Combing these nodes with the For Loop node, we access all the parent’s children.
The Detach Children node allows us to disconnect all the parent’s child Game Objects.

Unity Visual Scripting – Get Child, Get Child Count, Detach Children

Local vs World

We already know we can get and set the different properties of the Transform component; we can also transform Game Objects relative to their parent.

We can use nodes similar to those we met earlier:

  • Get/Set Local Position
  • Get/Set Local Scale
  • Get/Set Local Euler Angles

These nodes differ from the previous nodes we learned about in such they are retrieving or changing the properties based on the parent. For example, Get Local Position provides us the distance from the parent instead of the position in the world.

Unity Visual Scripting – Transform local

Outstanding Assets For Boosting Development

Moving Objects

Moving a Game Object is a fundamental part of creating any game in Unity, and as such, there are many ways to do so.
The Translate node moves a Game Object in the direction and distance based on the vector input. It’s a shortcut for a graph built of Get Position and Add nodes connected to Set Position.

Unity Visual Scripting – Translate

Another valuable node is Look At. With this node, we can rotate to follow another Game Object as it moves.

Unity Visual Scripting – Look At

For example, we can make the game’s camera follow another Game Object.
We add a Script Graph to the camera Game Object and connect the Update event to the Look At node. We attach the Game Object to the Target input using the Game Object Find node. When we move the Game Object at runtime, the camera will follow it around.

Movement Direction

We can get the direction axis the Transform faces with the Get Up, Get Right, and Get Forward nodes:

  • Get Up is for the green arrow.
  • Get Right is for the red arrow.
  • Get Forward is for the blue arrow.

Unity Visual Scripting – Transform Get Up, Get Right, Get Forward

When it comes to controlling the movement direction of a Game Object, these nodes come in handy.
For example, connecting the Get Up node to the Translate node will move the Object one unit in the direction of the green arrow.

Transforms

Transform используется для хранения GameObject фундаментального объекта в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
Просматривать в Словарь положение, поворот, масштаб и родительское состояние и, таким образом, очень важный. К GameObject всегда будет присоединен компонент Transform — невозможно удалить Transform или создать GameObject без него.

Компонент преобразования

Компонент Transform определяет Положение, Поворот и Масштаб каждого объекта в классе scene Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь . У каждого GameObject есть Transform.

Свойства

Свойства: Функции:
Position Положение преобразования в координатах X, Y и Z.
Rotation Вращение Transform вокруг осей X, Y и Z, измеряемое в градусах.
Scale Масштаб преобразования по осям X, Y и Z. Значение «1» — исходный размер (размер, с которым был импортирован объект).

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

Редактирование преобразований

Преобразования выполняются в 3D-пространстве по осям X, Y и Z или в 2D-пространстве только по осям X и Y. В Unity эти оси представлены красным, зеленым и синим цветами соответственно.

Преобразование, показывающее цветовое кодирование осейПреобразование, показывающее цветовое кодирование осей

Преобразование можно редактировать в Вид сцены Интерактивный вид создаваемого вами мира. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Дополнительная информация
См. в Словарь или изменив его свойства в Инспектор Окно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. Подробнее
См. в Словарь . В сцене вы можете изменять Transforms с помощью инструментов Move, Rotate и Scale. Эти инструменты расположены в верхнем левом углу редактора Unity.

Инструменты «Просмотр», «Перенос», «Поворот» и «Масштаб»Инструменты «Просмотр», «Перенос», «Поворот» и «Масштаб»

Инструменты можно использовать для любого объекта сцены. При нажатии на объект вы увидите инструмент gizmo Графическое наложение, связанное с GameObject в сцене и отображаемое в вид сцены. Встроенные инструменты сцены, такие как инструмент перемещения, представляют собой гизмо, и вы можете создавать собственные гизмо, используя текстуры или сценарии. Некоторые гизмо отрисовываются только при выборе игрового объекта, в то время как другие гизмо отрисовываются редактором независимо от того, какие игровые объекты выбраны. Подробнее
See in Словарь появляются внутри него. Внешний вид гизмо зависит от того, какой инструмент выбран.

Transform gizmoTransform gizmo

Когда вы щелкнете и перетащите одну из трех осей гизмо, вы заметите, что ее цвет изменится на желтый. Когда вы перетаскиваете мышь, вы увидите, как объект перемещается, вращается или масштабируется вдоль выбранной оси. Когда вы отпустите кнопку мыши, ось останется выбранной.

Преобразование, показывающее выбранную (желтую) ось XПреобразование, показывающее выбранную (желтую) ось X

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

Воспитание детей

Родительские обязанности — одна из самых важных концепций, которые необходимо понимать при использовании Unity. Когда GameObject является родителем объектом, который содержит дочерние объекты в иерархии. Когда GameObject является Родителем другого GameObject, Дочерний GameObject будет перемещаться, вращаться и масштабироваться точно так же, как и его Родитель. Вы можете думать о воспитании детей как об отношениях между вашими руками и вашим телом; всякий раз, когда ваше тело двигается, ваши руки также двигаются вместе с ним. Подробнее
Посмотреть в Словарь другого игрового объекта, дочернего элемента GameObject будет двигаться, вращаться и масштабироваться точно так же, как и его Parent. Вы можете думать о воспитании детей как об отношениях между вашими руками и вашим телом; всякий раз, когда ваше тело двигается, ваши руки также двигаются вместе с ним. Дочерние объекты также могут иметь своих собственных дочерних элементов и так далее. Таким образом, ваши руки могут рассматриваться как «дети» ваших рук, и тогда каждая рука имеет несколько пальцев и т. д. Любой объект может иметь несколько потомков, но только одного родителя. Эти несколько уровней отношений родитель-потомок образуют иерархию преобразования. Объект на самом верху иерархии (то есть единственный объект в иерархии, не имеющий родителя) называется корневым.

Вы можете создать родительский элемент, перетащив любой игровой объект из Просмотра иерархии на другой. Это создаст отношения «родитель-потомок» между двумя игровыми объектами.

Пример иерархии «родитель-потомок». Игровые объекты со стрелками слева от их имен являются родителями.Пример иерархии «родитель-потомок». Игровые объекты со стрелками слева от их имен являются родителями.

Обратите внимание, что значения преобразования в Инспекторе для любого дочернего игрового объекта отображаются относительно значений преобразования родительского объекта. Эти значения называются локальными координатами. Возвращаясь к аналогии с телом и руками, положение вашего тела может измениться, когда вы идете, но ваши руки все равно будут прикреплены в том же относительном положении. Для построения сцены обычно достаточно работать с локальными координатами дочерних объектов, но в игровом процессе часто бывает полезно найти их точное положение в мировом пространстве или глобальные координаты. API сценариев для компонента Transform имеет отдельные свойства для локального и глобального положения, поворота и масштаба, а также позволяет преобразовать любую точку между локальными и глобальными координатами.

Ограничения при неравномерном масштабировании

Неравномерное масштабирование — это когда Scale в Transform имеет разные значения для x, y и z; например (2, 4, 2). Напротив, равномерное масштабирование имеет одно и то же значение для x, y и z; например (3, 3, 3). Неравномерное масштабирование может быть полезно в некоторых конкретных случаях, но оно вносит несколько странностей, которые не возникают при равномерном масштабировании:-

  • Некоторые компоненты не полностью поддерживают неравномерное масштабирование. Например, некоторые компоненты имеют круглый или сферический элемент, определяемый свойством radius, среди них Sphere Collider Компонент коллайдера в форме сферы, который обрабатывает столкновения для игровых объектов, таких как мячи или другие вещи, которые можно приблизительно представить как сферу для целей физики. Подробнее
    См. в Словарь , Capsule Collider Компонент коллайдера в форме капсулы, который обрабатывает коллизии игровых объектов, таких как бочки и конечности персонажей. Подробнее
    См. в Словарь , Light и Источник аудио Компонент, который воспроизводит аудиоклип в сцене для слушателя звука или через аудиомикшер. Подробнее
    См. в Словарь . В подобных случаях круглая форма не станет эллиптической при неравномерном масштабировании, как можно было бы ожидать, а просто останется круглой.
  • Если дочерний объект имеет родительский объект с неравномерным масштабом и повернут относительно этого родительского объекта, он может выглядеть перекошенным или «срезанным». Есть компоненты, которые поддерживают простое неравномерное масштабирование, но не работают корректно при таком перекосе. Например, скошенный Box Collider компонент коллайдера в форме куба, который обрабатывает коллизии игровых объектов, таких как игральные кости и кубики льда. Подробнее
    См. в Словарь не будет соответствовать форме отображаемого mesh Основной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
    Точно смотрите в Словарь .
  • Из соображений производительности дочерний объект родительского объекта с неравномерным масштабом не будет автоматически обновляться при повороте. В результате может показаться, что форма дочернего элемента резко меняется, когда масштаб в конечном итоге обновляется, например, если дочерний объект отсоединяется от родительского.

Важность масштаба

Масштаб преобразования определяет разницу между размером сетки в приложении для моделирования и размером этой сетки в Unity. Размер сетки в Unity (и, следовательно, масштаб преобразования) очень важен, особенно во время моделирования физики. По умолчанию используется физический движок Система, моделирующая аспекты физических систем, чтобы объекты могли правильно ускоряться и подвергаться воздействию столкновений, гравитации и другие силы. Подробнее
См. в Словарь предполагает, что одна единица в мировом пространстве соответствует одному метру. Если объект очень большой, может показаться, что он падает в «замедленной съемке»; симуляция на самом деле правильная, поскольку фактически вы наблюдаете, как очень большой объект падает с большого расстояния.

Есть три фактора, которые могут повлиять на масштаб вашего объекта:

  • Размер сетки в приложении для 3D-моделирования.
  • Настройка Коэффициент масштабирования сетки в Настройках импорта объекта.
  • Значения Масштаб вашего компонента преобразования.

В идеале не следует настраивать Масштаб объекта в компоненте преобразования. Лучший вариант — создавать свои модели в реальном масштабе, чтобы вам не пришлось менять масштаб преобразования. Следующим лучшим вариантом является настройка масштаба импорта вашей сетки в Настройки импорта для вашей отдельной сетки. Определенные оптимизации выполняются в зависимости от размера импорта, и создание экземпляра объекта с настроенным значением масштаба может снизить производительность. Дополнительные сведения см. в разделе об оптимизации масштаба на странице с описанием компонентов Rigidbody.

Читать:
Как найти qnap в локальной сети

Похожие статьи