[RESOLU] Récupérer un Vector3 d'un autre script

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
ced_le_dingue
Messages : 70
Inscription : 29 Oct 2019 21:58

[RESOLU] Récupérer un Vector3 d'un autre script

Message par ced_le_dingue » 19 Sep 2020 00:15

Salut les gars,

Je n'arrive pas à récupérer ma variable Vector3 "remettre_coordonnées_barre "de mon script "Sortie_de_jeu.cs", ça me met une erreur NullReferenceException:

1) Je récupère les coordonnées d'un objet situé dans ma scène:

Code : Tout sélectionner

//Script "Sortie_de_jeu.cs"
public Vector3 remettre_coordonnées_barre;

 private void OnTriggerEnter(Collider other)
     {
       remettre_coordonnées_barre = GameObject.Find("Clone_de_la_Barre").transform.position;
       
       // J'ai vérifié dans ma console et ça me donne bien mon Vector3:
       Debug.Log(remettre_coordonnées_barre); 
     }
2) Je réutilise les coordonnée de cet objet dans mon scripte "Gestion":

Code : Tout sélectionner

//Script "Gestion.cs"

//Je déclare une variable dans laquelle je stock mon Script où il y a mon Vector3 "remettre_coordonnées_barre"
Sortie_de_jeu scripte;

void Start()
    {
        setup();
        scripte = GetComponent<Sortie_de_jeu>();
    }

public void RAZ()
    {
    	//Unity me met un erreur NullReferenceException ici sur "scripte.remettre_coordonnées_barre"
        clone_barre = Instantiate(barre,scripte.remettre_coordonnées_barre, Quaternion.identity) as GameObject;
    }
    
Qu'est ce que je fais mal et est ce que j'ai fait trop compliqué pour récupérer ça?
Merci beaucoup pour votre aide :)

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

Re: Récupérer un Vector3 d'un autre script

Message par jmhoubre » 19 Sep 2020 04:16

Pas facile de répondre : tu devrais publier tes 2 scripts complets, les erreurs sont parfois éloignées de la ligne désignée par la console.

1) La méthode RAZ () est appelée où ?
2) Ne met pas d'accents dans le nom de tes identifiants.
3) Dans RAZ (), ajoute ceci après le commentaire :

Code : Tout sélectionner

	//Unity me met un erre ...
	Debug.Log("RAZ : " + scripte.remettre_coordonnées_barre) ;

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

Re: Récupérer un Vector3 d'un autre script

Message par Max » 19 Sep 2020 09:45

Bonjour,

en complément de la réponse de jmhoubre,
ced_le_dingue a écrit :
19 Sep 2020 00:15

Code : Tout sélectionner

    	//Unity me met un erreur NullReferenceException ici sur "scripte.remettre_coordonnées_barre"
        clone_barre = Instantiate(barre,scripte.remettre_coordonnées_barre, Quaternion.identity) as GameObject;
Qu'est ce que je fais mal et est ce que j'ai fait trop compliqué pour récupérer ça?
Si NullReferenceException il y a, c'est que une de tes références est null. Donc soit barre soit scripte.
D'après ton commentaire, visiblement cela serait scripte, qui n'est donc pas affecté,
la ligne scripte = GetComponent<Sortie_de_jeu>(); renvoyant visiblement null.
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

ced_le_dingue
Messages : 70
Inscription : 29 Oct 2019 21:58

Re: Récupérer un Vector3 d'un autre script

Message par ced_le_dingue » 19 Sep 2020 10:35

Salut jm et Max,

Bon bah avant de vous répondre j'ai voulu essayer de me corriger grâce à vos réponses, mais maintenant ça me met cette erreur là, dans mon 1er script, là où j'avais pas d'erreur avant :hehe: :
NullReferenceException: Object reference not set to an instance of an object
Sortie_de_jeu.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Scripts/Sortie_de_jeu.cs:30)


Et la ligne 30 c'est ça:

Code : Tout sélectionner

 scripte1.reset_barre(); 
Ci dessous les réponses que j'avais commencé à écrire:

Ah oui merde tu as raison jm ya un truc qui n'apparait pas dans ce que je vous ai montré, en fait c'est le vector3 d'un objet parent/enfant, c'est donc son vector3 que je réccupère dans mon 1er script:
Image
(Et quand je le récupère il me donne bien le vector3 que j'attends, ça correspond bien)

Max, Ah.... mais pourtant j'ai bien utilisé "scripte" ici:

Code : Tout sélectionner

clone_barre = Instantiate(barre, scripte.remettre_coordonnées_barre, Quaternion.identity) as GameObject;
Alors comment peut il être null? :pleur4:

D'accord Jm, je voulais éviter de mettre tous le scripts pour parasiter la réflexion, mais les voici:

1) Script Sortie_de_jeu :

Code : Tout sélectionner

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

public class Sortie_de_jeu : MonoBehaviour
{


    Gestion scripte1;
    public Vector3 remettre_coordonnées_barre;

    // Start is called before the first frame update
    void Start()
    {
        para = GetComponent<Gestion>();
    }

    // Update is called once per frame
    void Update()
    {

    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.name == "Sphere")
        {
            remettre_coordonnées_barre = GameObject.Find("Clone_de_la_Barre").transform.localPosition;
            Debug.Log(remettre_coordonnées_barre); // ça ça marche bien!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            scripte1.reset_barre(); // Il me met une nouvelle erreur là maintenant
        } 
        
    }
}
2) Script Gestion:

Code : Tout sélectionner


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // utilisé par exemple pour les textes
using UnityEngine.SceneManagement;
using UnityEngine.UIElements;

public class Gestion: MonoBehaviour
{

    public GameObject barre;
    public GameObject clone_barre;
    public Vector3 pos_barre;
    Sortie_de_jeu scripte;

    // Start is called before the first frame update
    void Start()
    {

        scripte = GetComponent<Sortie_de_jeu>();
    }

    // Update is called once per frame
    void Update()
    {
        
    }

 public void reset_barre()
    {
        Destroy(clone_barre);
        Debug.Log("RAZ : " + scripte.remettre_coordonnées_barre);
        clone_barre = Instantiate(barre, scripte.remettre_coordonnées_barre, Quaternion.identity) as GameObject;
    }
    


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

Re: Récupérer un Vector3 d'un autre script

Message par Max » 19 Sep 2020 10:49

tes deux scripts sont sur le même GameObject ?
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

ced_le_dingue
Messages : 70
Inscription : 29 Oct 2019 21:58

Re: Récupérer un Vector3 d'un autre script

Message par ced_le_dingue » 19 Sep 2020 10:59

Ah non ils ne le sont pas en effet.... grâce à toi je viens de trouver.

J'aurai du préciser:

- J'ai un objet plan qui me sert à detecter une sortie de balle. Et c'est dans cet objet que j'ai mis mon script "Sortie_de_balle"...

- Et mon script "Gestion" est rattaché à un Empty...

Donc grâce à ce que tu viens de dire, j'ai mis mes scripts dans mes inspectors respectif (dans mon plan, j'ai mis celui de Gestion, et dans celui de gestion j'ai mis celui de Sortie_de_balle)


Merci à tous les 2 encore une fois, vous êtes des cracks :modo:

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

Re: [RESOLU] Récupérer un Vector3 d'un autre script

Message par jmhoubre » 19 Sep 2020 11:40

Bonjour,

quelques conseils :

1) Quand tu cherches un objet ou un composant, teste le résultat :

Code : Tout sélectionner

	GameObject  gameObject = GameObject.FindObjectWithTag("Machin");
	if (gameObject == null) {
		Debug.LogError("Objet non trouvé.");
	} else {
		// Ici je peux utiliser l'objet.
	}
Ce n'est pas grand chose, mais rien que de l'écrire, tu te sens mieux, l'air devient plus frais et les oiseaux chantent.

2) Debug.log est ton ami. Un vrai. Pas comme Google qui te vole ton intimité. Sers t'en beaucoup. Vraiment. Et encore plus quand tu as des erreurs.

ced_le_dingue
Messages : 70
Inscription : 29 Oct 2019 21:58

Re: [RESOLU] Récupérer un Vector3 d'un autre script

Message par ced_le_dingue » 19 Sep 2020 17:25

Super jm, tu as parfaitement raison, je dois m'habituer à mettre ça à chaque fois, et c'est + fiable que google en effet... Merci énormément pour tes conseils :amen:

Répondre

Revenir vers « Scripting »