124 lines
2.8 KiB
C#
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;
|
|
}
|
|
}
|