Jump to content
Unity Insider Forum

Raycast2D funktioniert manchmal nicht


Peanut

Recommended Posts

Hallo liebe Unity Inside Community  :)

Ich habe an einem Dash gearbeitet und stehe vor follgendem Problem.Wenn ich dashe und ein Wand im Weg ist soll die Distanz des dashes so angepasst werden sodass der Spieler vor der wand ist. Die Distanz wird durch einen Mausclick ermittelt und durch einen Raycast geupdatet.

Der Code: 

if(Input.GetMouseButtonDown(1)){
                float distance = Vector2.Distance(new Vector2(transform.position.x,transform.position.y),Camera.main.ScreenToWorldPoint(Input.mousePosition));
                Vector2 direction = playerMovement.getMousePositionInWorldDirection();
                RaycastHit2D hit2D = Physics2D.Raycast(transform.position,direction,distance, playerMask);
                if(hit2D.collider != null){
                    Debug.Log(hit2D.transform.name);
                    if(hit2D.collider.transform.gameObject.CompareTag("Enviroment")){
                        distance = Vector2.Distance(new Vector2(transform.position.x,transform.position.y),new Vector2(hit2D.transform.position.x,hit2D.transform.position.y));
                    }
                    else if(hit2D.collider.transform.gameObject.CompareTag("Enemy")){
                        hit2D.transform.gameObject.GetComponent<IDamage>().ApplyDamage();
                    }
                }
                if(distance > maxDashDistance){
                    distance = maxDashDistance;
                }
                rb2d.MovePosition(new Vector2(transform.position.x,transform.position.y)-direction*distance);
                Debug.Log("Dash");
            }

 

Der Player und seine Childs haben den Layer "Ignore Raycast" und die Tags wurden auch gesetzt.

Der Raycast muss die Wand ignorieren da er den namen nicht ausgibt aber ich verstehe nicht wieso. Die Gelbe Box beim Player ist seine Hitbox und hat auch den Layer "Ignore Raycast" .sie ist auch seine Blickrichtung .Ich habe noch ein paar Screenshot hinzugefügt damit der sachverhalt klarer ist.

Vielen Dank für die Hilfe :D

 

Screenshot.png

Screenshot2.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich geh mal davon aus, das die Distanz-Berechnungen und der Direction-Vector stimmt. Das solltest du mal mit Debug.Line prüfen.

Ansonsten sehe ich du übergibst hier eine Mask (playerMask) und dann auch noch falsch, weil an der 3. Position die Distanz übergeben wird.

RaycastHit2D hit2D = Physics2D.Raycast(transform.position,direction*distance, playerMask);

Probier es mal so:

Debug.DrawRay(transform.position, direction*distance, Color.green, 2f);
RaycastHit2D hit2D = Physics2D.Raycast(transform.position, direction*distance);

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen vielen dank.

Ich habe durch den Debug.Line(musste es in update machen da der raycast während dem einen Frame des drückens der maus nicht sichbar wahr)

gesehen das meine Direction(keine ahnung warum xD) verkehrt herum war also einfach -direction hat das Problem gelöst xP

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...