Unity'de Pürüzsüz Fare Hareketi Nasıl Oluşturulur

Akıcı fare hareketi, genel kullanıcı deneyimini iyileştirmeye yardımcı olan oyun geliştirmenin temel bir yönüdür. Akıcı fare hareketini uygulayarak oyununuzun kamerasını veya oyuncu kontrollerini daha akıcı ve duyarlı hale getirebilir, cilalı ve sürükleyici bir oyun deneyimi elde edebilirsiniz. Bu eğitimde, adım adım talimatlar ve C# kod örnekleriyle Unity'de akıcı fare hareketinin nasıl ayarlanacağını ele alacağız. Ayrıca, bu özelliği oyunlarınıza neden uygulamak isteyebileceğiniz olası nedenleri de tartışacağız.

Pürüzsüz Fare Hareketi Neden Uygulanmalıdır?

Oyunlarda akıcı fare hareketinin önemli olmasının birkaç nedeni şunlardır:

  • Gelişmiş Kullanıcı Deneyimi: Akıcı kontroller, oyuncunun eylemleri üzerinde daha fazla kontrole sahip olduğunu hissetmesine yardımcı olur; bu, özellikle birinci şahıs veya üçüncü şahıs oyunlarında, oyuna dalmak için olmazsa olmazdır.
  • Gelişmiş Hassasiyet: Fare hareketlerinin ince ayarlanması, nişancı oyunlarında veya dikkatli nişan almayı gerektiren oyunlarda çok önemli olan daha hassas kamera kontrollerine olanak tanır.
  • Cilalı Görünüm ve His: Oyunu daha profesyonel ve cilalı hissettirir, bu da oyuncuları elinizde tutmak ve onların ilgisini canlı tutmak için önemlidir.
  • Hareket Hastalığını Azaltır: Titrek veya aşırı hassas kamera hareketi oyuncularda rahatsızlığa veya hareket hastalığına neden olabilir. Düzgün fare hareketi bu riski azaltmaya yardımcı olabilir.

Düzgün Fare Hareketini Ayarlama Unity

Unity'de akıcı fare hareketi oluşturmak için gerekli adımları inceleyelim.

Adım 1: Yeni Bir Komut Dosyası Oluşturun

İlk olarak, fare hareketini kontrol edecek yeni bir C# betiği oluşturun. Bu betiğe MouseLook gibi bir isim verebilirsiniz.

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;

    void Start()
    {
        // Lock the cursor in the middle of the screen
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get mouse movement input
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        // Invert the Y-axis for a more natural control feel
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        // Rotate the camera around the X-axis (up and down)
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

        // Rotate the player object around the Y-axis (left and right)
        playerBody.Rotate(Vector3.up * mouseX);
    }
}

Bu kodda:

  • mouseSensitivity fare girişinin ne kadar hassas olacağını kontrol eder.
  • playerBody oyuncunun yatay fare hareketi için Y ekseninde dönen dönüşümünü temsil eder.
  • xRotation değişkeni mevcut dikey dönüşü (yukarı ve aşağı) depolar ve aşırı dönüşü önlemek için -90 ile 90 derece arasında sabitlenir.
  • Fare imlecini oyun penceresinin dışına çıkmasını önlemek için ekranın ortasına kilitliyoruz.

Adım 2: Komut Dosyasını Kameraya Ekleyin

Artık betik hazır olduğuna göre, Unity sahnenize gidin ve MouseLook betiğini kameranıza ekleyin (örneğin, Main Camera nesnesi).

Daha sonra, oyuncu nesnesini (genellikle karakter kontrolcüsü veya oyuncuyu temsil eden boş bir oyun nesnesi) Denetçi'deki komut dosyasının Oyuncu Vücudu alanına sürükleyerek playerBody alanını atayın.

Adım 3: Fare Hassasiyetini Ayarlayın

İstediğiniz kontrol seviyesine ulaşmak için mouseSensitivity değerini deneyebilirsiniz. İyi bir başlangıç ​​noktası 100'dür, ancak istediğiniz hassasiyet seviyesine bağlı olarak bunu daha yüksek veya daha düşük olarak ayarlayabilirsiniz.

Adım 4: Giriş Düzgünlüğünün Ele Alınması

Daha düzgün hareket için fare giriş değerlerine enterpolasyon uygulayabilirsiniz. Bu, kameranın bir konumdan diğerine atlamak yerine her kare arasında düzgün geçiş yapmasını sağlar. İşte bunu nasıl uygulayacağınıza dair bir örnek:

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;
    private Vector2 smoothInputVelocity;
    public float smoothTime = 0.1f;
    private Vector2 currentMouseDelta;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get raw mouse input
        Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * mouseSensitivity;

        // Smooth the mouse input
        currentMouseDelta = Vector2.SmoothDamp(currentMouseDelta, targetMouseDelta, ref smoothInputVelocity, smoothTime);

        xRotation -= currentMouseDelta.y * Time.deltaTime;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        playerBody.Rotate(Vector3.up * currentMouseDelta.x * Time.deltaTime);
    }
}

Bu güncellenmiş sürüm, Vector2.SmoothDamp kullanarak yumuşatmayı tanıtıyor. smoothTime değişkeni, geçişin ne kadar yumuşak olması gerektiğini kontrol eder. Daha düşük değerler hareketi daha duyarlı hale getirirken, daha yüksek değerler onu daha yavaş ve daha kademeli hale getirir.

Adım 5: Test Etme ve İnce Ayar Yapma

Komut dosyasını yerleştirdikten sonra oyunu test edin ve fare hareketinin ne kadar pürüzsüz olmasını istediğinize bağlı olarak hassasiyet ve yumuşatma değerlerini ayarlayın. Ayrıca, kamera hareketine daha fazla veya daha az özgürlük sağlamak için sıkıştırma açısını da ayarlayabilirsiniz.

Çözüm

Unity projenizde akıcı fare hareketi uygulayarak, hassas ve akıcı kamera kontrolü sunarak oyuncu deneyimini önemli ölçüde geliştirebilirsiniz. Bu eğitim, temel bir fare hareketi sistemi kurma ve bunu akıcılaştırma teknikleriyle geliştirme konusunda size yol gösterdi.