Menu
CoddyTech

Yuvarlanan Top

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 28 / 71.

Bu bölüm, Coin Rush adlı küçük bir oyun oluşturuyor. Duvarlarla çevrili bir arenada topu yön tuşlarıyla yuvarlıyor ve süre dolmadan paraları topluyorsun. İş bölümü, bir Unity projesinde olacağı gibi iki betik arasında paylaşılıyor: Ball topu hareket ettiriyor, skoru ve süreyi tutuyor; Coin ise her bir paranın üzerinde bulunuyor. Coin.cs başlangıçta boş bir sınıf ve sonraki derste içi dolduruluyor.

Bir topu yerleştirmek yerine ittiğinde yuvarlanır. Rigidbody'sini AddForce ile it ve dönüşünü serbest bırak: kuvvet topu hareket ettirir, zeminin sürtünmesi de topun alt kısmını kavrayıp dönmesini sağlar. Space tuşu basılı tutulurken bu bowling topu kendi kulvarında ilerler:

public float push = 6f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(Vector3.forward * push);
    }
}

Kaymadan yuvarlanan bir topun dönüş hızı, hızı bölü yarıçapına eşittir. Bu nedenle yarıçapı 0.5 olan ve saniyede 3 birim ilerleyen bir top, saniyede 6 radyan hızla döner (rb.angularVelocity). Bunun yerine transform.position değerini değiştirir ya da Rigidbody'nin Constraints ayarlarında dönüşünü dondurursan, top dönmeden bir disk gibi kayar. Tek renkli düz bir küre her iki durumda da aynı görünür: yuvarlanmayı görmek için oyun oynanırken Rigidbody'nin Info bölümündeki Angular Velocity değerini izle.

challenge icon

Görev

Orta

Coin Rush'ı başlat: ok tuşlarıyla topu yuvarla.

  1. Ball.cs dosyasındaki Start() içinde rb = GetComponent<Rigidbody>(); değerini ata.
  2. FixedUpdate() içinde float x = Input.GetAxis("Horizontal"); ve float z = Input.GetAxis("Vertical"); değerlerini oku, ardından rb.AddForce(new Vector3(x, 0f, z) * force); çağrısını yap.

“Oyna”'ya bas, oyuna tıkla ve topu yuvarla: top hareket ederken döner. Ardından “Kontrol et”'e bas.

Kendin dene

using UnityEngine;

public class Ball : MonoBehaviour
{
    public float force = 10f;
    private Rigidbody rb;

    void Start()
    {
    }

    void FixedUpdate()
    {
        // Topu yön tuşlarıyla hareket ettir: Horizontal x ekseni boyunca, Vertical z ekseni boyunca.
    }
}

Fizik ve Oynanış bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground