J'ai donc un gameobject qui charge de nouvelles scènes quand nessesarry. Le script attaché à l'objet de jeu a une variable qui contient la référence à un élément canvas (l'élément canvas a une barre de progression). Le problème est qu'après avoir chargé une nouvelle scène et que je veux charger une nouvelle scène dans cette scène chargée, je perds la référence à l'objet canvas parce que je ne peux pas le définir sur DontDestroyOnLoad. Ce que j'ai fait c'est de mettre l'élément canvas (voir la ligne commentée dans start function()) en tant qu'enfant de l'objet gameobject qui n'est pas détruit .. Après avoir fait cela, je ne reçois pas l'avertissement que j'ai perdu la référence d'objet MAIS elle ne va pas activer le canevas dans la fonction setNewNameAndLoadScene(). Ce que je veux dire par activer, c'est que le GUI n'apparaîtra pas à l'écran mais qu'il est dans la hiérarchie. J'ai vérifié s'il est nul ce qu'il n'était pas. Le programme passe par la ligne de code sans problème mais la toile n'apparaît pas sur l'écran de jeu.Toile ne l'activera pas après avoir été chargé dans une nouvelle scène
2ème EDIT: Je viens de vérifier (pendant l'exécution) ce qui si je mets mon canevas (qui est un enfant de mon gameobject) dans le canevas de la nouvelle scène chargée. ce qui est arrivé est qu'il a montré ma toile. mais ce que je me demande pourquoi le montre-t-il quand je le mets dans la toile de la scène? avant chargé ma première scène ma toile était pas dans la toile de la scène, mais a encore montré la barre de progression dans le gamescreen
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SceneLoaderGameObject : MonoBehaviour {
private SceneLoader sl;
public Canvas cav; //loses reference when loading new scene
void Start() {
sl = new SceneLoader();
cav.GetComponent<Canvas>().enabled = false;
DontDestroyOnLoad (this.gameObject);
DontDestroyOnLoad (this);
DontDestroyOnLoad (this.gameObject.transform.GetChild(0).GetComponent<Canvas>());
}
public void setNewNameAndLoadScene(string name){
if(name.Length ==0)
throw new UnityException("length 0");
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;
StartCoroutine (sl.LoadAsynchron (name, bttn));
}
}
public void activateNewScene(){
sl.AsgetOP().allowSceneActivation=true;
}
}
Veuillez être détaillé dans votre question. Que voulez-vous dire par "ne permettra pas"? Utilisez 'Debug.Log' pour voir ce qui se passe exactement. Vérifiez si la variable de canevas est null. Vérifiez dans l'éditeur et dites-nous si l'objet Canvas est toujours présent dans la hiérarchie. Ajoutez-les à votre question. Aidez-nous à vous aider. – Programmer
@Programmer Hope it hels – TiZaLjubavNisiRodjena
@Programmer Ou est-il possible de ne pas perdre de référence à ma toile. Donc, je ne dois pas en faire un enfant. donc je peux l'utiliser toujours comme une variable sauvegardée que j'active/désactive car c'est une toile – TiZaLjubavNisiRodjena