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.
Görev
KolayTopun tek bir hızda sonsuza kadar sekmesini sağla.
Ball'ınAwake()metodunda, sekme değeri 1, her iki sürtünme değeri 0,bounceCombine = PhysicsMaterialCombine.MaximumvefrictionCombine = PhysicsMaterialCombine.Minimumolacak şekildenew PhysicsMaterial("Bouncy")oluştur; bunuGetComponent<Collider>().materialüzerine ayarla.FixedUpdate()ekle: top fırlatılmışsarb.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