Peanut Geschrieben 29. Juni 2020 Melden Share Geschrieben 29. Juni 2020 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 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 29. Juni 2020 Melden Share Geschrieben 29. Juni 2020 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 More sharing options...
Peanut Geschrieben 30. Juni 2020 Autor Melden Share Geschrieben 30. Juni 2020 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 More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.