public class PlayerController : MonoBehaviour
{
public float speed = 5;
void Update()
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
}
void Update()
Oyun boyunca her framede bir kez çalışan fonksiyondur. Oyun açık olduğu sürece sürekli çalışır.
transform.Translate()
Bir GameObject’i bulunduğu konumdan, belirli bir yöne ve mesafeye hareket ettirmek için kullanılır. Mevcut koordinatlara ekleme yaparak ilerlemesi, nesneye bir hız ve yön kazandırarak ortaya çok daha organik bir hareket animasyonu çıkarır.
Vector3( X, Y, Z)
Bir objenin dünyadaki yerini, bakış yönünü veya hızını belirtmek istediğimizde Vector3 veri tipini kullanırız. Adından da anlaşılacağı üzere bu tip, üç boyutlu uzayı temsil eden üç farklı değeri bir arada tutar.
– X (Sağ / Sol): Yatay düzlemdeki harekettir. Pozitif değer sağa, negatif değer sola götürür.
– Y (Yukarı / Aşağı): Dikey düzlemdeki harekettir. Yerçekimine karşı çıkmak veya yere inmek gibidir.
– Z (İleri / Geri): Derinlik düzlemindeki harekettir. Karakterin baktığı yöne doğru ilerlemesi veya geri çekilmesidir.
Vector3.forward = new Vector3(0, 0, 1) anlamına gelmektedir. Unity’nin sunduğu kısayol diyebiliriz.
Time.deltaTime
İki frame arasında geçen süreyi hesaplar. Time.deltaTime ile çarparak, hareketi kare başına değil, saniye başına hesaplar. Eğer Time.deltaTime kullanmasaydık; 120 FPS alan bir cihazda karakterimiz 120 birim ilerlerken, 30 FPS alan bir cihazda karakterimiz 30 birim ilerleyecekti. Böylelikle, oyunun hızı tamamen oyuncunun bilgisayar donanımına bağlı hale gelecekti. Böylelikle haksız ve tutarsız bir oyun deneyimi yaratacaktı. Bu sebepten her cihazda aynı akıcılığı sağlamak için bu fonksiyonu kullanmamız şarttır.
Speed
public float speed= 5f;
Unity arayüzünde speed değerini görebilmek adına public olarak bir float türünde ‘speed’ isimli bir değişken oluşturduk ve buna 5 değerini atadık. Böylece oyun sırasında en ideal hızı test edebiliriz.
İpucu:
Bir değişkenin sadece tanımlandığı script üzerinden erişilebilir olmasını (private), aynı zamanda Unity Inspector panelinde de düzenlenebilmesini istiyorsak [SerializeField] özelliğini kullanabiliriz.
[SerializeField] private float speed = 5;
İpucu:

[Header("Hareket Ayarları")]
[Tooltip("Karakterin ileriye doğru hareket hızını belirler.")]
[Range(1f, 20f)]
[SerializeField] private float speed = 5;
void Update()
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
[Header(“Hareket Ayarları”)]
Header özelliği, Inspector arayüzümüzde değişkenleri gruplandırmak için başlık oluşturur.
[Tooltip(“Karakterin ileriye doğru hareket hızını belirler.”)]
Tooltip özelliği, Inspector arayüzümüzde değişkenin üzerine geldiğimizde ne işine yaradığına dair açıklama eklememize olanak sağlar.
[Range(1f, 20f)]
Range özelliği, Inspector arayüzümüzde değişken değerimizi maksimum ve minimum olarak sınırlamamıza olanak sağlar ve arayüze bir slider çıkararak kolaylık sağlar.
