So habe ich eine Leinwand, die nicht zerstört wird, weil es hält und Schieberegler, der eine Fortschrittsleiste zeigt. Es hat auch eine Schaltfläche, die wechselbar ist, wenn der Ladevorgang 0,9 ist. Das Problem, das ich habe, ist, wenn ich auf die Schaltfläche klicke (siehe activateNewScene()). Grundsätzlich passiert, wenn ich auf den Button klicke ist, dass ich meine Szene lade und mein Canvas deaktiviere. Aber das Problem ist, dass, nachdem ich meine Leinwand deaktiviert habe, die alte Szene noch etwa 0,5 Sekunden lang angezeigt wird und dann die neue Szene geladen wird. Ich möchte, dass nach dem Deaktivieren der Leinwand die neue Szene angezeigt wird. ohne die alte Szene für kurze Zeit zu sehen.Alte Szene erscheint immer noch für kurze Zeit beim Umschalten der Szene
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SceneLoaderGameObject : MonoBehaviour {
private SceneLoader sl;
public Canvas cav;
void Start() {
sl = new SceneLoader();
cav.GetComponent<Canvas>().enabled = false;
DontDestroyOnLoad (this.gameObject);
DontDestroyOnLoad (cav.transform.parent);
}
public void setNewNameAndLoadScene(string name){
if (cav != null) {
Slider slid = cav.transform.GetChild (1).GetComponent<Slider>();
Text tx = cav.transform.GetChild (2).GetComponent<Text>();
Button bttn = cav.transform.GetChild (3).GetComponent<Button>();
sl.setNewScene (name);
sl.setSliderAndTextToChange (slid, tx);
bttn.onClick.AddListener (() => activateNewScene());
cav.GetComponent<Canvas>().enabled = true;
cav.GetComponent<Canvas>().sortingOrder = 1;
StartCoroutine (sl.LoadAsynchron (name, bttn));
}
}
public void activateNewScene(){
sl.AsgetOP().allowSceneActivation=true;
cav.GetComponent<Canvas>().sortingOrder = 1;
cav.GetComponent<Canvas>().enabled = false;
}
}
EDIT: Hier ist der Code, der die Szene lädt:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class SceneLoader {
AsyncOperation operation;
string sceneName;
private Text txx =null;
private Slider slider=null;
public SceneLoader(){
}
public void setSliderAndTextToChange(Slider sl, Text tx){
txx = tx;
slider = sl;
}
public void setNewScene(string sceneName){
if (sceneName.Length == 0) {
throw new UnityException ("Please enter a name");
}
this.sceneName = sceneName;
}
public IEnumerator LoadAsynchron(string myMain, Button bttn){
operation = SceneManager.LoadSceneAsync (myMain);
operation.allowSceneActivation = false;
while (operation.isDone == false) {
float progress = Mathf.Clamp01 (operation.progress/0.9f);
slider.value = progress;
txx.text = progress * 100f + " %";
if (progress * 100f == 100f) {
bttn.interactable = true;
}
yield return null;
}
}
public AsyncOperation AsgetOP(){
return operation;
}
}
Ich denke, Sie sollten den Code veröffentlichen, der die Szene lädt. – Programmer
@Programmer hoffe, es hilft – DYRtLAWWWOTS