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

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
huglep
Messages : 7
Inscription : 22 Jan 2022 23:44

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

Message par huglep » 23 Jan 2022 00:01

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.

Avatar de l’utilisateur
jmhoubre
Messages : 657
Inscription : 05 Oct 2019 22:05

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

Message par jmhoubre » 23 Jan 2022 00:45

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).

huglep
Messages : 7
Inscription : 22 Jan 2022 23:44

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

Message par huglep » 23 Jan 2022 11:30

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

Avatar de l’utilisateur
jmhoubre
Messages : 657
Inscription : 05 Oct 2019 22:05

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

Message par jmhoubre » 23 Jan 2022 11:41

Merci d'ajouter un screen complet de la console.

huglep
Messages : 7
Inscription : 22 Jan 2022 23:44

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

Message par huglep » 23 Jan 2022 12:22

Image
Voila l'image de toute la console et toute la page.

Avatar de l’utilisateur
Max
Messages : 8614
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 23 Jan 2022 15:44

Bonjour,

tu n'aurais pas éventuellement un autre GameObject avec le script Piege.cs ?
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

huglep
Messages : 7
Inscription : 22 Jan 2022 23:44

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

Message par huglep » 23 Jan 2022 18:46

Bonjour,
Non je n'ai pas d'autre GameObject

Avatar de l’utilisateur
jmhoubre
Messages : 657
Inscription : 05 Oct 2019 22:05

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

Message par jmhoubre » 24 Jan 2022 01:16

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);
}

Frederic
Messages : 24
Inscription : 24 Déc 2021 18:25

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

Message par Frederic » 27 Jan 2022 10:14

Bonjour,

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

huglep
Messages : 7
Inscription : 22 Jan 2022 23:44

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

Message par huglep » 27 Jan 2022 23:07

C'est quoi mon "Go" ?
(dsl peut être c'est une question nul mais je suis vraiment débutant )

Répondre

Revenir vers « Scripting »