ulli Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 Hallo ich möchte einen BVH Viewer erstellen. ich möchte die Animation aber nicht nur einfach abspielen ich sondern mit einem Slider das Frame bestimmen. Der Slider ist also meineTimeline. Wenn ich meinen Slider auf 300 setze möchte ich gerne die Pose bei Frame 300 angezeigt bekommen. Das ist mein Ziel. Damit ihr euch das besser vorstellen könnt ist hier ein Bild. Jetzt könnte ich ja einfach meine Rotations/Positions Werte in Arrays schreiben. Mit dem Slider als Index nutzen und mit dem Code transform.localRotation = Quaternion.Euler(r[slider], p[slider], y[slider]); die Rotation auf meine einzelne Bones übertragen. Aber jetzt möchte ich euch Fragen ob das nicht auch einfacher geht. Kann ich auch eine Unity Animation per Script auslesen? Welche Möglichkeiten habe ich denn? Kann ich die Werte jedes Bones aus der Animation auslesen? Kann ich die Werte überschreiben? Oder die zweite Überlegung. Eine Unity Animation halt ja ein Start Frame und ein End Frame. Siehe Bild. Könnte ich diese beiden Werte per Script editieren. Also Start 300 End 300. Anzeige Loop. Dann würde immer nur dieses einen Frame angezeigt. Bin gespannt Ulli Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 Ich hab schon einmal so ein Tool gebastelt und ja, es geht einfacher oO Du kannst direkt dem Animator sagen, an welchem Zeitpunkt der Animation er stehen soll. Ging etwa so: animator.GetCurrentAnimatorStateInfo(0).normalizedTime = irgendwasZwischenNullUndEins; Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
ulli Geschrieben 22. August 2014 Autor Melden Share Geschrieben 22. August 2014 animator.GetCurrentAnimatorStateInfo(0).normalizedTime = irgendwasZwischenNullUndEins; Hallo Sascha. Vielen Dank schon mal. Ich werde es morgen früh testen. Wieso >irgendwasZwischenNullUndEins > Was ist denn mit der Framenummer? Grüße Ulli Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 Ist halt die normalisierte Zeit. 0 ist der erste Frame, 1 ist wieder der erste Frame und dazwischen liegt der Rest der Animation. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Helishcoffe Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 Wenn man aber die Anzahl der Frames insgesamt weiß, dann ist es ja auch nicht schwer, den jeweiligen Frame den man haben möchte zu errechnen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
ulli Geschrieben 23. August 2014 Autor Melden Share Geschrieben 23. August 2014 Hallo zusammen, Timtrucker ja, das umrechen sollte nicht so schwierig sein. Sascha ich bekomme folgende Meldung Assets/slider_to_animation.cs(20,53): error CS0200: Property or indexer `UnityEngine.AnimatorStateInfo.normalizedTime' cannot be assigned to (it is read only) So wie ich das verstehe kann ich den Wert nur lesen. Hier ist mein Code. using UnityEngine; using System.Collections; public class slider_to_animation : MonoBehaviour { public GameObject otherGameObject; private MainMenu mainMenu; Animator anim; void Awake (){ mainMenu = otherGameObject.GetComponent<MainMenu> (); } // Use this for initialization void Start () { } // Update is called once per frame void Update () { Debug.Log (mainMenu.hSliderValue); //mainMenu.hSliderValue ist ein Werz zwischen 0 und 1 und wird mit einem Slider gesteuert anim.GetCurrentAnimatorStateInfo(0).normalizedTime=mainMenu.hSliderValue; } } Grüße Ulli Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. August 2014 Melden Share Geschrieben 23. August 2014 Dammit. Ich habe das alte Projekt gefunden. Da war es mit Animator.ForceStateNormalizedTime gelöst. Das ist nur leider inzwischen deprecated //e: Im alten Animationssystem ging das. Ist zwar blöd, auf alte Sachen zurück zu greifen, die irgendwann ausrangiert werden, aber da ist's einfach nur animation["NameDesClips"].time = 0.5f; Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
ulli Geschrieben 25. August 2014 Autor Melden Share Geschrieben 25. August 2014 Hallo Sascha, ich bekomme die Fehlermeldung. There is no 'Animation' attached to the "mm-mocap-dummy-for-unity3d" game object, but a script is trying to access it. Ich habe einen Animator Controler. Ich habe eine Animation namens gehen. Die Animation wird auch abgespielt sobald ich das Game starte. Parameters habe ich im Animator keine. Mein Script habe ich meiner Dummy Figur hinzugefügt. Genau so wie meinen Animator Controler. Ich habe mir viele Tutorials angesehen. Ich komme aber nicht weiter. Ulli Hier ist mein Code. using UnityEngine; using System.Collections; public class slider_to_animation : MonoBehaviour { public GameObject otherGameObject; private MainMenu mainMenu; public float wertSlider; Animator anim; void Awake (){ mainMenu = otherGameObject.GetComponent<MainMenu> (); } // Use this for initialization void Start () { anim = GetComponent<Animator>(); } // Update is called once per frame void Update () { //Debug.Log (mainMenu.hSliderValue); wertSlider = mainMenu.hSliderValue; animation["gehen"].time = mainMenu.hSliderValue; } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 25. August 2014 Melden Share Geschrieben 25. August 2014 Du musst meinen Post auch lesen, anstatt nur den Code zu kopieren. Die Zeile funktioniert mit dem alten ("Legacy") Animationssystem. Mit dem neuem System, Mecanim, dessen Animator-Komponente du benutzt, scheint es aktuell gar nicht zu gehen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
ulli Geschrieben 25. August 2014 Autor Melden Share Geschrieben 25. August 2014 Hallo Sascha, danke für den Hinweis. Ich habe deinen Befehl nicht einfach nur kopiert. Ich habe deinen Befehl auch auf der folgenden Seite gefunden. http://docs.unity3d....State-time.html Da steht aber kein Hinweis auf ein Animationssystem. Leider ist das Beispiel nur sehr spartanisch. So das ich davon ausgegangen bin, das das so einfach ist. Ich dachte wenn ich das Script im Inspector zuweise ist das so einfach. Mit dem Befehl animation["NameDesClips"].time = 0.5f; ändere ich die Zeit der aktuellen Animation.(Default) Und dann würde ich erwarten das es einen Befehl gibt mit dem man eine andere Animation zur Default Animation macht. Es gibt also mehrere Animationssysteme gleichzeitig. Das war mir nicht bekannt. Wie viele Animationssysteme gibt es denn? Gibt es noch mehr solcher Fallen? Ich dachte /e: Im alten Animationssystem ging das. Ist zwar blöd, auf alte Sachen zurück zu greifen, die irgendwann ausrangiert werden, aber da ist's einfach nu bezieht sich auf animator.GetCurrentAnimatorStateInfo(0).normalizedTime = irgendwasZwischenNullUndEins; und animation["NameDesClips"].time = 0.5f; ist neu dazu gekommen. Hat Animation und Motion auch etwas mit den mehreren Animationssystemen zu tun? Dann werde ich wohl weiter suchen müssen. Grüße Ulli Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 25. August 2014 Melden Share Geschrieben 25. August 2014 Zusammengefasst: Die Animation-Komponente ist das alte System, Animator ist das neue (Mecanim). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
ulli Geschrieben 26. August 2014 Autor Melden Share Geschrieben 26. August 2014 Hallo Sascha, ich habe mir in der Doku Animation und Animator angesehen. Unter Animator (Inherited members Variables) finde ich auch Animation. Ist das das alte Animationssystem? Auf der Seite steht component.animation. In deinem letzten Beitrag hast du das alte Animationssystem so ähnlich genannt. Wie ist das denn zu sehen? Bedeutet neues System das es dieses Animationssystem bald das alte Systen ersetzt? Oder ist das eine Erweiterung? Wenn ich das Animationsfenster öffne dann sehe ich meine unter Animator hinzugefügte Animation. Für mich deutet das darauf hin das Animator eine Erweiterung ist. Bevor ich aber wieder in die falsche Richtung laufe, frage ich lieber noch mal nach. Grüße Ulli Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. August 2014 Melden Share Geschrieben 26. August 2014 Besser ist ^^ Mecanim ist neu und das alte Animationssystem ist... das alte. Die beiden haben nichts miteinander am Hut. Du musst dich entscheiden, ob du das alte benutzen willst oder beim neuen darauf warten, dass die fehlende Funktionalität wieder kommt. 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.