unity3d
Przekształca się
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)