Jump to content
Unity Insider Forum

Animation editieren - Pose mit Timeline (Slider) bestimmen


ulli

Recommended Posts

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.

post-4808-0-53629800-1408730008_thumb.jpg

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.

post-4808-0-39102000-1408730044_thumb.jpg

 

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

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

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

Dammit. Ich habe das alte Projekt gefunden. Da war es mit Animator.ForceStateNormalizedTime gelöst. Das ist nur leider inzwischen deprecated :wacko:

 

//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

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

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

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

Archiviert

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

×
×
  • Neu erstellen...