Page 1 sur 1
[DB-AL] Accès à un ui objet dans un constructeur
Publié : 27 Fév 2019 18:37
par Kebek
Bonjour, j'ai une question : Je crée une une instance de classe comme ceci :
ic = new InfoCenter();
Et dans mon constructeur, je veux récupérer l'objet BTN_1 comme ceci :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class InfoCenter
{
[SerializeField]
GameObject BTN_1;
public InfoCenter()
{
BTN_1.SetActive(true);
}
Pourquoi unity ne veut pas que j'aille accès à l'object ?
NullReferenceException: Object reference not set to an instance of an object
Pourtant j'ai placé mon objet dans l'inspector...
Merci d'avance pour votre réponse
Kebek
Re: Accès à un ui objet dans un constructeur
Publié : 27 Fév 2019 18:52
par EmileF
Salut
parce qu'a aucun moment ton objet a été initialisé.
D'abord ton script n'est pas avec l'extension MonoBehaviour.
en fait il devrait etre:
Code : Tout sélectionner
using UnityEngine;
using UnityEngine.UI;
public class InfoCenter : MonoBehaviour
{
[SerializeField]
GameObject BTN_1;
private void Start() //pour être activé dès le départ
{
BTN_1.SetActive(true);
}
}
et doit être attaché à un objet (Empty par exemple) pour être visible dans l'inspector
il te faut ensuite l'initialiser dans l'inspector en faisant glisser l'objet ui dans BTN_1
Utilise les balise codes pour afficher un script, c'est plus clair
Re: [DB-AL] Accès à un ui objet dans un constructeur
Publié : 28 Fév 2019 00:03
par Kebek
Bonjour, premièrement merci pour votre réponse.
Je suis au couran du MonoBehaviour et de la méthode Start() et j'avais aussi initialiser dans l'inspector en faisant glisser l'objet ui dans BTN_1.
Mais cette classe est une fenêtre qui s'ouvrira lorsque je désirerai l'ouvrir. Bref, je ne veux pas qu'il apparaisse lorsque le script va se déclancher. C'est pour cette raison que je voulais faire un constructeur moi-même et l'apeller seulement lorsque je veux que la fenêtre s'ouvre.
Il y a sûrement quelque chose que je ne comprend pas. Car pour faire son propre constructeur. il ne faut pas que la classe dérive de MonoBehaviour .... À mons que je fasse une classe ou une méthode static..... ou créer un Singleton ....... Je voulais juste faire ça propre mais je crois n'avoir pas tout à fait compris la notion de faire moi même ma classe avec mon propre constructeur.
Merci
Kebek
Re: [DB-AL] Accès à un ui objet dans un constructeur
Publié : 28 Fév 2019 00:30
par Kebek
Bonjour, j'ai fait un Singleton mais je ne suis pas certain que cela soit pas aussi propre que si j'avais fait ma propre classe avec mon propre constructeur... Dites-moi si je me trompe svp
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class InfoCenter : MonoBehaviour
{
[SerializeField]
GameObject PAN_InfoChild, BTN_1, BTN_2;
[SerializeField]
Sprite SP_Forest;
public static InfoCenter Instance;
void Awake()
{
Instance = this;
}
private void Start()
{
//Type info
//1: Nouveau joueur
//SetNewPanelInfo(choix);
}
public void SetNewPanelInfo(int choix)
{
//Si c'est un nouveau joueur
if (choix == 1)
{
BTN_1.SetActive(true);
BTN_2.SetActive(true);
PAN_InfoChild.transform.Find("Image").GetComponent<Image>().sprite = SP_Forest;
PAN_InfoChild.transform.Find("TXT_Titre").GetComponent<Text>().text = "Bienvenue à " + GameManager.instance.cityName;
PAN_InfoChild.transform.Find("TXT_Desc").GetComponent<Text>().text = GameManager.instance.playerName +
", merci de rejoindre notre communauté de joueur";
}
}
public void Exit()
{
Destroy(GameObject.Find("GameManager").gameObject);
PhotonNetwork.Disconnect();
UnityEngine.SceneManagement.SceneManager.LoadScene("Start");
}
public void Begin()
{
PAN_InfoChild.transform.Find("Image").GetComponent<Image>().sprite = null;
PAN_InfoChild.transform.Find("TXT_Titre").GetComponent<Text>().text = "";
PAN_InfoChild.transform.Find("TXT_Desc").GetComponent<Text>().text = "";
BTN_1.SetActive(false);
BTN_2.SetActive(false);
gameObject.SetActive(false);
}
}
Re: [DB-AL] Accès à un ui objet dans un constructeur
Publié : 28 Fév 2019 17:07
par EmileF
Désolé,
je ne comprends pas ce que tu souhaites obtenir, ça doit dépasser mes compétences.
Qu'est ce que tu entends par constructeur. Si c'est un inspector personnalisé il faut passer par l'Editor, enfin je pense que tu sais tout cela
Désolé
Re: [DB-AL] Accès à un ui objet dans un constructeur
Publié : 28 Fév 2019 17:20
par Kebek
Pas de problème, merci d'avoir essayer de m'aider. Si je trouve solution à mon problème, je le posterai ici.
@+
Kebek
Re: [DB-AL] Accès à un ui objet dans un constructeur
Publié : 04 Mars 2019 17:59
par zebilamouche
Salut,
si l'erreur indiquée en console est genérée lors de l'appel du constructeur, c'est que ta variable 'GameObject BTN_1' n'est pas initialisée.
Comment as-tu initialisé cette dernière ? A priori, pas via l'inspector vu que ta classe n'herite pas de MonoBehaviour.