mawue Geschrieben 16. Februar 2014 Melden Share Geschrieben 16. Februar 2014 Werte Profis Ich bin Einsteiger in Unity und habe ein wichtige Frage zu meinem ersten nachgebauten Pong Spiel. a.) Wie kann man eine Geschwindigkeit gleichmäßig verändern, die auch nicht abnehmen soll. Ich habe so eine Grundgeschwindigkeit hinbekommen, aber die ist viel zu langsam. b.) gibt es irgendeine gute Erklärung zu Vektoren und Geschwindigkeitsregeln, ich kapier das nicht ganz.... Vielen Dank Euch allen im Voraus mawue Hier mein Code: void Start () { // set start direction rigidbody.velocity = Vector3.right; } // Update is called once per frame void Update () { // keep the speed of 1 rigidbody.velocity = rigidbody.velocity.normalized; } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Silveryard Geschrieben 16. Februar 2014 Melden Share Geschrieben 16. Februar 2014 a.) Wenn du es zu langsam findest, bau doch eine speed-Variable ein, mir der du das ganze mal nimmst Da du in Update bist, würde ich dir auch empfehlen, das ganze noch mit Time.deltaTime zu multiplizieren, damit es auch wirklich konstant ist. Konstante Beschleunigung könntest du folgendermaßen einbauen: du erzeugst noch eine float growingspeed und nimmst die mal der Zeit, die seit einem bestimmten Zeitpunkt vergangen ist (am einfachsten seit dem Startup) und das wird auf speed drauf gerechnet b.) https://docs.unity3d...ce/Vector3.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
mawue Geschrieben 16. Februar 2014 Autor Melden Share Geschrieben 16. Februar 2014 Werte Profis Ich bin Einsteiger in Unity und habe ein wichtige Frage zu meinem ersten nachgebauten Pong Spiel. a.) Wie kann man eine Geschwindigkeit gleichmäßig verändern, die auch nicht abnehmen soll. Ich habe so eine Grundgeschwindigkeit hinbekommen, aber die ist viel zu langsam. b.) gibt es irgendeine gute Erklärung zu Vektoren und Geschwindigkeitsregeln, ich kapier das nicht ganz.... Vielen Dank Euch allen im Voraus mawue Hier mein Code: void Start () { // set start direction rigidbody.velocity = Vector3.right; } // Update is called once per frame void Update () { // keep the speed of 1 rigidbody.velocity = rigidbody.velocity.normalized; } Danke für die schnelle Antwort. Ich fürchte, das ist mir noch zu hoch. .... b.) hab ich noch nachgelesen, aber bei a.) steige ich aus. Wie macht man sowas???? Danke nochmals mawue Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Silveryard Geschrieben 16. Februar 2014 Melden Share Geschrieben 16. Februar 2014 Für die Konstante Geschwindigkeit: //bestimmt die Startgeschwindigkeit public float speed = 5.0f; protected void Update() { //Ein leerer Vector3 Vector3 moveDirection = Vector3.zero; //Gibt die Geschwindigkeit nach rechts an moveDirection.x = speed * Time.deltaTime; rigidbody.velocity = moveDirection; } Wie kann man eine Geschwindigkeit gleichmäßig verändern, die auch nicht abnehmen soll Klingt für mich, als wolltest du eine Geschwindigkeit haben, die konstant ansteigt Ginge so: //bestimmt die Startgeschwindigkeitpublic float speed = 5.0f;//gibt an, wie schnell die Geschwindigkeit steigen/fallen sollpublic float growingSpeed = 1.1f;protected void Update(){ //Ein leerer Vector3 Vector3 moveDirection = Vector3.zero; //Gibt die Geschwindigkeit nach rechts an //Diesmal wird noch ein Wert hinzuaddiert, der mit der Zeit immer größer/kleiner wird wird moveDirection.x = (speed + Time.realTimeSinceStartup * growningSpeed) * Time.deltaTime; rigidbody.velocity = moveDirection;}[/Code] Ich würde aber eher zu einem CharacterController mit der .Move Methode raten Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
mawue Geschrieben 16. Februar 2014 Autor Melden Share Geschrieben 16. Februar 2014 Für die Konstante Geschwindigkeit: //bestimmt die Startgeschwindigkeit public float speed = 5.0f; protected void Update() { //Ein leerer Vector3 Vector3 moveDirection = Vector3.zero; //Gibt die Geschwindigkeit nach rechts an moveDirection.x = speed * Time.deltaTime; rigidbody.velocity = moveDirection; } Klingt für mich, als wolltest du eine Geschwindigkeit haben, die konstant ansteigt Ginge so: //bestimmt die Startgeschwindigkeitpublic float speed = 5.0f;//gibt an, wie schnell die Geschwindigkeit steigen/fallen sollpublic float growingSpeed = 1.1f;protected void Update(){ //Ein leerer Vector3 Vector3 moveDirection = Vector3.zero; //Gibt die Geschwindigkeit nach rechts an //Diesmal wird noch ein Wert hinzuaddiert, der mit der Zeit immer größer/kleiner wird wird moveDirection.x = (speed + Time.realTimeSinceStartup * growningSpeed) * Time.deltaTime; rigidbody.velocity = moveDirection;}[/Code] Ich würde aber eher zu einem CharacterController mit der .Move Methode raten Vielen Dank für die schnelle und ausführliche Antwort Ich habe beide Varianten versucht, aber die Kugel kriecht immer noch langsam dahin. Kann es etwas mit der Platzierung der Kugel zu tun haben, ich habe sie direkt auf die Arbeitsfläche ohne Untergrund gesetzt. mawue Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 16. Februar 2014 Melden Share Geschrieben 16. Februar 2014 Das * deltaTime ist eine wirklich ungute Idee beim Setzen der Geschwindigkeit. Ansonsten ist die Lösung gut, man muss nur im Inspektor am Speed-Wert rumschrauben. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
mawue Geschrieben 16. Februar 2014 Autor Melden Share Geschrieben 16. Februar 2014 Das * deltaTime ist eine wirklich ungute Idee beim Setzen der Geschwindigkeit. Ansonsten ist die Lösung gut, man muss nur im Inspektor am Speed-Wert rumschrauben. Danke, das war es tatsächlich. Jetzt funktionieren auch beide angegebenen Methodenvon Silveryard!!!. Jetzt muss ich noch eine Dummy Frage stellen: ich habe an den Seitenrändern die Abprallfunktion Bouncy eingestellt, das funktioniert jetzt aber nicht mehr. Die Kugel weigert sich abzuprallen und will immer weiter in die gleiche Richtung. Wie muss ich jetzt darauf reagieren?? Sorry und danke vorab mawue Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 16. Februar 2014 Melden Share Geschrieben 16. Februar 2014 Wie wäre es damit: public float speed = 1; void Update () { rigidbody.velocity = rigidbody.velocity.normalized * speed; } Ich weiß nicht genau was das mit .x da oben soll... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
mawue Geschrieben 17. Februar 2014 Autor Melden Share Geschrieben 17. Februar 2014 Wie wäre es damit: public float speed = 1; void Update () { rigidbody.velocity = rigidbody.velocity.normalized * speed; } Ich weiß nicht genau was das mit .x da oben soll... Das geht bei mir nicht richtig, er kriecht da immer mit der gleichen Geschwindigkeit dahin....egal, wie hoch die Speedvariable ist. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 17. Februar 2014 Melden Share Geschrieben 17. Februar 2014 Mir fällt auch gerade auf, dass da FixedUpdate stehen sollte - daran sollte es allerdings auch nicht liegen. Was hast du denn noch für andere Scripts, die mit dem betroffenen Rigidbody arbeiten? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
mawue Geschrieben 17. Februar 2014 Autor Melden Share Geschrieben 17. Februar 2014 Mir fällt auch gerade auf, dass da FixedUpdate stehen sollte - daran sollte es allerdings auch nicht liegen. Was hast du denn noch für andere Scripts, die mit dem betroffenen Rigidbody arbeiten? Hurra das wars tatsächlich: Der Code funkt jetzt mit: public float speed = 5.0f; void Start () { rigidbody.velocity = Vector3.right; } void FixedUpdate () { rigidbody.velocity = rigidbody.velocity.normalized*speed; } Das letzte Problem das ich noch habe (ich hoff ich bin nicht unverschämt): Die Pong-Kugel prallt jetzt einfach nur hin und her. Wie kann ich jetzt einbauen, dass sie mit jeder Berührung den Rückprallwinkel ändert? Danke ein letzesmal Mawue Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 17. Februar 2014 Melden Share Geschrieben 17. Februar 2014 Ungefähr sowas: void OnCollisionEnter() { speed += 1; } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
mawue Geschrieben 17. Februar 2014 Autor Melden Share Geschrieben 17. Februar 2014 Ungefähr sowas: void OnCollisionEnter() { speed += 1; } Das macht nur die Kugel schneller, ändert aber nicht einen Abprallwinkel. Ich weiß, dass das eigentlich das bouncy machen sollte, das funkt aber nicht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 18. Februar 2014 Melden Share Geschrieben 18. Februar 2014 Aaah, sorry, hab dich falsch verstanden (dabei hast du dich eigentlich klar ausgedrückt ) Bouncyness macht dein Objekt flummiartig, und da gilt ja immer Einfallwinkel = Ausfallwinkel. Wenn du nicht deinen Pongschläger irgendwie konvex machen willst, müssen wir scripten Wie genau möchtest du es haben? Zufälliges Abprallen (vermutlich nicht) Abprallwinkel in Abhängigkeit dazu, an welcher Stelle des Schlägers der Ball getroffen hat (ich glaube, das wäre Pong-Standard) Abrprallwinkel als Mischung aus "Einfallwinkel = Ausfallwinkel" und "wo der Schläger getroffen wurde" 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.