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 UnityEvent OnSceneLoaded; async Task Start() { foreach(var item in disableOnStart) item.SetActive(false); var skyboxExposure = 1; float currentExposure = 0; if(skyboxMaterial != null) skyboxMaterial.SetFloat("_Exposure", 0); float currentPositionValue = startPositionValue; var objectsOnScene = FindObjectsOfType(); List materialsWithEffect = new(); foreach(var item in objectsOnScene) { foreach(var material in item.sharedMaterials) { if(material.shader.name.Contains("S_Holographic") || material.shader.name.Contains("S_Terrain")) materialsWithEffect.Add(material); } } foreach(var item in materialsWithEffect) item.SetFloat("_EffectPosition", startPositionValue); while(currentPositionValue != endPositionValue) { currentPositionValue = Mathf.MoveTowards(currentPositionValue, endPositionValue, Time.deltaTime * 3); foreach(var item in materialsWithEffect) item.SetFloat("_EffectPosition", currentPositionValue); await Task.Yield(); } if(skyboxMaterial != null) { 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(); } }