Effet de ralenti dans Unity
Modifier le rythme temporel dans Unity est assez simple, tout ce que vous avez à faire est de modifier la valeur de Time.timeScale.
Time.timeScale est une valeur dans Unity qui contrôle les événements dépendant du temps, tels que Update fonctions, animations, particules, physique, etc. Lorsque timeScale vaut 1, le temps passe aussi vite qu'en temps réel, avec 0,5 temps passe 2 fois plus lentement qu'en temps réel, et avec 2,0 le temps passe deux fois plus vite. Time.timeScale avec la valeur 0 met en pause tous les calculs dépendant de la fréquence d'images, les valeurs négatives sont ignorées.
Cependant, il ne suffit pas de définir la valeur de timeScale pour créer un effet de ralenti crédible.
Certains composants tels que AudioSource ne sont pas affectés par le temps, mais heureusement, changer leur tonalité suffit pour ajouter un effet de ralenti à l'audio.
Le ralenti dans les jeux fait référence à un effet visuel et parfois fonctionnel où le gameplay, les graphismes et les animations sont ralentis pour créer une expérience dramatique et stylisée. Il est utilisé pour souligner les moments clés, améliorer le contrôle du joueur ou ajouter une touche cinématographique aux séquences de jeu.
Lorsque le jeu est au ralenti, tout semble se déplacer à une vitesse réduite par rapport au gameplay normal. Cela peut inclure des mouvements de personnages, des interactions environnementales et même des effets de projectiles ou de particules. L'effet est souvent obtenu en ajustant la fréquence d'images du jeu ou en manipulant des variables liées au temps dans le code du jeu.
Pour créer un effet de ralenti dans le jeu Unity, nous devrons écrire un script qui modifiera la valeur de Time.timeScale et modifier la hauteur de toutes les sources audio actives.
Le ralenti est le contraire du mouvement rapide et est le processus de ralentissement de la vitesse du jeu.
- Créez un nouveau script, appelez-le 'SC_SlowMotionEffect', supprimez tout puis collez le code ci-dessous à l'intérieur:
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;
}
}
}
}
- Attachez le script ci-dessus à n'importe quel GameObject puis appuyez sur 'Q' dans le jeu pour activer/désactiver l'effet de ralenti.
Pour vous assurer que les Rigidbodies sont simulés en douceur pendant l'effet de ralenti, définissez leur valeur d'interpolation sur Interpoler ou Extrapoler.