Files
bansonic_beta_main/Assets/scripts/gTransBlack.cs
T

124 lines
2.8 KiB
C#

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<Canvas>(true);
}
if (b_CG == null)
{
b_CG = GetComponent<CanvasGroup>();
if (b_CG == null)
{
b_CG = GetComponentInChildren<CanvasGroup>(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<Camera>(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;
}
}