Transform mozgatása
[SereializeField] float speed; // Kell valahonnan egy sebesség érték
// (Jelen példában [SereializeField] beállítás)
// Mértékegység: egység / másodperc
void Update()
{
// Kell valahonnan egy irányított vektor:
// (Jelen példában az inputrendszer adja)
float x = Input.GetAxis("Horizontal");
float y = Input.GetAxis("Vertical");
Vector3 movementVectorXY = new(x, y, 0); // Ha X-Y (függőleges) síkban mozogunk
Vector3 movementVectorXZ = new(x, 0, y); // Ha X-Z (vívszintes) síkban mozogunk
// Normalizáljuk, hogy az irányvektor hossza 1 legyen:
Vector3 direction = movementVectorXY.normalized;
// Szorzunk a sebességgel, hogy megkapjuk a sebességvektort:
Vector3 velocity = direction * speed;
// (Azt adja meg mekkora elmozdulás 1 másodperc alatt.)
// Egy update alatti megtett lépés mérete:
Vector3 step = velocity * Time.deltaTime;
⚠️ // A KÖVETKEZŐ SOROK KÖZÜL CSAK EGY KELL ⚠️
// Mozgás saját koordinátarendszerben:
// (A kovetkező 3 sor pontosan ugyanazt csinálja)
transform.localPosition += step;
transform.Translate(step, Space.Self);
transform.Translate(step);
// Mozgás világ koordinátarendszerben
// (A kovetkező 2 sor pontosan ugyanazt csinálja)
transform.position += step;
transform.Translate(step, Space.World);
}
Transform, szülők, gyerekek
// Saját GameObject transform-ja egy MonoBehaviour-ban lekérhető a transform-mal:
Transform t = transform;
// Szülők és gyerekek lekérése:
Transform parentTransform = transform.parent; // Szülő transform-ja lekérése
// Ha nincs szülő, parent értéke: null
int childCount = transform.childCount; // Gyerekek száma
for (int i = 0; i < childCount ; i++) // Ciklus
Transform child = transform.GetChild(i); // i-edik gyerek Transform-ja
transform.SetParent(parentTransform, true); // Szülő beállítása
// Szülő beállítása, a világkoordináták megtartásával:
// (A kovetkező 3 sor pontosan ugyanazt csinálja)
transform.parent = parentTransform;
transform.SetParent(parentTransform);
transform.SetParent(parentTransform, true); // 2. paraméter:
// Világkoordináták megtartása: true
// Szülő beállítása, a lokális koordináták megtartásával
transform.SetParent(parentTransform, false); // 2. paraméter:
// Világkoordináták megtartása: false
Világ- és sajátkoordinátarendszer
// KR. = Koordináta Rendszser
// Nevezetes saját KR. beli irányvektorok kifejezve világ KR.-ben:
Vector3 right = transform.right; // Saját balra irány világ KR.-ben
Vector3 left = -transform.right; // Saját jobbra irány világ KR.-ben
Vector3 up = transform.up; // Saját felfelé irány világ KR.-ben
Vector3 down = -transform.up; // Saját lefelé irány világ KR.-ben
Vector3 forward = transform.forward; // Saját előre irány világ KR.-ben
Vector3 back = -transform.forward; // Saját hátra irány világ KR.-ben
Vector3 point = new Vector3(1, 2, 3); // Csak egy vektor a következő példákhoz
// (A) KR.-ben vett pont (helyvektor) hol van (B) KR.-ben?
transform.TransformPoint(point); // SAJÁT -> VILÁG
transform.InverseTransformPoint(point); // VILÁG -> SAJÁT
// (A) KR.-ben vett irányított vektornak mi a megfelelője (B) KR.-ben?
transform.TransformVector(point); // SAJÁT -> VILÁG
transform.InverseTransformVector(point); // VILÁG -> SAJÁT
// (Átalakított vektor megtartja az irányát, és a hosszát)
// (A) KR.-ben vett irányvektornak mi a megfelelője (B) KR.-ben?
transform.TransformDirection(point); // SAJÁT -> VILÁG
transform.InverseTransformDirection(point); // VILÁG -> SAJÁT
// (Átalakított vektor megtartja az irányát, de a hosszát nem feltétlenül)
// Fenti függvények működése:
// A ...POINT függvény számításba veszi: Rotation, Scale, Position
// A ...VECTOR függvény számításba veszi: Rotation, Scale
// A ...DIRECTION függvény számításba veszi: Rotation