Bonjour,
j'ai reproduit la scène. N'ayant pas de précisions sur les objects, j'ai fait ceci :
- un
plane comme sol (je travaille en 3D)
- le
player est une capsule, avec un CapsuleCollider (trigger = false) et un trigger de détection (j'ai pris un BoxCollider de taille 5 x 1 x 5).
- les "
couvertures" sont des cubes avec un BoxCollider (que j'ai un peu surélevé pour qu'il ne touche pas le sol), un Rigidbody et ton script, que j'ai modifié :
Code : Tout sélectionner
using UnityEngine;
public class Cover : MonoBehaviour
{
private void OnTriggerEnter (Collider collider)
{
Debug.Log (collider.name);
if (collider.isTrigger == true)
{
Debug.Log ("Return activé.");
return;
}
Debug.Log ("Trigger activé.");
}
}
Quand le trigger de détection touche la couverture, j'ai l'affichage suivant :
UnityEngine.BoxCollider
Return activé.
Ce qui indique que le Player a bien touché la couverture avec le trigger de détection, et comme ce collider a isTrigger coché, la condition est activée.
Si tu fais ceci, tu devrais avoir réglé ton souci :
Code : Tout sélectionner
using UnityEngine;
public class Cover : MonoBehaviour
{
private void OnTriggerEnter (Collider collider)
{
// Le trigger de détection a-t-il été activé ?
if (collider.GetType () == typeof (BoxCollider))
{
Debug.Log ("Détection.");
return;
}
else
{
// A ce point, le collider non trigger est activé.
Debug.Log (collider.GetType ());
}
}
}
Ma console indique :
Détection
UnityEngine.CapsuleCollider
Cela fonctionne en 3D, je ne vois pas pourquoi cela ne fonctionnerait pas en 2D.
Toutefois, il faut que les 2 colliders du joueur (le trigger et le non trigger)
soient de type différents.
Il y a d'autres pistes de solutions que je n'ai pas creusées :
- enlever le collider de détection d'ennemi, et le remplacer par un test de présence d'ennemis dans un certain rayon avec
Physics2D.OverlapCircle. Note que le test n'a pas à être dans l'Update, mais peut être fait tous les 1/4 ou 1/2 secondes (dépend des vitesses et de l'échelle du jeu), avec
InvokeRepeating("Test", 0f, 0.33f).
- utiliser OnCollisionEnter2D : la couverture sera infranchissable (enlever isTrigger de son collider, passer son rigidbody en isKinematic) et ne détectera que les colliders avec isTrigger = false.