79 lines
2.2 KiB
C#
79 lines
2.2 KiB
C#
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<MeshRenderer>();
|
|
List<Material> 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();
|
|
}
|
|
}
|