72 lines
1.7 KiB
C#
72 lines
1.7 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using GPUInstancer;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
public class GPUInstancerToggle : MonoBehaviour
|
|
{
|
|
private List<GPUInstancerDetailManager> details;
|
|
|
|
private List<GPUInstancerTreeManager> trees;
|
|
|
|
private bool isEnabled = true;
|
|
|
|
private Camera gameplayCamera;
|
|
|
|
private Camera additiveCamera;
|
|
|
|
private void Start()
|
|
{
|
|
details = Object.FindObjectsOfType<GPUInstancerDetailManager>().ToList();
|
|
trees = Object.FindObjectsOfType<GPUInstancerTreeManager>().ToList();
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (GameManager.Instance.addectiveSceneLoaded == "none")
|
|
{
|
|
gameplayCamera = ((gameplayCamera != null) ? gameplayCamera : Camera.main);
|
|
additiveCamera = null;
|
|
if (!isEnabled)
|
|
{
|
|
isEnabled = true;
|
|
details.ForEach(delegate(GPUInstancerDetailManager e)
|
|
{
|
|
e.SetCamera(gameplayCamera);
|
|
});
|
|
trees.ForEach(delegate(GPUInstancerTreeManager e)
|
|
{
|
|
e.SetCamera(gameplayCamera);
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!isEnabled && (bool)additiveCamera)
|
|
{
|
|
return;
|
|
}
|
|
isEnabled = false;
|
|
Scene sceneByName = SceneManager.GetSceneByName(GameManager.Instance.addectiveSceneLoaded);
|
|
additiveCamera = null;
|
|
if (sceneByName.IsValid() && sceneByName.isLoaded)
|
|
{
|
|
GameObject[] rootGameObjects = sceneByName.GetRootGameObjects();
|
|
additiveCamera = rootGameObjects.SelectMany((GameObject obj) => obj.GetComponentsInChildren<Camera>()).FirstOrDefault((Camera cam) => cam.enabled);
|
|
}
|
|
if ((bool)additiveCamera)
|
|
{
|
|
details.ForEach(delegate(GPUInstancerDetailManager e)
|
|
{
|
|
e.SetCamera(additiveCamera);
|
|
});
|
|
trees.ForEach(delegate(GPUInstancerTreeManager e)
|
|
{
|
|
e.SetCamera(additiveCamera);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|