Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

TheSky

Members
  • Content count

    11
  • Joined

  • Last visited

Community Reputation

1 Neutral

About TheSky

  • Rank
    Member
  1. Problem mit Root Motion

    Was den Fehler betrifft, weiß ich nun in etwa, wo das Problkem ist, und wie man es umgehen kan. Das Problem ist nähmlich ein anderes als ich zuerst dachte. (@sascha hat mich in einem anderen Thread auf die Lösung gebracht) Das Problem ist nicht, dass das Physik2D-System nicht funktioniert, wenn root-Motion aktiviert ist. Das Physik2D-System funktioniert gut. Das Problem ist, dass aus irgend einem Grund rigidbody2D.velocity überschrieben wird, wenn root-Motion aktiviert ist. Da das Problem wohl irgendwie von der Animator-Komponente ausgeht, lässt sich das Problem simpel umgehen. Ich habe ein zusätzliches Skript erstellt. Für dieses Skript muss unter edit-->"Project Setting"-->"Skript Execution Order" eingestellt werden, dass es nach der Default-Time ausgewertet wird. (auf diese Weise wird das Skript erst ausgeführt, wenn alle anderen Skripte ihre Sachen erledigt haben) Ich speichere rigidbody.velocity nun in der Update-Methode und weise der rigidbody.velocity Komponente den gespeicherten Wert in der Late-Update-Methode (welche nach der Animator-Komponente ausgewertet wird) wieder zu. Ich weiß nicht warum rigidbody2D.velocity überschrieben wird, aber zumindest ist das Problem somit gelöst.
  2. @Sascha Ich muss mich korrigieren. LateUpdate funktioniert super. Im meinem Skript wurde die Position nur einmal geändert (und im nächsten Frame vom Animator rückgängig gemacht). Ich muss die Positionänderung selbstverständlich auch in allen weiteren LateUpdates aktualisieren, damit sie nicht rückgängig gemacht wird. Mein Fehler. (Das kommt davon, wenn man die Nacht durcharbeitet ^^ ) Danke, deine Lösung hat mir sehr weiter geholfen.
  3. @Sascha Habs gerade ausprobiert. Leider scheint auch das nicht zu funktionieren. Im Gegensatz zu vorher, sieht man nun jedoch wir sich die Position bei Druck auf die R-Taste für einen Moment verändert (schätze für einen Frame). Danach wird die Position sofort wieder zurückgesetzt.
  4. Hallo, ich habe (schon wieder) ein seltsames Problem mit dem Animationssystem entdeckt, das ich mir nicht erklären kann. Nehmen wir an, ich wollt die Position eines child-Objektes per Skript verändern (z.B. mit transform.localPosition). Eigentlich kein Problem. Allerdings scheint dieser Befehl nicht mehr zu funktionieren, wenn sich im Animationssystem eine Animation befindet, die die Position des Child-Objektes verändert, selbst dann, wenn diese Animation niemals abgespielt wird. Es wäre schön, wenn jemand mir jemand sagen kann, ob er dieses Verhalten reproduzieren kann, oder evtl. eine Lösung weiß. Wie das Verhalten erzeugt wird, erkläre ich an einer simplen Testszene (ich habe die Testszene auch noch mal an diesen Beitrag angehängt): -erstelle ein neues 2D-Projekt -erstellene ein neues Objekt über Assets-->create-->sprites-->square -erstellene ein neues Objekt über Assets-->create-->sprites-->Triangle -Ordne das Dreieck, den Viereck unter. Das Viereck ist nun das Parent, und das Dreieck das Child-Objekt -gib dem Parent ein kleines Skript (siehe unten), welches das Child-Objekt bei Druck auf die R-Taste an eine neue Position verschiebt. -Gib dem Parent einen Animator und erzeuge mit create-->empty einen leeren State und setze diesen als default-State Wenn nun das Skript gestartet wird, und man auf die R-Taste drückt, wechselt das Dreieck seine Position. So weit in Ordnung. -erzeuge nun eine weitere Animation, bei der die Postion des Child-Objektes etwas verändert wird. -füge die Animation dem Animator hinzu. Eine Transition ist nicht nötig. (Die Animation wird also nie abgespielt, und sollte daher eigentlich keinen Einfluss haben) Wenn man das Skipt nun erneut startet, bewegt sich das Dreieck bei Druck auf die R-Taste nicht mehr. Ist dieses Verhalten ein Bug, oder übersehe ich möglicherweise etwas? Es wäre auch schön, wenn jemand eine Lösung dafür hätte. Hier noch der Code zum Bewegen: using System.Collections; using System.Collections.Generic; using UnityEngine; public class resetChildPos : MonoBehaviour { private Transform child; // Use this for initialization void Start () { child = transform.GetChild(0).GetComponent<Transform>(); } // Update is called once per frame void Update () { if(Input.GetKeyDown("r")) { child.localPosition = (Vector2)child.localPosition + new Vector2(1,0); } } } test4.zip
  5. Problem mit Root Motion

    Falls noch irgendjemand Probleme mit diesem Fehler hat, habe ich eine weitere Lösung. Das Problem tritt offenbar nur mit den 2017.X-Versionen von Unity auf. Also den Versiones des neuen Release-Zyklus. Mit der 5.6.4-Version vom Oktober 2017 tritt dieses Problem nicht auf.
  6. Problem mit Root Motion

    Ah, ich hatte noch was vergessen. Ich hatte das move-Skript etwas bearbeitet um zu sehen ob das ganze vielleicht mit rigidbody2d.moveposition statt rigidbody.velocity korrekt funktioniert. Habs auf den ursprünglichen Zustand zurückgesetzt. Wenn alle Animationen root-Motions sind, dann funktioniert es tatsächlich mit rigidbody2d.velocity. (allerdings nicht mit movePosition). Damit ergibt sich natürlich eine weitere Möglichkeit, das Problem zu lösen: Einfach zu jeder Animation einen Parameter (rotation, oder position) des root-parents hinzufügen (Erst dann erscheint offenbar die Einstellung "Generate root motion curves"), und bei allen Animationen "Generate root motion curves" aktivieren. Das sollte eine gute Möglichkeit sein, das Problem zu umgehen. Hm, da hätte ich mir die Mühe mit der Änderung der .anim-Dateien ja vorhin sparen können. ^^
  7. Problem mit Root Motion

    @Zer0Cool Habs mal getestet. Auch wenn in der Testszene alle Animationen root-Motion Animationen sind, werden die Physikalischen Kräfte blockiert. Man mus sich wohl im Moment damit abfinden, dass root motion und rigidbody2d zusammen nicht funktionieren. Ich hoffe das wird zukünftig noch geändert. Zumindest in meinem Fall gibt es noch alternativen. Ich werde keinen Rigidbody, sondern weiterhin ein Rigidbody2D benutzen. Mit einen Rigidbody müsste ich auch alle anderen Collider und Trigger im Spiel anpassen und die Skripte ändern. Das größte Problem wäre aber wohl die Performance . Stattdessen, habe ich inzwischen die Hirarchie der Körperteile meines Charakters etwas verändert. Mit der neuen Hirarchie kann ich die notwendigen Positionsänderungen auch ohne root motion vornehmen. Allerdings musste ich zusätzlich noch die ganzen .anim-Dateien mit dem Editor bearbeiten, damit ich die bisher erstellten Animation weiternutzen kann. Ziemlich lästig, aber es funktioniert.
  8. Problem mit Root Motion

    Ich habe auch mal eine kleine Testszene gebaut, um zu sehen, ob das Problem reproduzierbar ist. Testszene: -neues 2D-Projekt erstellt -ein Sprite über Assets-->create-->Sprites-->square erzeugt -Sprite einen Rigidbody2D (masse auf 0 gesetzt) und einen Animator gegeben -ein einfaches Skript geschrieben, dass das Sprite durch druck auf A und D nach links oder rechts bewegt. (Code siehe unten) -eine einfache sich wiederholende Animation erstellt, die den Sprite rotiert (keine root Animation) und als Default-State gesetzt. Diese Szene habe ich dann erstmal getestet. Alles funktioniert. Der Sprite dreht sich, und bewegt sich bei druck auf A oder D nach links oder rechts. Ich habe dann folgendes ergänzt: -eine root-Animation erstellt, ber der der Sprite seine Position verändert. -die Animation dem Animator hinzugefügt. (ohne Transition. Die Animation wird also zu keinem Zeitpunkt abgespielt) -"Generate root Motion Curves" für die root-Animation und "Apply root Motion" und "Animate Physics" im Animator aktiviert Diese Szene habe ich dann wieder getestet. Nun bewegt sich gar nichts mehr. Es werden keine Kräft mehr bei Druck auf a oder d ausgeübt. Auch die Default-Animation, die den Sprite rotiert wird nun nicht mehr abgespielt. Naja, laut der Anzeige im Animator läuft die Default-Animation, aber der Sprite rotiert einfach nicht mehr. Der Code zum Bewegen des Sprite: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { private Rigidbody2D rigidb; void Start () { rigidb = GetComponent<Rigidbody2D>(); } void Update () { if(Input.GetKey("a")) { rigidb.velocity = Vector2.left * 10; } else if(Input.GetKey("d")) { rigidb.velocity = Vector2.right * 10; }else { rigidb.velocity = Vector2.zero; } } } Das Problem ist also reproduzierbar. Ich habe das ganze auch mal mit der Funktion MovePosition probiert. Dasselbe ergebnis (funktioniert wunderbar ohne root-Animation, aber mit root-Animation bewegt sich nichts). Vielleicht muss ich mir einfach was anderes überlegen. Edit: Da es bei dir zu funktionieren schien, habe ich das ganze mal mit einem Rigidbody statt einem Rigidbody2D probiert. Damit funktioniert alles bestens. Das Problem ist also offenbar, dass die root-Animation ein Problem mit der Rigidbody2D-Komponente hat. Edit2: Ich denke ich kann auch ein rigidbody, statt eines Rigidbody2D nutzen. Das Problem scheint also erstmal umgangen. Ich hoffe nur, dass der Performaceunterschied nicht zu groß ist, das mein Projekt für Smartphones gedacht ist. @Zer0Cool Danke für deine Hilfe. Deine Testszene hat für mich die Lösung gebracht, um das Problem zu umgehen. Falls aber noch jemand eine Lösung für das eigentliche Problem hat, immer nur her damit.
  9. Problem mit Root Motion

    @Zer0Cool Danke, ich werd mir den Artikel durchlesen. Du meinst isKinematik zu aktivieren, während die root-Animation läuft? Das würde funktionieren, wenn das Problem nur auftreten würde, während die root-Animation abgespielt wird. Das Problem ist jedoch, dass das Problem auch auftritt, wenn die root-Animation gar nicht abgespielt wird. Das Problem tritt auf sobald die root-Animation dem Animator hinzugefügt wurde, selbst wenn es gar keine Transition zu der Animation gibt. Mir scheint root-Animation und Physiksystem vertragen sich nicht besonders.
  10. Problem mit Root Motion

    @Zer0Cool Habs gerade probiert. Leider zeigt sich keine Änderung.
  11. Problem mit Root Motion

    Hallo, ich versuche gerade eine 2D-Charakter zu animieren, und bin dabei auf ein kleines Problem gestoßen. Bisher habe ich Bewegungen mittels Unitys Physiksystem realisiert (z.B. über Rigidbody2d.velocity). Das hat bei den bisherigen Animationen auch gut geklappt. Nun soll der Charakter jedoch auf ein Objekt klettern. Mit dem Physiksystem schien das nicht so gut zu funktionieren, daher dachte ich, ich benutze root-Motion. In der Editor-Vorschau sah das auch ganz gut aus. Das Problem ist nun, dass sobald ich diese Animation zum Animator hinzufüge, Physikalische Kräfte nicht mehr richtig zu funktionieren scheinen, selbst wenn die besagte Animation in dem Moment gar nicht aktiv ist. Horizontale Kräfte, also in x-Richtung scheinen ignoriert zu werden, vertikale, wir für Sprünge und Gravitation scheinen aber noch zu funktionieren. "Generate root motion curves" wurde für die Animation aktiviert, "Apply root motion" ebenfalls. Kann es sein, dass root-Motion und das Physiksystem an ein und den selben Objekt einfach nicht funktionieren, oder übersehe ich etwas. Falls jemand Ratschläge hat, wäre ich sehr dankbar.
×