using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class gTransBlack : MonoBehaviour { [SerializeField] private Canvas b_Canvas; [SerializeField] private CanvasGroup b_CG; [SerializeField] private Text nowLoadingText; public Canvas Canvas => b_Canvas; public CanvasGroup CanvasGroup => b_CG; private void Awake() { EnsureReferences(); ApplySceneCamera(); } private void OnEnable() { SceneManager.sceneLoaded -= HandleSceneLoaded; SceneManager.sceneLoaded += HandleSceneLoaded; ApplySceneCamera(); } private void OnDisable() { SceneManager.sceneLoaded -= HandleSceneLoaded; } private void HandleSceneLoaded(Scene scene, LoadSceneMode mode) { ApplySceneCamera(); } public void RefreshCanvasCamera() { ApplySceneCamera(); } public void SetNowLoadingText(string text) { if (nowLoadingText != null) { nowLoadingText.text = text; } } private void EnsureReferences() { if (b_Canvas == null) { b_Canvas = GetComponentInChildren(true); } if (b_CG == null) { b_CG = GetComponent(); if (b_CG == null) { b_CG = GetComponentInChildren(true); } } } private void ApplySceneCamera() { EnsureReferences(); if (b_Canvas == null) { return; } if (b_Canvas.renderMode == RenderMode.ScreenSpaceOverlay) { b_Canvas.worldCamera = null; return; } if (b_Canvas.transform.localScale == Vector3.zero) { b_Canvas.transform.localScale = Vector3.one; } Camera targetCamera = ResolveFirstSceneCamera(); if (targetCamera == null) { return; } b_Canvas.worldCamera = targetCamera; } private static Camera ResolveFirstSceneCamera() { Camera mainCam = Camera.main; if (mainCam != null && mainCam.gameObject.scene.IsValid() && mainCam.gameObject.scene.isLoaded) { return mainCam; } Camera[] cameras = Object.FindObjectsByType(FindObjectsInactive.Exclude, FindObjectsSortMode.None); for (int i = 0; i < cameras.Length; i++) { Camera camera = cameras[i]; if (camera == null || !camera.isActiveAndEnabled) { continue; } if (!camera.gameObject.scene.IsValid() || !camera.gameObject.scene.isLoaded) { continue; } return camera; } return null; } }