• Değerli kullanıcılarımız, eğer forumda açılmasını istediğiniz kategoriler varsa lütfen Görüş ve Önerileriniz kısmına bunu konu açarak belirtin.

Unity C# - Basit yürüme animasiyonu (2D)

merutsusama

YENI UYE
Katılım
11 Eki 2020
Mesajlar
3
Beğeniler
0
Puanları
1
Yaş
18
Merhaba dostlarım detaylı anlatım ile bugün 2D oyunlar için yürüme mekaniğini anlatıcağım.
C#:
public float hiz; // karakter yürüme hızını tanımladık

public Rigidbody2D rb; // Rigidbody2D'yi tanımladık

private Vector3 v3; //Vector3'ü tanımladık. Vector3 (İleri, Geri, Yukarı, Aşağı, Sağa, Sola) gibi mekanikleri yapmamızı sağlar.



void Start() // Oyun başlangıcında 1 kere çalıştırılır

{
    rb = GetComponent<Rigidbody2D>();
}

void Update() // Oyun içerisinde sürekli döndürülen kısım.
{
    v3 = Vector3.zero; // Değeri "0" olarak atadık
    v3.x = Input.GetAxis("Horizontal"); // Sağa/Sola
    v3.y = Input.GetAxis("Vertical"); // Yukarı/Aşağı
    KaraterYurume(); // Yaptığımız void'i burda çağırıyoruz
}

void KarakterYurume() // Karakterimizi Yürütmemiz için kodlarımızı yazıcağımız yer.
{
    /*
          Yaptığımız şey şu; transform.position ile pozisiyonumuzu v3 değerleri ile toplattık. v3'ü zero olarak ayarladığımızı unutmayın.
        Daha sonra hızımız yani hiz değişkeni ile çarptık böylelikle yürümemizi başlatmış olduk.
        Time.deltaTime methodunu da FPS'i yüksek alanlar oyunu daha hızlı oynar o yüzden düşük fps ile yüksek fps arasındaki hızı kaldırmak için bu methodu kullanıyoruz.
    */
    rb.MovePosition(transform.position + v3 * hiz * Time.deltaTime);
   
}
 

dragon43

YENI UYE
Katılım
27 Kas 2020
Mesajlar
5
Beğeniler
2
Puanları
3
Vector3 yerine Vector2 kullanmak performans açısından daha mantıklı olurdu. Ayrıca yaptığın şeyi doğru çalışacağından şüpheliyim.

Bunun yerine önce inputları aldığın bir fonksiyon oluştur ( ya da fonksiyonsuz Update içindede direk al ) sonra KarakterYurume'yi FixedUpdate'te çağır.

Time.deltaTime method değil attribute'tur. Rigidbody2D'yi de private yapmak daha mantıklı. Son olarak da MovePosition'daki parametre de mantıksal hata olabilir işlem önceliğinden dolayı. Çünkü dediğine bakılırsa önce toplayıp sonra çarpmayı hedeflemişsin.
 

Şu an konuyu görüntüleyenler (Üye: 0, Misafir: 1)

Üst