IA Détéction du joueur
IA Détéction du joueur
Bonsoir à tous ! Je viens à vous aujourd'hui car je bloque sur un problème concernant un script destiné à une intelligence Artificiel d'un ennemi.
Contexte : L'ennemi en question est une entité ovale volante. Elle se déplace de manière aléatoire tout en "esquivant" des objets grâce à un "rayCast" , lorsque le joueur rentre dans sa zone de détection (donc dès que je joueur se retrouve en face de cette entité) l'entité se met à le poursuivre jusqu'à soit l'avoir "attraper" soit jusqu'à ce que le joueur soit sorti de sa zone de détection et à ce moment là l'entité reprendra ses mouvement aléatoire. (Pour ne pas rentré dans les détails)
Problème : Je n'arrive pas à créer de zone de détection ! Je pense utiliser un rayCast mais je ne sais pas comment m'y prendre ! Ce qui me parait logique, ce serai donc de faire : "Si la position du joueur est inférieur au rayCast -> Poursuivre" mais Unity me dit qu'il ne peux pas convertir de "Vector" 3 et "float" en "int" donc grosse problématique quant à mon problème et mes recherches internet ne mènent à rien. Je m'en remet donc à vous afin de trouver une solution au préalable qui pourrai m'aider ! Vous trouverai la pièce jointe du script ci-dessous… en vous remerciant d'avance !
Contexte : L'ennemi en question est une entité ovale volante. Elle se déplace de manière aléatoire tout en "esquivant" des objets grâce à un "rayCast" , lorsque le joueur rentre dans sa zone de détection (donc dès que je joueur se retrouve en face de cette entité) l'entité se met à le poursuivre jusqu'à soit l'avoir "attraper" soit jusqu'à ce que le joueur soit sorti de sa zone de détection et à ce moment là l'entité reprendra ses mouvement aléatoire. (Pour ne pas rentré dans les détails)
Problème : Je n'arrive pas à créer de zone de détection ! Je pense utiliser un rayCast mais je ne sais pas comment m'y prendre ! Ce qui me parait logique, ce serai donc de faire : "Si la position du joueur est inférieur au rayCast -> Poursuivre" mais Unity me dit qu'il ne peux pas convertir de "Vector" 3 et "float" en "int" donc grosse problématique quant à mon problème et mes recherches internet ne mènent à rien. Je m'en remet donc à vous afin de trouver une solution au préalable qui pourrai m'aider ! Vous trouverai la pièce jointe du script ci-dessous… en vous remerciant d'avance !
Re: IA Détéction du joueur
Utilises plutôt des colliders en mode "isTrigger" pour définir tes zones de détection.
Les raycasts ne sont pas vraiment adaptés pour faire ça.
https://www.youtube.com/watch?v=m0fjrQkaES4
Les raycasts ne sont pas vraiment adaptés pour faire ça.
https://www.youtube.com/watch?v=m0fjrQkaES4
Re: IA Détéction du joueur
Ah ? Mais si l'on regarde la ligne 66 de mon script on peux voir que j'utilise un RayCast pour détecter une collision. De plus, est-il vraiment optimiser de creer un enorme cube invisible comme zone de détection pour un OnTrigger ? Le jeu se passe dans un labirynthe et le cube pourra donc voir loins dans les chemin donc détecter le joueur alors que ce dernier n'est même pas en face de lui !
Re: IA Détéction du joueur
Bonjour,
Plusieurs choses.
Pour créer des zones de détection, privilégier les Triggers (comme le suggère Alesk). Un BoxCollider en isTrigger n'est pas moins optimisé qu'un raycast.
En suite, concernant l'erreur dans ton code, il faut consulter la doc pour voir comment s’emploie ce genre de fonction. Dans ce cas la fonction
Enfin concernant ta situation de jeu, il existe des fonctions comme
PS: pas de screen de script, mais poste les directement dans ton message. Pour savoir comment procéder, lire ceci.
Plusieurs choses.
Pour créer des zones de détection, privilégier les Triggers (comme le suggère Alesk). Un BoxCollider en isTrigger n'est pas moins optimisé qu'un raycast.
En suite, concernant l'erreur dans ton code, il faut consulter la doc pour voir comment s’emploie ce genre de fonction. Dans ce cas la fonction
Physics.Raycast
. Là dans ton script, tu n'y es pas du tout.Enfin concernant ta situation de jeu, il existe des fonctions comme
Physics.SphereCast
qui permet de faire un cast avec la forme d'une sphere (à la place d'un simple rayon).PS: pas de screen de script, mais poste les directement dans ton message. Pour savoir comment procéder, lire ceci.
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
Re: IA Détéction du joueur
Je me suis simplifier la vie, le problème venait surtout du côté du changement de position en "y" qui faisait tout buggé, j'ai testé votre méthode de "OnTrigger" et ça me vas bien , ça marche ! Mais au passage et vu que c'est dans le même contexte, sauriez-vous comment changer le rayon d'un collider via script? Car j'aimerai que lorsque le joueur soit détecter la zone de détection (donc le capsule collider) S'agrandisse (Donc augmenter le rayon de la Capsule) le tout via script. Notez que je débute dans le c# et j'ai encore beaucoup de notion à assimiler ! Votre aide me fera progresser et je vous en remercie infiniment !
Ps : Pour le début de l'algorithme permettant de changer le rayon du collider, j'ai créer deux variable, la valeur du rayon du collider en temps normal noté "backValue" et une autre valeur du rayon du collider ce dernier agrandi noté "newValue" toute deux en float !
Merci !
Ps : Pour le début de l'algorithme permettant de changer le rayon du collider, j'ai créer deux variable, la valeur du rayon du collider en temps normal noté "backValue" et une autre valeur du rayon du collider ce dernier agrandi noté "newValue" toute deux en float !
Merci !
Re: IA Détéction du joueur
Bonjour,
Regarde du coté des paramètres du
CapsuleCollider
, tu peux modifier le radius ou encore la taille (height).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
Re: IA Détéction du joueur
Hello ! Je peux modifier cela manuellement en effet ! Mais ce que je cherche à faire c'est de le faire via script ! J'ai essayer un GetComponent<Radius>() mais cela ne marche pas ! Ce que Jaimerai ca serai la ligne, la méthode permettant de pouvoir modifier les paramètre du collider dans un script c# ....
Re: IA Détéction du joueur
https://docs.unity3d.com/ScriptReferenc ... lider.html
"radius" est une propriété du Component CapsuleCollider.
Donc pour le modifier :
"radius" est une propriété du Component CapsuleCollider.
Donc pour le modifier :
Code : Tout sélectionner
CapsuleCollider coco = GetComponent<CapsuleCollider>();
coco.radius = 3f;
Re: IA Détéction du joueur
C'est exactement ca qu'il me fallais ! Je vous remercie infiniment pour votre aide et votre réponse rapide !