Developedia
Developedia
Unity Puska 5 - Transform & 3D tér (…)

Unity Puska 5 - Transform & 3D tér (…)

Transform mozgatása

Transform, szülők, gyerekek

Világ- és sajátkoordinátarendszer

Fogatás (TODO)

Logo

Főoldal

Blog

Elmélet

3D Studio

Adatvédelmi nyilatkozat

GY.I.K.

Házirend

Szerző: Marosi Csaba / marosi.csaba@3d-studio.hu

DiscordGitHubLinkedIn
[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);
}
// 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
// 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