更新,spine和很多优化
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class BootLoader : MonoBehaviour
|
||||
{
|
||||
[Header("Settings")]
|
||||
[Tooltip("The name of the main scene to load asynchronously.")]
|
||||
[SerializeField] private string mainSceneName = "Main_main";
|
||||
|
||||
[Tooltip("Minimum time to show the splash screen (in seconds).")]
|
||||
[SerializeField] private float minSplashTime = 2.0f;
|
||||
|
||||
[Header("UI References")]
|
||||
[Tooltip("Optional Slider to show loading progress.")]
|
||||
[SerializeField] private Slider progressSlider;
|
||||
|
||||
[Tooltip("Optional Text to show loading percentage.")]
|
||||
[SerializeField] private Text progressText;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Start the asynchronous loading process
|
||||
StartCoroutine(LoadMainSceneAsync());
|
||||
}
|
||||
|
||||
private IEnumerator LoadMainSceneAsync()
|
||||
{
|
||||
// Prevent the screen from sleeping during loading
|
||||
Screen.sleepTimeout = SleepTimeout.NeverSleep;
|
||||
|
||||
float startTime = Time.time;
|
||||
|
||||
// Start loading the scene asynchronously
|
||||
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(mainSceneName);
|
||||
|
||||
// Prevent the scene from activating immediately
|
||||
asyncLoad.allowSceneActivation = false;
|
||||
|
||||
while (!asyncLoad.isDone)
|
||||
{
|
||||
// Calculate progress (0.0 to 0.9)
|
||||
float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f);
|
||||
|
||||
// Update UI if references are assigned
|
||||
if (progressSlider != null)
|
||||
{
|
||||
progressSlider.value = progress;
|
||||
}
|
||||
|
||||
if (progressText != null)
|
||||
{
|
||||
progressText.text = $"{(progress * 100):0}%";
|
||||
}
|
||||
|
||||
// Check if loading is complete (progress >= 0.9) and minimum time has passed
|
||||
if (asyncLoad.progress >= 0.9f)
|
||||
{
|
||||
// Wait for the minimum splash time
|
||||
float elapsedTime = Time.time - startTime;
|
||||
if (elapsedTime >= minSplashTime)
|
||||
{
|
||||
// Allow the scene to activate
|
||||
asyncLoad.allowSceneActivation = true;
|
||||
}
|
||||
}
|
||||
|
||||
yield return null;
|
||||
}
|
||||
|
||||
// Restore screen sleep timeout
|
||||
Screen.sleepTimeout = SleepTimeout.SystemSetting;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user