Jump to content
Unity Insider Forum
Sign in to follow this  
Peanut

Raycast2D funktioniert manchmal nicht

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

Share this post


Link to post
Share on other sites

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);

 

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...