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.