using System; using System.Linq; using System.Collections; using System.Threading.Tasks; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.SceneManagement; public class SceneHandler : MonoBehaviour { [SerializeField] Material skyboxMaterial; [SerializeField] float startPositionValue; [SerializeField] float endPositionValue; [Space] [SerializeField] GameObject[] disableOnStart; public event Action OnSceneLoaded; async Task Start() { foreach(var item in disableOnStart) item.SetActive(false); var skyboxExposure = 1; float currentExposure = 0; skyboxMaterial.SetFloat("_Exposure", 0); float currentPositionValue = startPositionValue; var objectsWithEffect = FindObjectsOfType() .Where(x => x.sharedMaterial.shader.name.Contains("S_Holographic")) .ToList(); foreach(var item in objectsWithEffect) item.sharedMaterial.SetFloat("_EffectPosition", startPositionValue); while(currentPositionValue != endPositionValue) { currentPositionValue = Mathf.MoveTowards(currentPositionValue, endPositionValue, Time.deltaTime * 3); Debug.Log(currentPositionValue); foreach(var item in objectsWithEffect) item.material.SetFloat("_EffectPosition", currentPositionValue); await Task.Yield(); } while(currentExposure != skyboxExposure) { currentExposure = Mathf.MoveTowards(currentExposure, skyboxExposure, Time.deltaTime); skyboxMaterial.SetFloat("_Exposure", currentExposure); await Task.Yield(); } foreach(var item in disableOnStart) item.SetActive(true); OnSceneLoaded?.Invoke(); } }