unity3d
Трансформации
Поиск…
Синтаксис
- 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()
устанавливают родителям детей с глубиной до нуля, что означает, что у них не будет родителей.
(дети первой глубины: преобразования, непосредственно связанные с преобразованием)