Szukaj…


Składnia

  • void Transform.Translate (tłumaczenie Vector3, 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 (oś Vector3, kąt zmiennoprzecinkowy, Space relativeTo = Space.Self)
  • void Transform.RotateAround (punkt Vector3, oś Vector3, kąt zmiennoprzecinkowy)
  • void Transform.LookAt (Przekształć cel, Vector3 worldUp = Vector3.up)
  • void Transform.LookAt (Vector3 worldPosition, Vector3 worldUp = Vector3.up)

Przegląd

Transformacje przechowują większość danych o obiekcie w jedności, w tym jego rodzica (-ów), dziecka (-ów), pozycji, obrotu i skali. Posiada również funkcje modyfikujące każdą z tych właściwości. Każdy GameObject ma transformację.

Tłumaczenie (przenoszenie) obiektu

// 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);

Obracanie obiektu

// 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));

Więcej informacji i przykładów można znaleźć w dokumentacji Unity .

Zauważ też, że jeśli gra używa sztywnych ciał, transformacji nie należy bezpośrednio oddziaływać (chyba że sztywne ciało ma wartość isKinematic == true ). W takim przypadku użyj AddForce lub innych podobnych metod, aby bezpośrednio oddziaływać na sztywny korpus.

Rodzicielstwo i dzieci

Unity współpracuje z hierarchiami, aby utrzymać porządek w projekcie. Możesz przypisać obiektom miejsce w hierarchii za pomocą edytora, ale możesz to również zrobić za pomocą kodu.

Rodzicielstwo

Możesz ustawić obiekt nadrzędny obiektu za pomocą następujących metod

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

Ilekroć ustawisz element nadrzędny przekształcenia, utrzyma on pozycję obiektów jako pozycję światową. Możesz wybrać, aby ustawić tę pozycję względną, przekazując wartość false dla parametru worldPositionStays .

Możesz również sprawdzić, czy obiekt jest potomkiem innej transformacji za pomocą następującej metody

other.transform.IsChildOf( transform );

Pierwsze dziecko

Ponieważ obiekty można przenosić między sobą, można również znaleźć dzieci w hierarchii. Najprostszym sposobem na to jest użycie następującej metody

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

Uwaga: połączenia FindChild Znajdź pod maską

Możesz także wyszukiwać dzieci w dalszej części hierarchii. Robisz to, dodając znak „/”, aby określić głębszy poziom.

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

Innym sposobem pobrania dziecka jest użycie GetChild

transform.GetChild( index );

GetChild wymaga liczby całkowitej jako indeksu, która musi być mniejsza niż całkowita liczba dzieci

int count = transform.childCount;

Zmiana indeksu rodzeństwa

Możesz zmienić kolejność dzieci GameObject. Możesz to zrobić, aby zdefiniować kolejność rysowania dzieci (zakładając, że są one na tym samym poziomie Z i tej samej kolejności sortowania).

other.transform.SetSiblingIndex( index );

Możesz także szybko ustawić indeks rodzeństwa na pierwszy lub ostatni, używając następujących metod

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

Odłączanie wszystkich dzieci

Jeśli chcesz zwolnić wszystkie dzieci transformacji, możesz to zrobić:

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

Ponadto Unity zapewnia metodę do tego celu:

transform.DetachChildren();

Zasadniczo zarówno looping, jak i DetachChildren() ustawiają rodziców dzieci pierwszej głębi na zero - co oznacza, że nie będą mieli rodziców.

(dzieci z pierwszej głębi: transformacje, które są bezpośrednio potomkami transformacji)



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow