Menu
CoddyTech

İleriyi Görme

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

Hareket eden bir oyuncunun merkezine yerleştirilmiş kamera, oyuncunun gittiği yer kadar geride kaldığı yeri de gösterir. Bunun yerine yandan görünüm önden gelebilir: oyuncunun birkaç birim önünde, yöneldiği tarafta durur.

Oyuncu yönünü değiştirdiğinde öndeki mesafe de yön değiştirir ve bu mesafenin anında değişmesi tüm görüntünün sıçramasına neden olur. Bu yüzden öndeki mesafeyi bir alanda tut ve her karede biraz değiştirerek yeni değerine doğru kaydırmak için Mathf.MoveTowards kullan. Bu tekne kamerası 2 birim önden gelir ve saniyede 3 birim hızla kayar:

float lead;
float heading = 1f;   // 1 sağa doğru seyrediyor, -1 sola doğru seyrediyor

void LateUpdate()
{
    lead = Mathf.MoveTowards(lead, heading * 2f, 3f * Time.deltaTime);
    transform.position = new Vector3(boat.position.x + lead, transform.position.y, transform.position.z);
}

Yön, teknenin en son hareket ettiği yöndür: x değerini önceki karedeki x değeriyle karşılaştır ve hareket etmediği karelerde yönü değiştirme; böylece duran teknenin öndeki mesafesi korunur.

challenge icon

Görev

Orta

Kamera yandan, koşucunun gittiği yönü daha fazla gösterecek şekilde ayarlansın.

  1. LateUpdate() içinde koşucunun x değerini lastX ile karşılaştır: sağa hareket etmek direction değerini 1, sola hareket etmek -1 yapar; hareketsiz kalmak değeri değiştirmez.
  2. shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime); ile kaydırmayı yumuşakça ayarla.
  3. Kameranın x değerini player.position.x + shift yaparken y ve z değerlerini koru.

“Oyna” düğmesine bas ve iki yöne de koş. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class LookAheadCamera : MonoBehaviour
{
    public Transform player;
    public float ahead = 3f;
    public float shiftSpeed = 4f;

    void LateUpdate()
    {
        // Oyuncunun son hareket ettiği yönde ahead birim önden git, shiftSpeed hızında kayarak.
        transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
    }
}

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

Kendi başına pratik yap: Unity playground