Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Playables;
- using UnityEngine.SceneManagement;
- public class CutscenePlayer : MonoBehaviour
- {
- [SerializeField]
- private PlayableDirector _cutsceneToPlay;
- IEnumerator LoadSceneAfterDelay()
- {
- yield return new WaitForSeconds(5.0f);
- SceneManager.LoadSceneAsync(1, LoadSceneMode.Additive);
- }
- private void SceneUnloaded(Scene arg0)
- {
- StartCoroutine(LoadSceneAfterDelay());
- }
- IEnumerator RunAtEndOfFrame(System.Action action)
- {
- yield return new WaitForEndOfFrame();
- action();
- }
- private void SceneLoaded(Scene scene, LoadSceneMode mode)
- {
- if (!scene.name.Equals("Cutscene"))
- return;
- StartCoroutine(RunAtEndOfFrame(
- () =>
- {
- _cutsceneToPlay?.Play();
- System.Action<PlayableDirector> extraAction = null;
- extraAction = (_) =>
- {
- _cutsceneToPlay.stopped -= extraAction;
- SceneManager.UnloadSceneAsync(1);
- };
- _cutsceneToPlay.stopped += extraAction;
- }));
- }
- void Start()
- {
- StartCoroutine(LoadSceneAfterDelay());
- }
- private void OnEnable()
- {
- SceneManager.sceneLoaded += SceneLoaded;
- SceneManager.sceneUnloaded += SceneUnloaded;
- }
- private void OnDisable()
- {
- SceneManager.sceneLoaded -= SceneLoaded;
- SceneManager.sceneUnloaded -= SceneUnloaded;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement