Désactiver un collider dans OnTriggerEnter problème

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Matt21
Messages : 3
Inscription : 15 Mai 2017 15:46

Désactiver un collider dans OnTriggerEnter problème

Message par Matt21 » 15 Mai 2017 17:14

Bonjour,

j’ai un petit problème, je n’arrive pas à désactiver le collider de mon objet, quand je mets colliderSon.SetActive(false); dans OnTriggerEnter ça ne fonctionne pas. Voir code ci dessous. Si quelqu'un peu me donner un petit coup de main merci.

Code : Tout sélectionner

public new AudioSource audio;
	public Component colliderSon;
 
    	void Start()
    {
       	 audio = GetComponent<AudioSource>();
colliderSon = GetComponent<Component>();

	}

    
void OnTriggerEnter(Collider other)
    {
		if (other.CompareTag ("Vaisseau"))
       		audio.Play();
		colliderSon.SetActive(false);

    }
}
 ! Message de : boubouk50
Mauvaise section: En quoi cela a un rapport avec les tutos d'Unity France????
Balises Code pour encapsuler le code (5e bouton du menu d'édition)
Se présenter dans la section Présentation des membres, stp.
Donner un code sans nous expliquer ce que tu essaies de faire ET sans nous donner les erreurs console, ça risque de ne pas le faire...
MERCI DONC DE LIRE ET SUIVRE LA NETIQUETTE DU FORUM

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: Désactiver un collider dans OnTriggerEnter problème

Message par simonj » 15 Mai 2017 17:20

Salut,

Code : Tout sélectionner

colliderSon = GetComponent<Component>();
Tu t'es trompé ici. C'est :

Code : Tout sélectionner

colliderSon = GetComponent<Collider>();
Il me semble... En tout cas c'est surement pas "Component"

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Désactiver un collider dans OnTriggerEnter problème

Message par boubouk50 » 15 Mai 2017 17:23

Tu as des erreurs console en rouge dans Unity quand tu lances ton jeu qui t'expliquent d'où proviennent les erreurs. D'ailleurs n'as-tu pas un joli message: PLEASE FIX COMPILE ERRORS quand tu lances ton jeu dans l'éditeur?

Code : Tout sélectionner

colliderSon = GetComponent<Component>();
Qu'as-tu essayé de faire?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Matt21
Messages : 3
Inscription : 15 Mai 2017 15:46

Re: Désactiver un collider dans OnTriggerEnter problème

Message par Matt21 » 16 Mai 2017 10:17

Tout d'abord désolé pour l’emplacement sur le forum j’y suis allé un peu vite.
Merci pour vos réponses, mais j’ai toujours la même erreur que j’ai du mal à comprendre..

Assets/Scripts/Son.cs(26,15): error CS1061: Type `UnityEngine.Collider' does not contain a definition for `SetActive' and no extension method `SetActive' of type `UnityEngine.Collider' could be found. Are you missing an assembly reference?

J’ai réalisé un vaisseau qui rentre en collision avec un bonus pour augmenter la cadence de ses tirs, quand je rentre dans le collider non pas directement du bonus mais dans le GameObject “impact” (attaché avec des effets de particule) que j’ai placé en enfant du bonus, c’est là ou ce trouve le problème.
J’aimerai désactiver le Sphere collider uniquement pour éviter que le son ne se rejoue quand on passe dessus.
J’ai également essayé de remplacer colliderSon.SetActive(false); par colliderSon.enabled = false; pour désactiver le collider mais j’ai toujours la même erreur.
Je suis un tout petit peu plus que débutant sur Unity, tout n’est pas simple à comprendre. Encore merci pour votre aide.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Désactiver un collider dans OnTriggerEnter problème

Message par boubouk50 » 16 Mai 2017 10:34

Matt21 a écrit :Assets/Scripts/Son.cs(26,15): error CS1061: Type `UnityEngine.Collider' does not contain a definition for `SetActive' and no extension method `SetActive' of type `UnityEngine.Collider' could be found. Are you missing an assembly reference?
Petit cheminement de travail de débogage:
Le type `UnityEngine.Collider' ne contient pas de définition de la fonction '`SetActive'.
Tu vas donc voir la documentation UnityEngine.Collider et effectivement SetActive () n'existe pas. (Cette fonction est utilisée pour les gameObjects). Tu farfouilles un peu les fonctions et tombe sur enabled (comme tu as fait) qui semble faire ce que tu souhaites.

Code : Tout sélectionner

	public new AudioSource audio;
	public Collider colliderSon; //Définir le type de Component -> Collider
 
	void Start()
	{
		audio = GetComponent<AudioSource>();
		colliderSon = GetComponent<Collider>(); //Récupère le Collider s'il existe
	}
    
	void OnTriggerEnter(Collider other)
	{
		if (other.CompareTag ("Vaisseau"))
			audio.Play();
		if (colliderSon != null)		//Tester si le collider a été trouvé
			colliderSon.enabled = false;
		else {	//Else utile pour le debug mais pas forcément pour le jeu
			Debug.Log ("Le collider sur le gameObject " + this.gameObject.name + " n'a pas été trouvé");
			colliderSon = GetComponent<Collider>(); //Tentative de le récupérer à nouveau
		}
	}
}
Il faudra penser aussi à le remettre en place.
Aussi, pense bien qui fait quoi. Est-ce au vaisseau de gérer les collisions avec le reste ou bien est-ce le reste qui doit le gérer ou bien est-ce un gestionnaire de collision ou bien chacun se démerde?
En théorie, ton vaisseau ne doit pas désactiver son collider, ce serait plutôt à l'objet qu'il ne doit pas prendre (car par exemple les bonus sont à fond).
Je pense que dans l'architecture de ton raisonnement, les choses sont mal agencées et tu commences donc à te perdre car tu essaies de récupérer un mauvais choix fait en amont.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Matt21
Messages : 3
Inscription : 15 Mai 2017 15:46

Re: Désactiver un collider dans OnTriggerEnter problème

Message par Matt21 » 16 Mai 2017 11:07

Merci pour ton aide, ça fonctionne. C’est vrai que je n’ai pas encore bien acquis la logique du C# sur Unity j’ai plutôt tendance à tâtonner. Pour les collisions j’essaie en sorte que chacune se démerde, je ne sais pas trop si c’est la bonne méthode. J’ai encore du mal à voir le projet dans sa globalité et je fais les choses au fur et à mesure. Je vais me pencher sur la doc que tu m’as recommandé. Et merci pour la rapidité.

Répondre

Revenir vers « (C#) CSharp »