Unity 2D Karakter Hareket Ettirme

unity 2d

Bu dersimizde, android ve ios gibi platformlar için unity 2d oyunlarınızda karakteri veya objeleri nasıl hareket ettireceğinizi göstereceğim. 2 farklı şekilde karakter veya objeyi hareket ettirebiliriz. Addforce() veya velocity kullanabiliriz.

1-)Rigidbody 2D Ekleme

Karakter veya objeye hareket eklemek için fizik motoru olan rigidbody 2D compenentini eklemeliyiz.

Screenshot 1

Resimdeki gibi Add Compenent butonuna tıklıyoruz.

Unity Karakter Hareket Ettirme

Ardından arama yerine Rigidbody 2D yazıyoruz. Çıkan compenent’i ekliyoruz.

Aynı yerden Add Compenent’e tıklayıp, “Movement 2D” adında bir script oluşturuyoruz.

2-)Addforce() Kullanarak Karakter Hareket Ettirme

Addforce() ile karaktere veya objeye kuvvet uygularız. Eğer her tuşa bastığınızda karakterin hızını artmasını istiyorsanız aşağıdaki kodu kullanabilirsiniz.


using UnityEngine;

public class Movement2d : MonoBehaviour
{
    private Rigidbody2D rb2;
    public float speed = 1;
    void Start()
    {
        rb2 = GetComponent<Rigidbody2D>();
 // Bu komutla objemize eklediğimiz Rigidbody2D compenentini rb2'ye atıyoruz.
    }
    void Update()
    {
        if (Input.GetKey(KeyCode.W))
// Burada "W" tuşuna her bastığımızda belirlediğimiz hız değeriyle tuşa bastığımız sürece  nesnenin hızı artacak.(Örneğin arabanın hızlanması gibi)
        {
            rb2.AddForce(Vector2.up*speed);
        }
        if (Input.GetKey(KeyCode.A))
        {
            rb2.AddForce(Vector2.left*speed);

        }
        if (Input.GetKey(KeyCode.S))
        {
            rb2.AddForce(Vector2.down*speed);
        }
        if (Input.GetKey(KeyCode.D))
        {
            rb2.AddForce(Vector2.right*speed);
        }
    }
}

3-)Velocity Kullanarak Karakter Hareket Ettirme

Velocity ile karaktere direkt sabit hız verebiliriz. Tuşa her bastığınızda karakterimiz aynı hızla hareket edecektir. Mesela karakterin zıplamasını istiyorsak velocity ile gerçekleştirebiliriz. Unity 2D hareket kodlarını aşağıdaki gibi kullanabilirsiniz.


using UnityEngine;

public class Movement2d : MonoBehaviour
{
    private Rigidbody2D rb2;
    public float speed = 1;
    void Start()
    {
        rb2 = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.W))
        {
            rb2.velocity = new Vector2(0, speed);
        }
        if (Input.GetKey(KeyCode.A))
        {
            rb2.velocity = new Vector2(-speed, 0);
        }
        if (Input.GetKey(KeyCode.S))
        {
            rb2.velocity = new Vector2(0, -speed);
        }
        if (Input.GetKey(KeyCode.D))
        {
            rb2.velocity = new Vector2(speed, 0);
        }
    }
}

Takıldığınız veya yardıma ihtiyacınız olan konu varsa yorum kısmından bize ulaşabilirsiniz.

Kaynak:

“Unity 2D Karakter Hareket Ettirme” hakkında 30 yorum

  1. Unityde 2d platform oyunu gelistiriyordum. Lakin karakterim bazen takılıyor hareket etmiyor veya ziplamiyor sorun ne olabilir

    1. info@simurg.co adresine kodları gönderirseniz bakabilirim. Hata aldığınız oyunu duraklatıp hareket objesinde ne gibi değişiklikler var bakabilirsiniz. Manuel olarak yerini değiştirip kaldığınız yerden devam etmeyi deneyin. Belki görmediğiniz bir collider’e takılıyor olabilir.

  2. ismimi vermek istemiyorum

    merhaba. ben unity 2d ile bir oyun geliştiriyorum. ama bir yeri yapamadım. oyunumdaki zombinin kendi kendine ileri gitmesini istiyorum. yardımcı olabilir misiniz?

    1. Eğer platform oyunlarındaki gibi tek bir çizgide gitmesini istiyorsan, bu aralığı belirtip bu yazıdaki hareket kodunu kullanabilirsin. Eğer belli bir rotada ilerlemesini istiyorsan unity pathfinding konusunu araştırabilirsin. Youtube’da bununla ilgili videolar var onlara bakabilirsiniz. Merak ettiğiniz bir şey olursa buradan sorabilirsiniz.

      1. ismimi vermek istemiyorum

        aslında ben tek bir çizgi üzerinde gitmesini istiyorum. ama kodu bilmiyorum yardımcı olabilir misiniz?

        1. using UnityEngine;

          public class Movement2D : MonoBehaviour {

          public float mesafe = 2.5f;
          public float hiz = 1.5f;
          private Vector3 baslangicKonumu;

          void Start () {
          baslangicKonumu = gameObject.transform.position;
          }
          void Update () {
          Vector3 guncelKonum = baslangicKonumu;
          guncelKonum.x += mesafe * Mathf.Sin (Time.time * hiz);
          gameObject.transform.position = guncelKonum;
          }
          }

          Böyle bir script oluşturup bunu hareket etmesini istediğiniz karaktere atın. Sinüs -1 ile 1 arasında değer aldığı için belirlenen mesafede gidip gelecektir.

          1. ismimi vermek istemiyorum

            zombi arkasını döndüğünde arkasın bakması için ne yapmalıyım youtubeden bakıp bir kaç tane kod yazdım yazdım ama çalışmadı.

  3. Ben “W” tuşuna basılı tuttuğumda karakter uçuyor nasıl engellerim yani sadece 1 saniyede bir zıplayabilsin.

      1. Mesela ben “W” tuşuna bastıkdan hemen sonra tekrar “w” tuşuna basamayım yere deydikten sonra tekrar basabileyim. Yani karakter havadayken zıplama tuşu devredışı olsun ki tekrar tekrar zıplayarak uçamasın karakter.


        1. public bool yerdeMi;
          private void OnCollisionEnter2D(Collision2D other)
          {
          if(other.gameObject.CompareTag=="Zemin")
          {
          yerdeMi = true;
          }
          }
          private void OnCollisionExit2D(Collision2D other)
          {
          if (other.gameObject.CompareTag == "Zemin")
          {
          yerdeMi = true;
          }
          }

          karakterin içine bir tane gameObject oluşturun. Ardından bu gameObjecte bir tane collider2d oluşturun. Bunun konumunu karakterin ayak kısmına ayarlayın. içerisine zemin kontrol diye bir script oluşturup içine yukarıdaki kodu yazın. platforma Zemin etiketini verin. Daha sonra ana scriptiniz ile yerdeMi değişkenin aldığı değere göre karakterinizin zıplama ayarını koşullayın.
          örneğin;

          if(Input.GetKeyDown(KeyCode.Space)&&yerdeMi)
          {

          }
          Eğer platform oyunu yapıyorsanız buradaki videoları tavsiye ederim.

  4. merhabalar, kodların aynısını yazdım ancak karakter hareket etmioyor, yerine wasd tuşlarına bastığımda unity paletlerinde dolanıyorum.

  5. BİŞEY SORCAM ŞİMDİ UNTY 2D OYUN GELİŞTİRİYORUM.YOTUBEDEN 2D IŞIKLANDIRMA NASIL YAPILDIĞINA BAKTIM.AMA DENEDİĞİMDE HİÇ BİR İŞE YARAMADI YARDIMCI OLABİLİRMİSİNİZ LÜTFEN ?

  6. abi ben w ye veya s ye bastığımızda karakter yere düşmesin istiyorum yani w ye bastığımızda sadice yukarı doğru ilerlicek yere doğru geri düşmicek aynı şekilde s içinde aynısı yere doğru ilerlicek abi çok lazım her yerde bunu arıyorum nolur cevapla

  7. Merhaba ben karakterimi velocity ile hareket ettiriyorum. platforma dokunduğunda zıplıyor ve sağ sol butonlarına dokunduğunda sağa sola hareket ediyor. Ancak şöyle bir bug yada hata var (görünürde hata yok) oyunu başlattığımda yavaş hareket ediyor durdurup yeniden başlatıyorum bu sefer ise çok hızlı hareket ediyor. Düzensiz bir şekilde oluyor ve oyuncunun oynama zevkini kıracak seiyede olduğunu düşündüğüm için bu sorunu çözmek itiyorum.
    Kodum aşağıda ki şekildedir.

    public float hareketHizi;
    private float yatayHareket;

    private void Update()
    {

    rb.velocity = new Vector2(yatayHareket * hareketHizi * Time.deltaTime, rb.velocity.y);
    Vector2 yeniScale = transform.localScale;
    if (yatayHareket > 0)
    {
    yeniScale.x = 0.2f;
    }
    if (yatayHareket < 0)
    {
    yeniScale.x = -0.2f;
    }
    transform.localScale = yeniScale;

    }

    Oyunumu neredeyse yayınlamak üzereyim, hızlı cevap verirseniz minnettar olurum.

  8. ben 2d oyun yapıyorum rigidbody 2d ekledikten sonra playmode girince karakter yere düşüyor nasıl durdurabilirim

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir