Page 1 sur 1

IA Détéction du joueur

Publié : 12 Août 2019 20:49
par Gameworld
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é 4274 fois
Capture 2.PNG
Capture 2.PNG (33.63 Kio) Consulté 4274 fois

Re: IA Détéction du joueur

Publié : 12 Août 2019 22:41
par Alesk
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

Re: IA Détéction du joueur

Publié : 13 Août 2019 07:32
par Gameworld
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

Publié : 13 Août 2019 09:03
par Max
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.

Re: IA Détéction du joueur

Publié : 13 Août 2019 20:29
par Gameworld
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 !

Re: IA Détéction du joueur

Publié : 14 Août 2019 11:44
par Max
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).

Re: IA Détéction du joueur

Publié : 14 Août 2019 12:22
par Gameworld
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

Publié : 14 Août 2019 12:38
par Alesk
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;

Re: IA Détéction du joueur

Publié : 14 Août 2019 12:41
par Gameworld
C'est exactement ca qu'il me fallais ! Je vous remercie infiniment pour votre aide et votre réponse rapide !