Developedia
Developedia
A Towards függvények

A Towards függvények

Ha a célunk az, hogy egy Vektort vagy egy számot egyenletesen közelítsünk egy másik felé, akkor jussanak eszünkbe a Towards függvények.

Korábban már írtunk olyan szkriptet, ami egy objektumot közelített egy másik felé.

Ugyanezt tudjuk sokkal rövidebben elérni a Vector3.Towards függvénnyel

A Towards függvényeknek mindig 3 paraméterük van. Sorrendben:

  • Kiinduló pont
  • Cél pont
  • Maximum megtehető távolság

Több Towards típusú függvény létezik függően attól milyen típuson végeznek műveletet

  • float Számra
  • float Mathf.MoveTowards(float, float, float);

  • Bezárt szögre (float)
  • float Mathf.MoveTowardsAngle(float, float, float);

    A maximum megtehető távolság egy float típusú szög érték és fokban kifejezve kell megadni.

  • 2D vektorra (Vector2)
  • Vector2 Vector2.MoveTowards(Vector2, Vector2, float);

    A maximum megtehető távolság egy float típusú távolság érték.

  • 3D vektorra (Vector3)
  • Vector3 Vector3.MoveTowards(Vector3, Vector3, float);

    A maximum megtehető távolság egy float típusú távolság érték.

  • Elfordulásra (float)
  • Quaternion Quaternion.RotateTowards(Quaternion, Quaternion, float);

    A maximum megtehető távolság egy float típusú szög érték és fokban kifejezve kell megadni.

Simított mozgás

Később foglalkozunk azzal, ha a célpont irányéba nem lineárisan, hanem valami módon simítva szeretnénk haladni: Simított mozgásSimított mozgás

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
[SerializeField] Transform target;                  // Követendő objektum
[SerializeField] float speed;                       // Követési sebesség

void Update()
{ 
		Vector3 selfPos = transform.position;           // Saját pozíció
    Vector3 targetPos = target.position;            // Cél pozíciója
    Vector3 velocity = targetPos - selfPos;         // Cél felé mutató vektor
		float distance = velocity.magnitude;            // Cél távolsága
    velocity.Normalize();                           // Normalizálás (hossz: 1)
    float stepDistance = speed * Time.deltaTime;    // Egy lépés távolsága egy frame-ben
        
    if (distance < stepDistance)                    // Ha a cél közelebb van,
		    stepDistance = distance;                    // lépés távolságát felülírjuk
        
		transform.position = velocity * stepDistance;   // Pozíció frissítése
}
[SerializeField] Transform target;                 // Követendő objektum
[SerializeField] float speed;                      // Követési sebesség

void Update()
{ 
		Vector3 selfPos = transform.position;           // Saját pozíció
    Vector3 targetPos = target.position;            // Cél pozíciója
    float stepDistance = speed * Time.deltaTime;    // Egy lépés távolsága egy frame-ben
                                                        
		// Közelít a célhoz legfeljebb egy stepDistance-nyit:
    transform.position = Vector3.MoveTowards(currentPos, targetPos, stepDistance);
}