Hiệu ứng chuyển động chậm trong Unity
Việc thay đổi tốc độ thời gian trong Unity khá dễ dàng, tất cả những gì bạn cần làm là thay đổi giá trị của Time.timeScale.
Time.timeScale là một giá trị trong Unity kiểm soát các sự kiện phụ thuộc vào thời gian, chẳng hạn như các hàm Update, hoạt ảnh, hạt, vật lý, v.v. Khi timeScale bằng 1, thời gian trôi qua nhanh như thời gian thực, với 0,5 thời gian trôi qua chậm hơn 2 lần so với thời gian thực và với 2.0 thời gian trôi qua nhanh gấp đôi. Time.timeScale với giá trị 0 sẽ tạm dừng mọi phép tính phụ thuộc vào tốc độ khung hình, các giá trị âm sẽ bị bỏ qua.
Tuy nhiên, chỉ đặt giá trị timeScale là không đủ để tạo hiệu ứng chuyển động chậm đáng tin cậy.
Một số thành phần như AudioSource không bị ảnh hưởng bởi thời gian, nhưng may mắn thay, việc thay đổi cao độ của chúng là đủ để thêm hiệu ứng chuyển động chậm vào âm thanh.
Chuyển động chậm trong trò chơi đề cập đến hiệu ứng hình ảnh và đôi khi là chức năng, trong đó lối chơi, đồ họa và hoạt ảnh được làm chậm lại để tạo ra trải nghiệm kịch tính và cách điệu. Nó được sử dụng để nhấn mạnh những khoảnh khắc quan trọng, cải thiện khả năng kiểm soát của người chơi hoặc thêm nét tinh tế điện ảnh vào các chuỗi trò chơi.
Khi trò chơi ở chế độ chuyển động chậm, mọi thứ dường như chuyển động với tốc độ chậm hơn so với cách chơi thông thường. Điều này có thể bao gồm chuyển động của nhân vật, tương tác môi trường và thậm chí cả hiệu ứng đạn hoặc hạt. Hiệu ứng này thường đạt được bằng cách điều chỉnh tốc độ khung hình của trò chơi hoặc bằng cách thao tác các biến liên quan đến thời gian trong mã của trò chơi.
Để tạo hiệu ứng chuyển động chậm trong trò chơi Unity, chúng ta sẽ cần viết một tập lệnh thay đổi giá trị của Time.timeScale và sẽ thay đổi cao độ của tất cả các Nguồn âm thanh đang hoạt động.
Chuyển động chậm trái ngược với chuyển động nhanh và là quá trình làm chậm tốc độ trò chơi.
- Tạo một tập lệnh mới, gọi nó là 'SC_SlowMotionEffect', xóa mọi thứ khỏi nó rồi dán mã bên dưới vào trong 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;
}
}
}
}
- Đính kèm tập lệnh ở trên vào bất kỳ GameObject nào sau đó nhấn 'Q' trong trò chơi để kích hoạt/tắt hiệu ứng chuyển động chậm.
Để đảm bảo Rigidbody được mô phỏng mượt mà trong hiệu ứng chuyển động chậm, hãy đặt giá trị Nội suy của chúng thành Nội suy hoặc Ngoại suy.