UI update 02
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
public class gTransBlack : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private Canvas b_Canvas;
|
||||
[SerializeField] private CanvasGroup b_CG;
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user