Поиск…


Синтаксис

  • void Transform.Translate (Vector3 translation, Space relativeTo = Space.Self)
  • void Transform.Translate (float x, float y, float z, Space relativeTo = Space.Self)
  • void Transform.Rotate (Vector3 eulerAngles, Space relativeTo = Space.Self)
  • void Transform.Rotate (float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self)
  • void Transform.Rotate (ось Vector3, угол поплавка, космос relativeTo = Space.Self)
  • void Transform.RotateAround (Vector3 point, Vector3 axis, float angle)
  • void Transform.LookAt (Transform target, Vector3 worldUp = Vector3.up)
  • void Transform.LookAt (Vector3 worldPosition, Vector3 worldUp = Vector3.up)

обзор

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

Перевод (перемещение) объекта

// Move an object 10 units in the positive x direction
transform.Translate(10, 0, 0);

// translating with a vector3
vector3 distanceToMove = new Vector3(5, 2, 0);
transform.Translate(distanceToMove);

Поворот объекта

// Rotate an object 45 degrees about the Y axis
transform.Rotate(0, 45, 0);

// Rotates an object about the axis passing through point (in world coordinates) by angle in degrees
transform.RotateAround(point, axis, angle);
// Rotates on it's place, on the Y axis, with 90 degrees per second
transform.RotateAround(Vector3.zero, Vector3.up, 90 * Time.deltaTime);

// Rotates an object to make it's forward vector point towards the other object
transform.LookAt(otherTransform);
// Rotates an object to make it's forward vector point towards the given position (in world coordinates)
transform.LookAt(new Vector3(10, 5, 0));

Более подробную информацию и примеры можно найти в документации Unity .

Также обратите внимание, что если игра использует жесткие тела, то преобразование не должно взаимодействовать напрямую (если только твердое тело не имеет isKinematic == true ). В этом случае используйте AddForce или другие подобные методы, чтобы действовать прямо на жесткое тело.

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

Unity работает с иерархиями, чтобы поддерживать ваш проект. Вы можете назначить объекты в иерархии с помощью редактора, но вы также можете сделать это с помощью кода.

Воспитание

Вы можете установить родитель объекта следующими способами

var other = GetOtherGameObject();
other.transform.SetParent( transform );
other.transform.SetParent( transform, worldPositionStays );

Всякий раз, когда вы устанавливаете родительский элемент transforms, он будет удерживать позицию объектов как мировое положение. Вы можете сделать эту позицию относительной, передав false для параметра worldPositionStays .

Вы также можете проверить, является ли объект дочерним по отношению к другому преобразованию следующим способом

other.transform.IsChildOf( transform );

Получение ребенка

Так как объекты могут быть отслежены друг от друга, вы также можете найти детей в иерархии. Самый простой способ сделать это - использовать следующий метод

transform.Find( "other" );
transform.FindChild( "other" );

Примечание: вызовы FindChild Найдите под капотом

Вы также можете искать детей по иерархии. Вы делаете это, добавляя «/», чтобы указать уровень глубже.

transform.Find( "other/another" );
transform.FindChild( "other/another" );

Другой способ извлечения ребенка - использовать GetChild

transform.GetChild( index );

Для GetChild требуется целое число как индекс, который должен быть меньше общего числа детей

int count = transform.childCount;

Изменение индекса Sibling

Вы можете изменить порядок детей GameObject. Вы можете сделать это, чтобы определить порядок рисования для детей (при условии, что они находятся на одном уровне Z и тот же порядок сортировки).

other.transform.SetSiblingIndex( index );

Вы также можете быстро установить индекс sibling для первого или последнего, используя следующие методы

other.transform.SetAsFirstSibling();
other.transform.SetAsLastSibling();

Отсоединение всех детей

Если вы хотите освободить всех детей преобразования, вы можете сделать это:

foreach(Transform child in transform)
{
    child.parent = null;
}

Кроме того, Unity предоставляет метод для этой цели:

transform.DetachChildren();

В принципе, и looping, и DetachChildren() устанавливают родителям детей с глубиной до нуля, что означает, что у них не будет родителей.

(дети первой глубины: преобразования, непосредственно связанные с преобразованием)



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow