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

Charakter hängt an Collidern

Recommended Posts

Moin,

ich hab eigentlich schon länger das Problem, dass wenn der Charakter an einen Collider knallt, dass er festhängt. Bleibt einfach kleben. Was macht man da am besten?

DIe Collision Detection ist bereits auf Continous eingestellt. Ich hab mir auch schon paar Gedanken gemacht. Aber ich weiß nciht, ob das optimale Lösungen wären:

 

1. Den entsprechenden Hindernissen ein Bouncing Material hinzuzufügen, damit der Charakter ein bisschen abprallt?

2. Der Charakter bleibt vermutlich hängen, weil wenn er es berührt, die Schwerkraft einsetzt. Daher evlt ein Script schreiben, dass sobald der Charakter mit etwas kollidiert, die Schwerkraft nach unten setzt, damit der Charakter einfach abschmiert? 

 

Gruß und schönen Abend noch

Share this post


Link to post
Share on other sites
vor 10 Minuten schrieb SyntaxTalkstoMe:

DIe Collision Detection ist bereits auf Continous eingestellt

Wie der Name der Eigenschaft sagt, handelt es sich um Kollisionsdetektion. Das Verhalten deines Rigidbodys bezüglich Reibung usw. hat mit dieser Eigenschaft nichts zu tun.

Ich nehme an, du redest von seitlicher Bewegung, und dass dein Charakter mit Rigidbody gegen eine Wand fliegt und dann nicht herunterrutscht. Wenn dem so ist, liegt dein Problem in deinem Bewegungsscript. Ein reales Objekt, das gegen eine vertikale Wand fliegt, verliert seine horizontale Geschwindigkeit. Je nachdem, wo die Energie hingeleitet wird, geht sie gegen null oder wird zurückgegeben und das Objekt prallt ab. Dieses Verhalten kannst du durch Bounciness einstellen. Aber auch die Standard-Bounciness von 0 bedeutet kein Hängenbleiben, das ist also nicht die Lösung.

Du wirst ein Bewegungsscript haben, das den Rigidbody horizontal beschleunigt. Hier liegt das Problem wirklich - auch, wenn der Charakter gegen eine Wand prallt, fügt dieses Script weiterhin Kraft in Richtung Wand hinzu. Stelle dir eine Wand vor, die dich mit künstlicher Schwerkraft anzieht. Vielleicht kennst du ja sogar die Stargate-Folge :P. Da rutscht du auch nicht dran herunter, weil die Kraft, die dich zur Wand zieht (oder drückt) stärker ist als die normale Schwerkraft.

Die Lösung ist daher, nicht mehr konstant horizontale Kraft hinzuzufügen, sondern z.B. während eines Sprungs die horizontale Bewegung des Rigidbodys in Ruhe zu lassen.

  • Thanks 1

Share this post


Link to post
Share on other sites

Dann lag ich ja nah dran mit meiner Vermutung.

Und ja, es handelt sich um ein Objekt, wo der SPieler dann horizontal dranprallt.

Die Krux an der Sache ist, dass der Charakter sich in meinem Spiel automatisch horizontal in eine Richtung bewegt. Von daher ist es an der Stelle schwierig, keine horizontale Kraft hinzufügen. Es sei denn, ich habe dich damit jetzt falsch verstanden.

Aber wie lös ich das dann? Evlt ein Raycast der überprüft ob ich irgendwo dagegenlaufe und dann die Schwerkraft runtersetzt? Aber das hört sich eher nach einer Notlösung an. Es soll sauber programmiert sein.

Ja die Folge kenn ich :) 

Share this post


Link to post
Share on other sites

Witzig, genau das Thema hatte ich gerade schon in einer anderen Community. Endless Runner, Klebenbleiben an Plattformen. Die Sache ist die: Du willst bei einem Endless Runner zwar konstant nach rechts (oder geradeaus) bewegen, aber eben nur, bis eine Wand getroffen wird. In diesem Fall gibt es zwei Möglichkeiten: Der Spieler verliert das Spiel oder die horizontale Bewegung hört auf. In beiden Fällen kannst du mit OnCollisionEnter prüfen, ob der getroffene Collider vor der Spielfigur ist oder eben nicht (z.B. bei einem Boden). Im Falle einer Kollision mit der Wand kannst du dann so reagieren, wie du es für dein Spiel für richtig hältst.

Share this post


Link to post
Share on other sites

Ja, normal ist dann das Spiel verloren wenn er stehen bleibt. Aber mein Spiel bietet ein paar Möglichkeiten irgendwo hängen zu bleiben :)

Ich werd mal gucken. Hätte nur gedacht, dass es evlt irgendwo ein kleines Häckchen gibt, das alle Probleme löst *g*

 

Edit:

   if (collision.gameObject.CompareTag("nonDestroyableObject"))
        {
            rb2d.gravityScale = 0;
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        rb2d.gravityScale = gravitiyScale;
    }
}

läuft 👍

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×