Page 1 sur 2

[RESOLUE] Récupérer une variable d'un autre script.

Publié : 23 Jan 2022 00:01
par huglep
Bonjour a tous !

je rencontre un soucis qui devrait être pourtant simple à régler,
j'ai cherché un peu partout, suivi masse de tuto mais ne parvient pas à régler mon problème que voici :

je voudrai récupérer une variable d'un autre script qui se trouve sur mon objet "GameOversManager"

Voici mes codes :
GameOversManager

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameOversManager : MonoBehaviour
{

    public int die = 0; // C'est cet variables qui pose problème :/

    public GameObject gameOverUI;

    public void Start()
    {
        die = 0;
    }

    public void Update()
    {
        if (die == 1) // En gros je veut que quand dans l'autre script sa ajoute 1 car il player est mort sa active le GameOversUI
        {
           gameOverUI.SetActive(true);
        }
    }
}

Piege

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Piege : MonoBehaviour
{
    private GameOversManager gameOversManager;
       	void OnTriggerEnter2D (Collider2D collision)
    {
        if(collision.gameObject.name == "Player")
        {
            Debug.Log("Tu est mort !");
            gameOversManager.die = gameOversManager.die + 1; // C'est ici que je suis perdu, je ne comprend pas pourquoi sa n'ajoute pas 1 a die
        }	
	}

}
Et récupérer cette variable "die" dans un second script pour ajouter 1 est activer le processus d'élimination.

J'ai vu pas mal d'exemples avec GetComponent et GameObject.Find, mais si je comprends bien je ne peux récupérer qu'une fonction avec et non une variable.

En vous remerciant.

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 23 Jan 2022 00:45
par jmhoubre
Que te dit la console ? A priori elle devrait indiquer "null exception error" ou quelque chose de cet acabit.

Dans ton script Piege, ajoute cette ligne, avant if(collision.gameObject.name == "Player") :

Code : Tout sélectionner

Debug.Log(gameOversManager);
Que te dit la console ? Qu'en déduis-tu ?

Quelques remarques en passant :
  • if(collision.gameObject.name == "Player") : on évite de comparer le nom des objets (on peut les changer par inadvertance dans la scène et casser le code). A la rigueur, tu mets un tag Player sur ton joueur et tu compares :

    Code : Tout sélectionner

    if (collision.gameObject.CompareTag("Player"))
    {
    	// ton code 
    }
    
  • dans GameOversManager, Start ne sert à rien (die est déjà initialisée à 0).
  • dans GameOversManager , update scrute la variable die pour rien. Ce sont des ressources CPU gaspillées. Dans GameOversManager, crée une méthodepublique qui active l'écran de game over, et appelle cette méthode dans Piege depuis OnTriggerEnter (à la place de gameOversManager.die = gameOversManager.die + 1).

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 23 Jan 2022 11:30
par huglep
J'ai fait sa pour mon script piège :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Piege : MonoBehaviour
{
    public GameObject gameOverUI;
       	void OnTriggerEnter2D (Collider2D collision)
    {
        Debug.Log("TriggerEnter");
        if (collision.gameObject.CompareTag("Player"))
        {
            Debug.Log("Tu est mort !");
            gameOverUI.SetActive(true);
        }	
	}

}


Dans la console sa m'affiche l'erreur :
UnassignedReferenceException: The variable gameOverUI of Piege has not been assigned.
You probably need to assign the gameOverUI variable of the Piege script in the inspector.
Piege.OnTriggerEnter2D (UnityEngine.Collider2D collision) (at Assets/Script/Piege.cs:15)


Pourtant j'ai bien mis dans le GameObject "piege" le GameOversUI
Image

Merci d'avance

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 23 Jan 2022 11:41
par jmhoubre
Merci d'ajouter un screen complet de la console.

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 23 Jan 2022 12:22
par huglep
Image
Voila l'image de toute la console et toute la page.

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 23 Jan 2022 15:44
par Max
Bonjour,

tu n'aurais pas éventuellement un autre GameObject avec le script Piege.cs ?

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 23 Jan 2022 18:46
par huglep
Bonjour,
Non je n'ai pas d'autre GameObject

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 24 Jan 2022 01:16
par jmhoubre
Bonsoir,

je te propose d'ajouter juste avant la ligne "gameOverUI.SetActive(true);" ces lignes, qui afficheront le nom du GameObject fautif :

Code : Tout sélectionner

if (gameOverUI == null)
{
	Debug.Log (gameObject.name);
}

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 27 Jan 2022 10:14
par Frederic
Bonjour,

Est-ce que ton Go auquel ton script est attacher est toujours actif ?

Re: [DB-RS] Récupérer une variable d'un autre script.

Publié : 27 Jan 2022 23:07
par huglep
C'est quoi mon "Go" ?
(dsl peut être c'est une question nul mais je suis vraiment débutant )