Unity C# Unity C#, PlayerMovement , transform.Translate ile Oyuncu Hareket Ettirme

Oyuncu fiziği ve hareketi için transform sınıfını kullanıyoruz. transform.translate ile yer, yön ve boyut ayarlayabiliriz.

Birde Time.deltaTime var. En basit mantık ile anlatırsam bu da nesne hızını saniyeye göre ayarlar diğer türlü nesne hızlı bilgisayarda hızlı yavaşta yavaş hareket eder. Evrensel bir zamana hızı bağlamazsak herkes aynı oyunu oynayamaz 🙂

Örnek olarak şu scripti anlayın;

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour
{
    void Update()
    {
        // Move the object forward along its z axis 1 unit/second.
        // Objeyi sürekli ileriye (z yönünde) 1 unit/saniye gönderir
        transform.Translate(Vector3.forward * Time.deltaTime);

        // Move the object upward in world space 1 unit/second.
        // Objeyi sürekli yukarıya (y yönünde) 1 unit/saniye gönderir
        transform.Translate(Vector3.up * Time.deltaTime, Space.World);
    }
}

Şimdi olaya gelelim kontrol etmemiz gereken bir oyuncu var. Oyunun içindeki fırlamayı hareket ettirmeliyiz. Oyuncu olmadan oyun olmaz.

Aşağıdaki kodu atadığımız nesne sağa doğru hareket edecektir.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{


    void Start()
    {
        
    }

    void Update()
    {

        // player smooth biçimde hareket ettirmek için transform.translate kullanmalıyız
        // direk transform.position kullanırsak teleport etmiş oluruz hareket ettirmiş değil

        transform.Translate(Vector3.right * Time.deltaTime );



    }
}

Bu kod tam işimizi görmüyor biz tuşlarla oyuncuyu kontrol etmek istiyoruz.

Bunun içinde unitynin Input. default tanımladığı tuşları Vector3(x,y,z) bağlamamız lazım. Bize horizontal lazım. Yani yatay (x) bu aynı zamanda A , D ve ← , →

Bu kodu sahnenize eklediğiniz küp veya nesneye atın. Artık Sağ Sol ok ve A , D tuşları ile artık hareket edebilirsiniz.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

    // değişkeni public yaptığım için editörden de düzenlenebilir
    public float speed;

    void Start()
    {
    }

    void Update()
    {

        // player hareket ettirmek için transform.Translate kullanmalıyız
        // direk transform.position kullanırsak teleport etmiş oluruz hareket ettirmiş değil

        float horizontalInput = Input.GetAxis("Horizontal");

        transform.Translate(new Vector3(horizontalInput,0,0) * Time.deltaTime * speed);

    }
}

Bu öğrendiğimizi tüm oyun türlerine uyarlamak mümkün. Vector3 ile 3D oyun 2D oyun 2,5D oyun hepsini yapabilirsiniz.

Bu Oyuncu şu anda havada sağa sola uçuyor fakat daha fazlasını yapmak size kalmış.

Yorumlar