using System.Collections.Generic; using System.Linq; using GPUInstancer; using UnityEngine; using UnityEngine.SceneManagement; public class GPUInstancerToggle : MonoBehaviour { private List details; private List trees; private bool isEnabled = true; private Camera gameplayCamera; private Camera additiveCamera; private void Start() { details = Object.FindObjectsOfType().ToList(); trees = Object.FindObjectsOfType().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()).FirstOrDefault((Camera cam) => cam.enabled); } if ((bool)additiveCamera) { details.ForEach(delegate(GPUInstancerDetailManager e) { e.SetCamera(additiveCamera); }); trees.ForEach(delegate(GPUInstancerTreeManager e) { e.SetCamera(additiveCamera); }); } } } }