Bonjour à tous, tout d'abord désolé si je poste pas au bon endroit mais je pense que c'est ce qui correspond le mieux, vous pouvez déplacer si c'est pas le cas.
Alors voila je réalise un petit jeu de plateforme 2D avec Unity, et je suis confronté à deux problèmes, dont un que je peux contourner mais que j'aimerai bien comprendre l'origine.
J'ai un système de récolte de petites pièces, dans un script Coin.cs, et un script Door.cs dont voici le code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class Door : MonoBehaviour { void Start () { //door.gameObject.SetActive (false); // ça marche pas non plus ça, alors j'ai désactivé manuellement dans Unity } void Update () { if (Global.score == 10) { GameObject.FindGameObjectWithTag ("Door").SetActive (true); GameObject.Find("door").SetActive (true); //door.gameObject.SetActive(true); } } } |
Dans mon Gold.cs j'ai ma variable score que j'incrémente, et je demande à ce que "quand j'ai ramassé toutes mes pièces", l'objet door que j'avais désactivé par défaut s'active. et pour cela j'ai mis deux instructions, vu que la première ne marchait pas, qui sont
1 2 | GameObject.FindGameObjectWithTag ("Door").SetActive (true); GameObject.Find("door").SetActive (true); |
Pour tenter d'activer l'objet door, ou l'objet qui portait le tag Door (qui est ma porte dans les deux cas). Et dans les deux cas, on m'affiche une erreur : NullReferenceException : Object reference not set to an instance of an object.
Alors j'ai aussi tenté de faire comme mes pièces, c'est à dire dans une fonction comme celle-ci :
1 2 3 4 5 6 7 8 9 | void OnTriggerEnter2D(Collider2D obj) { switch (obj.tag) { case "Coin": Global.score++; Destroy(obj.gameObject); break; } } } |
Ce qui donnerait selon mes essais ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 | OnTriggerEnter2D(Collider2D door); { if (Global.score == 10 /*&& door.gameObject.tag == "door"*/) { switch (obj.tag) { case "Door": ; door.gameObject.SetActive (true); break; } } } |
Sauf que là il me dit que la fonction existe déjà, celle des pièces Du coup j'ai du loupé quelque chose de "simple" mais je ne vois pas quoi, j'ai du m'embrouiller alors j'aimerai savoir ou
Et second problème (plus court), dans mon script PlayerController je fais avancer mon personnage a gauche ou a droite selon si on appuie sur a ou d. J'essaye donc dans ma scène numéro deux d'utiliser le prefab player, avec le même script, et je me suis dit que ça ferait pareil. Sauf que quand je lance le jeu, le player "pivote" a 180 degrés aucun soucis, sauf qu'il se déplace pas et qu'il saute pas. Et je vois pas pourquoi non plus ?
Alors si quelqu'un a le temps de lire et de m'aider, ce serait gentil
Merci d'avance.