Page 1 sur 1

[RESOLU][Debutant] Valeur variable nulle = erreur !

Publié : 17 Jan 2023 18:05
par Zumo
Bonjour à tous ! A chaque jours sa demande !
Je cherche a mettre en evidence des objects lorsque je m'approche d'eux. J'ai donc trouvé QuickOutline sur l'assets store.
Il fait exactement ce que je cherche sauf quie je seche sur un problème depuis pas mal d'heures...

Code : Tout sélectionner

void highlight()
    {
         if(Physics.Raycast(cam.transform.position,cam.transform.TransformDirection(Vector3.forward),out RaycastHit hit, Mathf.Infinity)) //lance le rayon vers le premier objet touché
        {
            if (isDebugLog) Debug.Log("Distance " + hit.transform.gameObject.name + " visé " + RoundValue(hit.distance,1)+ " Layer: "+hit.transform.gameObject.layer);

            //Si l'objet est taggé "surbrillance" et et a une disatnce inférieur a la variable "highlightDistance" et a le layer "highlightLayer"
            //if (hit.transform.gameObject.tag == "Surbrillance"  && hit.distance < highlightDistance && hit.transform.gameObject.layer == highlightLayer)
            

            if (hit.transform.gameObject.tag == "Surbrillance" && hit.distance < highlightDistance)
            {
                hittedObject = hit.transform.gameObject;
                if (isDebugLog) Debug.Log("Objet trouvé " + hittedObject.name+" Distance= "+ RoundValue(hit.distance, 1));
                hittedObject.GetComponent<Outline>().enabled = true;
            }
            else 
            {
                hittedObject.GetComponent<Outline>().enabled = false;
                if (isDebugLog) Debug.Log("Sinon " + hittedObject.name);
                hittedObject = null;
            }
            
            if (actionInputValue && hittedObject != null && hittedObject.name == "Sphere")
            {
                if (isDebugLog) Debug.Log("Détruire l'objet visé " + hittedObject.name);
                Destroy(hittedObject); //effacer l'objet
                
            }
        }
    }
LMon soucis est que j'ai des erreurs à la ligne "hittedObject.GetComponent<Outline>().enabled = false;"
Je pense comprendre qu'il n'y a pas de valeur sur cette variable après avoir était réinitialisé mais je ne sais pas comment gérer ça ! J'ai essayer plein de chose mais je me suis un peu perdu...
Au secours ! ::d
UnassignedReferenceException: The variable hittedObject of Interaction has not been assigned.
You probably need to assign the hittedObject variable of the Interaction script in the inspector.
UnityEngine.GameObject.GetComponent[T] () (at <4746c126b0b54f3b834845974d1a9190>:0)
Interaction.highlight () (at Assets/Scripts/Interaction.cs:59)
Interaction.Update () (at Assets/Scripts/Interaction.cs:38)

Re: [Debutant] Valeur variable nulle = erreur !

Publié : 17 Jan 2023 18:26
par boubouk50
hittedObject peut ne pas exister puisque tu ne l'affectes pas dans le else. (il l'est dans le if)
Tu dois donc tester sa nullité avant de pouvoir l'utiliser.

Re: [Debutant] Valeur variable nulle = erreur !

Publié : 17 Jan 2023 21:15
par Zumo
Dis comme ça je ne comprend même pas comment j'ai pu passer tant de temps à chercher ce qui n'allais pas ! :(

Merci pour ton aide !

J'ai fais comme ça :

Code : Tout sélectionner

if(hittedObject!=null) hittedObject.GetComponent<Outline>().enabled = false;
Il y a sans doute mieux ?

Re: [Debutant] Valeur variable nulle = erreur !

Publié : 18 Jan 2023 09:27
par boubouk50
Oui, puisque le debug aussi te sortira la même erreur.

Code : Tout sélectionner

if (hit.transform.gameObject.tag == "Surbrillance" && hit.distance < highlightDistance)
{
	hittedObject = hit.transform.gameObject;
	hittedObject.GetComponent<Outline>().enabled = true;
                
	if (isDebugLog)
		Debug.Log("Objet trouvé " + hittedObject.name+" Distance= "+ RoundValue(hit.distance, 1));
}
else 
{
	if (hittedObject != null)
	{
		if (isDebugLog)
			Debug.Log("Sinon " + hittedObject.name);
                		
		hittedObject.GetComponent<Outline>().enabled = false;
		hittedObject = null;
	}
}

Re: [Debutant] Valeur variable nulle = erreur !

Publié : 18 Jan 2023 10:58
par Zumo
Top merci