Menu
CoddyTech

Hızı Koru

Coddy'nin Unity Oyunu: Tuğla Kırma kursunda ders 3 / 19.

Brick Breaker topu asla yavaşlamaz. İşin çoğunu PhysicsMaterial halleder: 1 esneklik, çarpışmadaki tüm hızı korur; 0 sürtünme ise duvarların topu yavaşlatmasını önler. Duvarların malzemesi yoktur ve Unity varsayılan olarak iki çarpıştırıcının değerlerinin ortalamasını alır: topun 1 değeriyle duvarın 0 değeri, çarpışmada hızın yarıya düşmesine neden olur. bounceCombine = Maximum ve frictionCombine = Minimum, topun kendi değerlerinin geçerli olmasını sağlar.

Fizik yine de kusursuz değildir: hareket eden bir raket kendi hızını topa ekler ve küçük hatalar yüzlerce çarpışma boyunca birikir. Bu yüzden top, her fizik adımında yönünü korur ve hızı yeniden ayarlanır:

rb.linearVelocity = rb.linearVelocity.normalized * 7f;

Saniyede 2 birim hıza düşen bir top, sonraki adımda yeniden 7 hızla hareket eder.

challenge icon

Görev

Kolay

Topun tek bir hızda sonsuza kadar sekmesini sağla.

  1. Ball'ın Awake() metodunda, sekme değeri 1, her iki sürtünme değeri 0, bounceCombine = PhysicsMaterialCombine.Maximum ve frictionCombine = PhysicsMaterialCombine.Minimum olacak şekilde new PhysicsMaterial("Bouncy") oluştur; bunu GetComponent<Collider>().material üzerine ayarla.
  2. FixedUpdate() ekle: top fırlatılmışsa rb.linearVelocity = rb.linearVelocity.normalized * speed;

“Oyna”'ya bas ve topu fırlat: top yavaşlamadan her duvardan seker. Ardından “Kontrol et”'e bas.

Kendin dene

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;
    bool launched;

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

    void Update()
    {
        if (launched) return;
        transform.position = paddle.position + Vector3.up * 0.5f;
        if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
    }

    public void Launch(Vector3 direction)
    {
        launched = true;
        rb.linearVelocity = direction.normalized * speed;
    }
}

Unity Oyunu: Tuğla Kırma bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground