Загрузка данных


using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameOverManager : MonoBehaviour
{
    [Header("Ссылки на интерфейс")]
    public GameObject deathScreen;     // Твоя панель DeathScreen
    public Button restartButton;       // Кнопка RestartButton

    private AudioSource audioSource;
    private bool isDead = false;
    private Transform playerCam;
    private Transform monsterLookTarget;
    
    private Image blackOverlay;        // Компонент цвета панели
    private float fadeTimer = 0f;

    void Start()
    {
        if (deathScreen != null)
        {
            deathScreen.SetActive(false);
            // Получаем компонент картинки с панели, чтобы менять прозрачность
            blackOverlay = deathScreen.GetComponent<Image>();
        }
        
        if (restartButton != null) restartButton.onClick.AddListener(RestartGame);
        
        audioSource = GetComponent<AudioSource>();
        if (Camera.main != null) playerCam = Camera.main.transform;
    }

    void Update()
    {
        // 1. Плавно разворачиваем камеру в лицо монстру
        if (isDead && playerCam != null && monsterLookTarget != null)
        {
            Vector3 targetDir = (monsterLookTarget.position + Vector3.up * 1.3f) - playerCam.position;
            Quaternion targetRot = Quaternion.LookRotation(targetDir);
            playerCam.rotation = Quaternion.Slerp(playerCam.rotation, targetRot, 8f * Time.unscaledDeltaTime);
            
            // 2. ПЛАВНОЕ ЗАТЕМНЕНИЕ ЭКРАНА В ЧЕРНЫЙ:
            if (blackOverlay != null)
            {
                fadeTimer += Time.unscaledDeltaTime * 0.7f; // Скорость потемнения (за 1.5-2 секунды)
                Color c = blackOverlay.color;
                c.a = Mathf.Clamp01(fadeTimer); // Плавно увеличиваем прозрачность до 1
                blackOverlay.color = c;
            }
        }
    }

    public void Trigger3DDeath(GameObject player, GameObject monster)
    {
        if (isDead) return;
        isDead = true;

        monsterLookTarget = monster.transform;

        // Отключаем физическое движение игроку
        if (player.TryGetComponent(out Rigidbody rb)) rb.isKinematic = true;

        // Включаем крик скримера
        if (audioSource != null) audioSource.Play();

        // Сразу включаем объект панели, но делаем её прозрачной
        if (deathScreen != null)
        {
            deathScreen.SetActive(true);
            if (blackOverlay != null)
            {
                Color c = blackOverlay.color;
                c.a = 0f; // Старт с полной прозрачности
                blackOverlay.color = c;
            }
            
            // Прячем кнопку "Начать заново" во время анимации, чтобы она не мешала скримеру
            if (restartButton != null) restartButton.gameObject.SetActive(false);
        }

        // Через 2 секунды полностью останавливаем игру и показываем кнопку перезапуска
        Invoke("ShowRestartButton", 2.0f);
    }

    void ShowRestartButton()
    {
        Time.timeScale = 0f; 
        Cursor.lockState = CursorLockMode.None;
        Cursor.visible = true;
        
        if (restartButton != null) restartButton.gameObject.SetActive(true);
    }

    void RestartGame()
    {
        Time.timeScale = 1f;
        SceneManager.LoadScene(SceneManager.GetActiveScene().name); 
    }
}