Problème de Raycast

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
GameWorldStudio
Messages : 65
Inscription : 29 Août 2017 10:34

Problème de Raycast

Message par GameWorldStudio » 15 Mars 2020 21:44

Bonsoirs à toutes et à tous. Je viens à vous aujourd'hui car je suis confronté à un problème assez embêtant que j'ai rencontré il y a maintenant quelques temps. Ayant essayé de régler le problème en testant plusieurs variantes, je n'y suis toujours pas arrivé.

Le contexte : J'ai une Intelligence Artificielle qui, en temps normal, se déplace de manière linéaire, effectuant une rotation aléatoire si trop proche d'un mur. Cette IA se met à suivre le joueur lorsque celui rentre dans son champs de visions. L'action se passant dans un labyrinthe, il y a donc forcément beaucoup de murs... La difficulté étant de détécté le joueur seulement lorsqu'il se trouve face à l'IA, et non pas derrière un mur. Pour cela, j'ai opté pour comparer la distance entre "Objet-Toupie" et "Joueur Toupie" pour voir laquelle est plus grande (a l'aide de RayCast) malheureusement, certaines situation vont au dessus de ce système et le joueurs se vois détécté alors qu'il n'y a pas lieu d'être.
Je me suis donc renseigné sur une fameuse propriété des RayCasts qui est le "transform.transformDirection" lors du lancement d'un RayCast qui permettrai de lancer un RayCast vers le joueur (ce qui m'aiderai énormément) mais lors des tests, je constate que le Raycast lancé ne va pas sur le personnage mais sur le côté (alors qu'il est sensé d'après les informations donné sur la ligne, aller sur le personnage) je m'en remet donc à vous dans l'espoir de trouver une solution à ce problème qui perdure depuis maintenant bien longtemps.

Merci beaucoup pour votre attention et votre soutient !
Pièces jointes
Capture.PNG
Capture.PNG (17.98 Kio) Consulté 2353 fois
prblm.PNG
prblm.PNG (95.85 Kio) Consulté 2353 fois

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Problème de Raycast

Message par djulio74 » 15 Mars 2020 22:20

Dans ton cas, tu as un player et un ennemi;
tu peux ainsi retrouver un vecteur direction de ton ennemi vers ton player (player.position - ennemi.position)pour ton raycast.
tu Peux aussi calculer l'angle entre la direction calculée et le vecteur "devant" ton ennemi.
si ton angle est inférieur a une certaine valeur, ton lance le raycast., et s'il touche ton player plutot qu'un mur, alors ton player est detecté.
en pseudo code :

Code : Tout sélectionner

float AngleVue = 60.0f; // angle de vision de ton ennemi
Vector3 playerDirection = (player.position - ennemi.position).normalized;
if (Vector3.angle( ennemi.forward, playerdirection) < angleVue /2.0f){
	raycastHit hit;
	if ( Raycast ( ennemi.position, playerdirection,hit){
		if( hit.transform == player){
			print("joueur detecté);
		}
	}
}

pour ton script montré, remplace DrawRay par DrawLine.
un drawray trace un rayn d'une origine dans une direction, alors qu'un drawline trace un rayon entre deux point.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

GameWorldStudio
Messages : 65
Inscription : 29 Août 2017 10:34

Re: Problème de Raycast

Message par GameWorldStudio » 15 Mars 2020 22:24

Je vous remercie énormément pour votre réponse ra3ide et précise ! Je fais les tests et je confirme la démarche ! Je ne connaissais pas l'utilisation de Vector3.Angle mais l'idée de "L'angle de vue" est vraiment pas mal !
Juste une petite question, comment fait-on pour faire des balise de code comme vous sur le forum ? J'ai chercher mais je n'ai pas trouver comment faire :/

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Problème de Raycast

Message par djulio74 » 16 Mars 2020 00:38

Avec plaisir.
Pour les balise de code, c'est le 5è pictogramme au dessus de "menu de polices" avec les <>.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

GameWorldStudio
Messages : 65
Inscription : 29 Août 2017 10:34

Re: Problème de Raycast

Message par GameWorldStudio » 16 Mars 2020 16:11

J'ai donc réaliser des tests avec votre code et cela fonctionne parfaitement ! Mieux encore, cela m'a apporté encore d'autre possibilité que je n'avais pas envisagé ! C'est exactement ça qu'il me fallait, de plus, j'ai pu apprendre la notion de Vector3.Angle et le .normalized !

Merci énormément

Répondre

Revenir vers « Scripting »