Files
cppk-ar/Assets/Scripts/SceneHandler.cs
T
2022-11-13 17:20:18 +05:00

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();
}
}