Проблема такая. Есть пауза, которая стопит всю игру через Time.timeScale, ну и анимация воспроизводится. Всё работает нормально. Только игрок после снятия паузы не успевает среагировать и, чаще всего, умирает. В связи с этим стоит вопрос. Как сделать так, чтобы после того, как возобновляешь игру игроку давалось определённое кол-во времени (например пять секунд), которое выводилось(!) на экран. По типу, отжал паузу, на экране обратный отсчёт (5, 4, 3, 2, 1) и возобновилась игра. Долго гуглил, не смог ничего толкового на этот счёт найти. Надеюсь на вашу помощь.
Вот скрипт , через который хочу всю эту баню реализовывать.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PauseButton : MonoBehaviour {
bool OnClick;
public static bool Paused;
public float WaitToPause;
public Sprite SpritePause;
public Sprite SpritePlay;
Text TimeAfterPause;
private void Start()
{
GetComponent<Image>().sprite = SpritePause;
Paused = false;
}
public void Pause()
{
if (!Paused && !OnClick)
{
OnClick = true;
GetComponent<Image>().sprite = SpritePlay;
Paused = true;
StartCoroutine(AnimationStop(new Vector3(180, 0, 0), 0.3f));
}
else if (Paused && !OnClick)
{
Time.timeScale = 1;
OnClick = true;
GetComponent<Image>().sprite = SpritePause;
Paused = false;
StartCoroutine(AnimationPlay(new Vector3(180, 0, 0), 0.3f));
}
}
IEnumerator AnimationStop(Vector3 byAngles, float inTime)
{
var fromAngle = transform.rotation;
var toAngle = Quaternion.Euler(transform.eulerAngles + byAngles);
for (var t = 0f; t < 1; t += Time.deltaTime / inTime)
{
transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t);
yield return null;
}
OnClick = false;
StartCoroutine(Stop());
}
IEnumerator AnimationPlay(Vector3 byAngles, float inTime)
{
var fromAngle = transform.rotation;
var toAngle = Quaternion.Euler(transform.eulerAngles + byAngles);
for (var t = 0f; t < 1; t += Time.deltaTime / inTime)
{
transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t);
yield return null;
}
OnClick = false;
}
IEnumerator Stop()
{
Time.timeScale = 0;
yield return null;
}
}