[c#] Problème RayCast

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
mineos
Messages : 121
Inscription : 19 Oct 2013 12:27
Localisation : Spain Alicante

[c#] Problème RayCast

Message par mineos » 01 Avr 2014 13:33

Bonjour,

Je rencontre un petit problème avec l'utilisation des Raycast (2D)

Ce que je cherche a faire :

Un raycast qui par d'un GameObject, jusqu’à xxx vers le bas, donc pour ça direction un -vector2d.up (logique non?)

Mon problème :

J'ai des GamObject situé (approx) a Y = 20 dans l'espace temps oO, et qui sont en chute (pas libre) avec un translate 0, -10, 0 et qui va arriver jusqu’à (approx) Y = -20, mon problème et que quand mon GameObject se trouve a Y = 20 il vise le haut (je l'affiche avec debug.drawray), plus il s'approche de Y = 0, plus il devient petit (jusqu’à ne plus exister pas totalement o.O), et quand il arrive a Y = -x le Raycast se retrouve bien vers le bas et s'agrandit jusqu’à l'infiniment grand...

Image

Le code :

Code : Tout sélectionner

   
        hit = Physics2D.Raycast(transform.position, -Vector2.up);

        if (hit != null && hit.collider != null)
        {
            Debug.DrawRay(transform.position, hit.point);
        }
(suis-je obligé de faire tout ceci sous Y=0 ?!)

Merci d'avance.
Cordialement
MINéOS

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [c#] Problème RayCast

Message par cayou66 » 01 Avr 2014 15:27

Salut,
attention, ton DrawRay n'est pas logique.
Le second paramètre d'un DrawRay c'est la direction, et non le point de contact.
Soit tu changes pour DrawLine, soit tu gardes mais tu remplaces le second argument par -Vector2.up.

Avatar de l’utilisateur
mineos
Messages : 121
Inscription : 19 Oct 2013 12:27
Localisation : Spain Alicante

Re: [c#] Problème RayCast

Message par mineos » 01 Avr 2014 15:31

Ah j'avais pas fais attention x).

merci mais comment faire pour voir la direction de mon ray du coup?

Debug.DrawLine(transform.position, hit.point);

Mais je vois pas de line dans ma scene :/
Cordialement
MINéOS

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [c#] Problème RayCast

Message par cayou66 » 01 Avr 2014 16:15

Ah ça par contre c'est pas normal.
Affiche dans la console ces deux valeurs (transform.position et hit.point), ça devrait t'indiquer où se trouve ta ligne.
Sinon tu utilises DrawRay, mais pense à utiliser une direction comme second paramètre.

Avatar de l’utilisateur
mineos
Messages : 121
Inscription : 19 Oct 2013 12:27
Localisation : Spain Alicante

Re: [c#] Problème RayCast

Message par mineos » 01 Avr 2014 16:24

J'ai trouvé mon problème, enfaite mon objet qui envoie le ray le réceptionne aussi...

il par du centre du sprite et détecte directement sont propre box collider x)

Pas normal? ou normal et je doit dire au ray de commencer en de hors du sprite? (créer un gameobject vide juste en dessous)

maintenant je comprend peut etre pourquoi dans l'exemple 2D de unity, le player se retrouve avec un gameobject vide en dessous de lui (groundCheck)

enfaite ça doit être ça. merci.
Cordialement
MINéOS

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [c#] Problème RayCast

Message par cayou66 » 01 Avr 2014 16:37

Oui bien vu,
tu peux aussi faire un RaycastAll et trier dans la liste des objets touchés ton propre objet.
Tu peux aussi rajouter un layermask sur le Raycast pour ignorer un certain layer, qui pourrait être celui de l'objet qui lance le raycast, si chaque objet est sur un layer différent.

Avatar de l’utilisateur
mineos
Messages : 121
Inscription : 19 Oct 2013 12:27
Localisation : Spain Alicante

Re: [c#] Problème RayCast

Message par mineos » 01 Avr 2014 18:22

Ok nickel, je vais opté pour un layermask, car le RaycastAll ne vos pas le coup pour la détection d'un seul élément, je suppose qu-il consomme plus qu'un simple raycast.

Merci again :)
Cordialement
MINéOS

Avatar de l’utilisateur
mineos
Messages : 121
Inscription : 19 Oct 2013 12:27
Localisation : Spain Alicante

Re: [c#] Problème RayCast

Message par mineos » 01 Avr 2014 18:53

C'est bon Artemisart et venu donner sont coup de souri x)

Code : Tout sélectionner

 RaycastHit2D temp = Physics2D.Raycast(transform.position, -Vector2.up, 100f, 1 << 10);

        if (temp && temp.collider != null)
        {
            Debug.DrawLine(transform.position, temp.point, Color.red);
            Debug.Log("Un objet est detecté");
        }
Le layer est en bit int, donc faut faire la decal (1 << 10)

Merci.
Cordialement
MINéOS

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [c#] Problème RayCast

Message par cayou66 » 02 Avr 2014 03:24

Au lieu de faire ça, tu sors une variable publique, c'est bien plus élégant ;)

Code : Tout sélectionner

public LayerMask rayCastLayer = -1; //-1 pour que par défaut il sélectionne tous tes layers

[...]

RaycastHit2D temp = Physics2D.Raycast(transform.position, -Vector2.up, 100f,rayCastLayer );

Avatar de l’utilisateur
mineos
Messages : 121
Inscription : 19 Oct 2013 12:27
Localisation : Spain Alicante

Re: [c#] Problème RayCast

Message par mineos » 02 Avr 2014 13:53

Yep, Artemisart ma l'avais dit juste après avoir posté :p

Merci quand même ;)
Cordialement
MINéOS

Répondre

Revenir vers « Scripting »