Unity'de Yavaş Hareket Efekti

Unity'te zaman hızını değiştirmek oldukça kolaydır, tek yapmanız gereken Time.timeScale değerini değiştirmektir.

Time.timeScale, Update işlevleri, animasyonlar, parçacıklar, fizik vb. gibi zamana bağlı olayları kontrol eden Unity cinsinden bir değerdir. timeScale 1 olduğunda zaman geçer gerçek zaman kadar hızlıdır; 0,5 zaman gerçek zamana göre 2 kat daha yavaş geçer ve 2,0 ile zaman iki kat daha hızlı geçer. 0 değerine sahip Time.timeScale, kare hızına bağlı hesaplamaları duraklatır; negatif değerler göz ardı edilir.

Ancak inandırıcı bir yavaş çekim efekti oluşturmak için sadece timeScale değerini ayarlamak yeterli değildir.

AudioSource gibi bazı bileşenler zamandan etkilenmez, ancak şans eseri perdelerini değiştirmek sese ağır çekim efekti eklemek için yeterlidir.

Oyunlardaki yavaş çekim, dramatik ve stilize bir deneyim yaratmak için oyunun, grafiklerin ve animasyonların yavaşlatıldığı görsel ve bazen de işlevsel bir etkiyi ifade eder. Önemli anları vurgulamak, oyuncu kontrolünü geliştirmek veya oyun sahnelerine sinematik yetenek eklemek için kullanılır.

Oyun ağır çekimdeyken, her şey normal oyuna kıyasla daha düşük bir hızda hareket ediyor gibi görünüyor. Bu, karakter hareketlerini, çevresel etkileşimleri ve hatta mermi veya parçacık etkilerini içerebilir. Bu etki genellikle oyunun kare hızını ayarlayarak veya oyunun kodundaki zamana bağlı değişkenleri değiştirerek elde edilir.

Unity oyununda ağır çekim efekti oluşturmak için Time.timeScale değerini değiştirecek ve tüm aktif Ses Kaynaklarının perdesini değiştirecek bir komut dosyası yazmamız gerekecek.

Yavaş çekim, hızlı çekimin tersidir ve oyun hızının yavaşlatılması işlemidir.

  • yeni bir komut dosyası oluşturun, onu 'SC_SlowMotionEffect' olarak adlandırın, içindeki her şeyi kaldırın ve ardından aşağıdaki kodu içine yapıştırın:

SC_SlowMotionEffect.cs

using UnityEngine;

public class SC_SlowMotionEffect : MonoBehaviour
{
    public float slowMotionTimeScale = 0.5f;
    public bool slowMotionEnabled = false;

    [System.Serializable]
    public class AudioSourceData
    {
        public AudioSource audioSource;
        public float defaultPitch;
    }

    AudioSourceData[] audioSources;

    // Start is called before the first frame update
    void Start()
    {
        //Find all AudioSources in the Scene and save their default pitch values
        AudioSource[] audios = FindObjectsOfType<AudioSource>();
        audioSources = new AudioSourceData[audios.Length];

        for (int i = 0; i < audios.Length; i++)
        {
            AudioSourceData tmpData = new AudioSourceData();
            tmpData.audioSource = audios[i];
            tmpData.defaultPitch = audios[i].pitch;
            audioSources[i] = tmpData;
        }

        SlowMotionEffect(slowMotionEnabled);
    }

    // Update is called once per frame
    void Update()
    {
        //Activate/Deactivate slow motion on key press
        if (Input.GetKeyDown(KeyCode.Q))
        {
            slowMotionEnabled = !slowMotionEnabled;
            SlowMotionEffect(slowMotionEnabled);
        }
    }

    void SlowMotionEffect(bool enabled)
    {
        Time.timeScale = enabled ? slowMotionTimeScale : 1;
        for (int i = 0; i < audioSources.Length; i++)
        {
            if (audioSources[i].audioSource)
            {
                audioSources[i].audioSource.pitch = audioSources[i].defaultPitch * Time.timeScale;
            }
        }
    }
}

  • Yukarıdaki komut dosyasını herhangi bir GameObject'e ekleyin ve ardından ağır çekim efektini etkinleştirmek/devre dışı bırakmak için oyunda 'Q' tuşuna basın.

Rijidcisimler'ün yavaş hareket efekti sırasında sorunsuz şekilde simüle edildiğinden emin olmak için, Interpolasyon değerlerini Interpolasyon veya Ekstrapolasyon olarak ayarlayın.

Önerilen Makaleler
Unity için Raycast ve Mermi Tabanlı Silah Atış Senaryosu
Unity'de Hareket İçin Joystick Denetleyicisi Nasıl Kurulur
FPC Swimmer - Sürükleyici Su Ortamları için Kapsamlı Bir Birlik Varlığı
Unity'de Xbox Denetleyicisi Nasıl Kullanılır
Varlık Mağazasındaki En İyi Birlik Varlıkları
Unity'de İmleç İzi Efekti Oluşturmak için C# Komut Dosyası
Zone Controller Pro - Unity Varlık Mağazası Paketi