Ну начнем с простого это переход на другую сцену лучше почитать 
тут 
using UnityEngine.SceneManagement;
static public class SceneWalker   //как пример что бы не создавать обьект со скриптом 
{
    static public void SceneChanger(string sceneName,int sceneNumber =-1) // создаем метод перехода по имени или номеру сцены 
    {
        if (sceneNumber>=0) SceneManager.LoadScene(sceneName);
        else SceneManager.LoadScene(sceneName);      
    }
}
в первой сцене создаем объект со скриптом 
using UnityEngine;
public class SceneSelect : MonoBehaviour
{
    void Start()
    {
        Invoke(nameof(LoadNewScene), 2f); // через 2 секунды запуск метода LoadNewScene()
    }
    void LoadNewScene()
    {
        Debug.Log("Loding");
        SceneWalker.SceneChanger("Scene2",1);  // обращаетмя к реализации SceneWalker для загрузки новой сцены тут или имя или порядок
    }
}
далее надо обязательно добавить сцены в билд 

ну а если нужно плавное затемнение, то перед LoadNewScene() можно вызвать другой метод который потом вызовет LoadNewScene()
Ну думаю с переходам с переходом понятен, просто надо почитать документацию. Теперь вопрос как через анимацию запустить  LoadNewScene() подхода есть 2 
создаю простую анимацию 
1) модифицируем 2 скрипт
[SerializeField]GameObject box;   //обьект с анимацией 
    Animator _animator;  // аниматор что содержит анимацию
    void Start()
    {
        _animator = box.GetComponent<Animator>(); // получаем с обьекта компонент 
        float animTime = _animator.GetCurrentAnimatorStateInfo(0).length; // получаем время воспроизведения анимации 
        Invoke(nameof(LoadNewScene), animTime+0.1f); // запускам переход метод перехода на другую сцену через время анимации +0.1 сек 
    }
2) модифицируем 2 скрипт 
using UnityEngine;
public class SceneSelect : MonoBehaviour
{
    public void LoadNewScene()
    {
        Debug.Log("Loading");
        SceneWalker.SceneChanger("Scene2",1);
    }
}
Прикрепляем его к объекту с анимацией выбираем. Выбираем анимацию и добавляем Event в конец анимации