Raycasting dans l'Unité 2D en c#
Je suis nouveau en c# et à essayer de comprendre comment obtenir raycasting de travailler ici dans Unity3d nouveau 2d soutien.
J'obtiens le message d'erreur "impossible de convertir de 'UnityEngine.Ray2D' à 'UnityEngine.Vector2'"
for (int i = 0; i<3; i ++) {
float dir = Mathf.Sign(deltaY);
float x = (p.x + c.x - s.x/2) + s.x/2 * i;
float y = p.y + c.y + s.y/2 * dir;
ray = new Ray2D(new Vector3(x, y), new Vector3(0, dir));
Debug.DrawRay(ray.origin, ray.direction);
hit = Physics2D.Raycast(ray.origin, ray.direction, Mathf.Abs(deltaY), collisionMask);
if (hit != null && hit.collider != null)
{
}
if (Physics2D.Raycast(ray,out hit,Mathf.Abs(deltaY),collisionMask)) {
float dst = Vector2.Distance (ray.origin, hit.point);
if (dst > skin) {
deltaY = dst * dir + skin;
}
else {
deltaY = 0;
}
grounded = true;
break;
}
}
Quelqu'un peut-il m'aider?
- Quelle est l'erreur?
- si (Physics2D.Raycast(ray,touché,Mathf.Abs(deltaY),collisionMask))
Vous devez vous connecter pour publier un commentaire.
Voir le
Physics2D.Raycast
de la documentation, la méthode est définie commeAvec les paramètres définis comme
Vous utilisez un
Ray2D
au lieu d'unVector2D
pourorigin
. Si vous remplacez simplementray
avec unVector2D
il travailleraPour plus d'informations, voir passage de paramètres
Faire appeler comme vous l'avez fait dans le code plus haut:
hit = Physics2D.Raycast(ray.origine, ray.direction, Mathf.Abs(deltaY), collisionMask);
Ce code est inutile:
si (touche != null && frapper.collider != null)
{
}
Mais si vous avez besoin de saisir certaines logiques entre parenthèses - vous n'avez pas besoin de vérifier frappé de nullité, il est toujours un objet, il suffit de cocher frappé.collider