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é.
[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
}
Ugyanezt tudjuk sokkal rövidebben elérni a Vector3.Towards
függvénnyel
[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);
}
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- Bezárt szögre (
float
) - 2D vektorra (
Vector2
) - 3D vektorra (
)Vector3
- Elfordulásra (
float
)
float Mathf.MoveTowards(float, float, 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.
Vector2 Vector2.MoveTowards(Vector2, Vector2, float);
A maximum megtehető távolság egy float típusú távolság érték.
Vector3 Vector3.MoveTowards(Vector3, Vector3, float);
A maximum megtehető távolság egy float típusú távolság érték.
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ás