Efek Gerak Lambat dalam Persatuan

Mengubah kecepatan waktu di Unity cukup mudah, yang perlu Anda lakukan hanyalah mengubah nilai Time.timeScale.

Time.timeScale adalah nilai dalam Unity yang mengontrol peristiwa yang bergantung pada waktu, seperti Update fungsi, animasi, partikel, fisika, dll. Ketika timeScale adalah 1, waktu berlalu secepat waktu nyata, dengan 0,5 waktu berlalu 2 kali lebih lambat dari waktu nyata, dan dengan 2,0 waktu berlalu dua kali lebih cepat. Time.timeScale dengan nilai 0 menjeda penghitungan yang bergantung pada framerate, nilai negatif diabaikan.

Namun, menyetel nilai timeScale saja tidak cukup untuk membuat efek gerak lambat yang dapat dipercaya.

Beberapa komponen seperti AudioSource tidak terpengaruh oleh waktu, namun untungnya, mengubah nadanya sudah cukup untuk menambahkan efek gerak lambat pada audio.

Gerakan lambat dalam game mengacu pada efek visual dan terkadang fungsional di mana gameplay, grafik, dan animasi diperlambat untuk menciptakan pengalaman yang dramatis dan bergaya. Ini digunakan untuk menekankan momen-momen penting, meningkatkan kontrol pemain, atau menambahkan bakat sinematik ke urutan gameplay.

Saat permainan dalam gerak lambat, segala sesuatu tampak bergerak dengan kecepatan yang lebih rendah dibandingkan dengan permainan normal. Ini dapat mencakup pergerakan karakter, interaksi lingkungan, dan bahkan efek proyektil atau partikel. Efeknya sering kali dicapai dengan menyesuaikan kecepatan bingkai game atau dengan memanipulasi variabel terkait waktu dalam kode game.

Untuk membuat efek gerak lambat di game Unity, kita perlu menulis skrip yang akan mengubah nilai Time.timeScale dan akan mengubah nada semua Sumber Audio yang aktif.

Slow motion merupakan kebalikan dari fast motion dan merupakan proses memperlambat kecepatan permainan.

  • Buat skrip baru, beri nama 'SC_SlowMotionEffect', hapus semuanya lalu tempel kode di bawah ini di dalamnya:

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;
            }
        }
    }
}

  • Lampirkan skrip di atas ke GameObject mana pun lalu tekan 'Q' di dalam game untuk mengaktifkan/menonaktifkan efek gerak lambat.

Untuk memastikan Rigidbodies disimulasikan dengan lancar selama efek gerakan lambat, atur nilai Interpolasinya ke Interpolasi atau Ekstrapolasi.