Jump to content
Unity Insider Forum

Rotationsanimation 2 kleine Problemchen


Thanny08

Recommended Posts

Hi, Ich habe ein Problem mit meiner Rotationsanimation des Players. Die Animation läuft zwar eigendlich ohne große Probleme aber es gibt 2 blöde Sachen die ich gerne beheben würde. 1. Die Animation wird abgespielt geht dann aber direkt wieder auf die Ausgangsposition, also dreht sich in der (Rotations) animation wieder zurück. 2. Es braucht irgendwie immer eine gewisse Zeit bis der Player anfängt sich zu drehen, also dreht er sich dann auf dem Boden weiter. Ich will die Animation nicht einfach schneller machen sondern sie nur schneller starten. Wär cool wenn jemand helfen könnte!!!! Hier noch mein Jump Script:

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerJump : MonoBehaviour
{
     
    
   
    Animator playerAnimator;
    private void Start()
    {
        playerAnimator = GetComponent<Animator>();
        playerRigidbody = GetComponent<Rigidbody2D>();
    }
    //Jump Funktiom
   
    
   
    void Update()
    {
        


        if (buttonHeldDown)
        {

            while (canJump)
            {
                if (canJump)
                {
                    canJump = false;
                    playerRigidbody.velocity = new Vector2(0f, jumpForce);

                    playerAnimator.SetTrigger("Jump");


                }
            }
        }
   }
   




}

Ich hab nur das eingefügt was von Relevanz seien könnte.

 

Wäre Dankbar für Hilfe!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der schnelle Start hat nichts mit dem Script zu tun.
Es liegt an den Einstellungen im Animator und der Animation selbst.

Die Animation:

Wenn du eine Animation, wie z.B. ein Drehen um die eigene Achse, erstellst, dann hast du ja einen Key für den Anfang und einen Key für das Ende der Animation gesetzt.
Der Anfang ist z.B. die Rotation 0,0,0  beim Frame 0 und das Ende is 0,0,360. beim Frame 60.
Das ist soweit ok, aber du siehst ja im sogenannten Dopesheet nur die gesetzen Keys in der Zeitleiste.
Unity macht von sich aus eine Beschleunigung und ein Abbremsen in die Animation rein. Das kannst du sehen, wenn du in der Aniamtionsansicht unten auf Curve klickst.
Wähle die Drehachse, die du verändert hast, aus und vergrößere mal das Ansichtsfenster in der Höhe (Der senkrechte Schieber, da sind an den Enden hellere Bereiche, die du anklicken und bei gehaltener Maustaste verschieben kannst).

Jetzt siehst du die Kurve, die Unity dir automatisch erzeugt hat. Sie sieht S-förmig aus.
Da du diese Beschleunigung nicht willst, und die will man nie, wenn eine Animation geloopt wird oder sehr schnell passieren soll, musst du die Keys in ihrer Art verändern.
Dafür klickst du mit rechts auf den Punkt der Animation und gehst in dem Fenster, welches du jetzt siehst, ganz unten auf Both Tangents und wählst dann linear aus.
Das machst du auch mit dem anderen Punkt.
Jetzt hat deine Animation keine weichen Enden mehr. Die Spur ist jetzt gerade.

Der Animator:

Der Animator bekommt über dein Script mitgeteilt, welchen Trigger er setzen soll. Dieses Event wird für eine Transition von einer Animation zur anderen genutzt.
Wenn du die Transition, ankickst, dann siehst du im inspector einige Werte und Optionen.
Ganz oben geht es um die Exittime. Das bedeutet, dass man hier einstellen kann, ob auf das Ende der vorigen Animation gewartet werden soll, oder nicht.
Gleich da drunter ist die Duration, also die Dauer einer Überblendung von alter zu neuer Animation. EIne Überblendung geht nur bei Bewegungen/Drehungen , wie z.B. Bones, wenn von der Idle-Animation in die Run-Animation geblendet wird. Hast du eine Bilderanimation, dann funktioniert das Überblenden nicht.
Die Exittime und die Duration arbeiten zusammen. Wenn du eine Duration von 0.25 hast, dann ist sie der Exittime abgezogen und da hast du dann in der Regel eine 0.75 stehen. Der Animator würde also bei 75% der Animation anfangen zu überblenden. Das kannst du aber alles frei einstellen.

Du willst aber nicht auf das Ende der vorigen Animation warten und du willst auch nicht überblenden, sondern beim Sprung soll sofort die Drehanimation laufen.
Also nimmst du den Haken der Exittime raus und stellst bei Duration eine 0 ein.
Jetzt wird die Animation sofort gestartet, egal was vorher war.
Sollte deine Animation auf loop eingestellt sein (das stellt man im inspecktor der Animation ein), dann würde sie sich ständig wiederholen, bis der Animator eine andere Animation startet. Und selbst wenn die Animation nicht loopt, soll sie ja bestimmt durch eine andere Animation ersetzt werden, sobald der Player wieder auf dem Boden ist.

Du willst auch nicht ständig eine Animation neu starten, wie es in deinem Script alle 0.1 Sekunden passieren würde. Deswegen muss man sich überlegen, ob man Steuervariablen nutzt, die einem sagen, in welchem Zustand man gerade ist,
oder man fragt den Animator ab, in welchem Zustand er gerade ist,
oder man baut den Animator so auf, dass nicht Trigger, sondern boolsche Werte genutzt werden und/oder gewisse Animationen nur von gewissen anderen Animationen ausgeführt werden können.

Egal.
Du weisst jetzt erst einmal auf was du achten musst.  
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also: erstmal mal wieder vielen Dank für deine ausführliche erklährung!!!!

 

Es hat alles super geklappt und hat mich auch im gesamtem Thema ,,Animationen" weitergebracht. Allerdings ist noch ein kleines Problem aufgetaucht.

Und zwar, wenn sich der Player dreht stoppt/oder verlangsamt sich dei Bewegung des Spielers. weißt du vlt wie man das behebne könnte? hab da die letzten Stunden schon so viel rumprobiert und gesucht und hab nichts gefunden... 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...