IA Détéction du joueur

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Gameworld
Messages : 7
Inscription : 15 Mars 2019 15:56

IA Détéction du joueur

Message par Gameworld » 12 Août 2019 20:49

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 !

Capture.PNG
Capture.PNG (42.93 Kio) Consulté 4213 fois
Capture 2.PNG
Capture 2.PNG (33.63 Kio) Consulté 4213 fois

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: IA Détéction du joueur

Message par Alesk » 12 Août 2019 22:41

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

Gameworld
Messages : 7
Inscription : 15 Mars 2019 15:56

Re: IA Détéction du joueur

Message par Gameworld » 13 Août 2019 07:32

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 !

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: IA Détéction du joueur

Message par Max » 13 Août 2019 09:03

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 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.
Image
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

Gameworld
Messages : 7
Inscription : 15 Mars 2019 15:56

Re: IA Détéction du joueur

Message par Gameworld » 13 Août 2019 20:29

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 !

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: IA Détéction du joueur

Message par Max » 14 Août 2019 11:44

Bonjour,
Gameworld a écrit :
13 Août 2019 20:29
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.
Regarde du coté des paramètres du CapsuleCollider, tu peux modifier le radius ou encore la taille (height).
Image
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

Gameworld
Messages : 7
Inscription : 15 Mars 2019 15:56

Re: IA Détéction du joueur

Message par Gameworld » 14 Août 2019 12:22

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# ....

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: IA Détéction du joueur

Message par Alesk » 14 Août 2019 12:38

https://docs.unity3d.com/ScriptReferenc ... lider.html

"radius" est une propriété du Component CapsuleCollider.

Donc pour le modifier :

Code : Tout sélectionner

CapsuleCollider coco = GetComponent<CapsuleCollider>();
coco.radius = 3f;

Gameworld
Messages : 7
Inscription : 15 Mars 2019 15:56

Re: IA Détéction du joueur

Message par Gameworld » 14 Août 2019 12:41

C'est exactement ca qu'il me fallais ! Je vous remercie infiniment pour votre aide et votre réponse rapide !

Répondre

Revenir vers « Scripting »