Unity의 슬로우 모션 효과

Unity에서 시간 속도를 변경하는 것은 매우 쉽습니다. Time.timeScale의 값을 변경하기만 하면 됩니다.

Time.timeScale은 Update 함수, 애니메이션, 파티클, 물리 등과 같은 시간 종속 이벤트를 제어하는 ​​Unity의 값입니다. timeScale이 1이면 시간이 흐릅니다. 실시간만큼 빠르게, 0.5시간은 실시간보다 2배 느리게 흐르고, 2.0은 2배 빠르게 시간이 흐릅니다. Time.timeScale 값이 0이면 프레임 속도에 따른 계산이 일시 중지되고 음수 값은 무시됩니다.

그러나 단지 timeScale의 값을 설정하는 것만으로는 믿을 수 있는 슬로우모션 효과를 내기에는 충분하지 않습니다.

AudioSource와 같은 일부 구성 요소는 시간의 영향을 받지 않지만 운 좋게도 피치를 변경하면 오디오에 슬로우 모션 효과를 추가하기에 충분합니다.

게임에서의 슬로우 모션은 게임플레이, 그래픽, 애니메이션의 속도를 늦추어 드라마틱하고 양식화된 경험을 만들어내는 시각적, 때로는 기능적 효과를 의미합니다. 이는 중요한 순간을 강조하거나, 플레이어 제어를 개선하거나, 게임플레이 시퀀스에 영화적 감각을 추가하는 데 사용됩니다.

게임이 슬로우 모션으로 진행되면 일반 게임 플레이에 비해 모든 것이 느린 속도로 움직이는 것처럼 보입니다. 여기에는 캐릭터 움직임, 환경 상호 작용, 발사체 또는 입자 효과까지 포함될 수 있습니다. 효과는 종종 게임의 프레임 속도를 조정하거나 게임 코드에서 시간 관련 변수를 조작하여 달성됩니다.

Unity 게임에서 슬로우 모션 효과를 만들려면 Time.timeScale의 값을 변경하고 모든 활성 오디오 소스의 피치를 변경하는 스크립트를 작성해야 합니다.

슬로우모션은 패스트모션의 반대말로 게임 속도를 느리게 하는 과정을 말합니다.

  • 새 스크립트를 만들고 이름을 'SC_SlowMotionEffect'로 지정하고 모든 내용을 제거한 다음 그 안에 아래 코드를 붙여넣습니다.

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

슬로우 모션 효과 중에 Rigidbodies가 원활하게 시뮬레이션되도록 하려면 보간 값을 보간 또는 외삽으로 설정하십시오.

추천 기사
Unity용 2D 근접 공격 튜토리얼
에셋 스토어의 주요 Unity 에셋
Zone Controller Pro - Unity 에셋 스토어 패키지
Unity에서 새로운 HDRP 급수 시스템을 사용하는 방법
FPC Swimmer - 몰입형 수중 환경을 위한 포괄적인 Unity 에셋
Ultimate Spawner 2.0 - 판도를 바꾸는 자산
Unity용 마우스 보기 스크립트