Jump to content
Unity Insider Forum

Simsala Animationen

Members
  • Content count

    18
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Simsala Animationen

  • Rank
    Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Nach so einigen Tests glaube ich habe ich es endlich. public GameObject Hitbox; public bool canMove = true; public bool canAttack = true; float speedFactor = 5; public Animator anim; public float zeitanpasserfixer; void Start() { anim.gameObject.GetComponent<Animator>(); }     void Update() { if (Input.GetKeyDown(KeyCode.Space) && anim.GetBool("attack 0") == false && canMove && canAttack == true) { attacke(); } else if (canMove == true) { if (canMove == true) { if (Input.GetKey(KeyCode.RightArrow)) { anim.SetBool("walk 0", true); transform.Translate(Vector3.forward * Time.deltaTime * speedFactor); } if (Input.GetKey(KeyCode.LeftArrow)) { anim.SetBool("walk back 0", true); transform.Translate(Vector3.back * Time.deltaTime * speedFactor); } if(Input.GetKeyUp(KeyCode.RightArrow)|| Input.GetKeyUp(KeyCode.LeftArrow)) { anim.SetBool("walk 0", false); anim.SetBool("walk back 0", false); } if (Input.GetKey(KeyCode.RightArrow) && Input.GetKey(KeyCode.LeftArrow)) { anim.SetBool("walk 0", false); anim.SetBool("walk back 0", false); } } } }     void attacke() { if (canAttack) { canAttack = false; canMove = false; Hitbox.SetActive(true); anim.SetBool("attack 0", true); StartCoroutine("verzogerung"); } } IEnumerator verzogerung() { yield return new WaitForSeconds(0.5f); anim.SetBool("walk 0", false); anim.SetBool("walk back 0", false); anim.SetBool("attack 0", false); yield return new WaitForSeconds(0.5f); attackeEnde(); } void attackeEnde() { Hitbox.SetActive(false); canMove = true; canAttack = true; } } Bisher konnte ich absolut keinen Fehler bei meinen Tests dabei entdecken. Dazu habe ich nur noch ein einziges Event aktiv, da "attackeEnde" letztendlich durch die 'StartCourontine' aktiviert wird. Danke! Jetzt scheint es endlich voran zu gehen mit meinem Kampfsystem. Letztendlich haben mir doch die "Courontinous" geholfen die ich so lange vermieden habe, dank dir!
  2. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Achso....okay. Ich habe dachte immer nur das ich ja auch auf die Couroutine zugreifen muss und es in der Start keinen Sinn machen würde. Vielen dank noch für diese Info.
  3. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    @SyntaxTalkstoMe Danke erst mal für deine Antwort und viel Spaß bei der Arbeit( wenn man bei Arbeit Spaß haben kann) Das es dieses Problem ist hatte ich bereits auch als Vermutung. Doch wenn ich die Schlagtaste mehrfach spamme, wird die Animation dennoch zu ende ausgeführt. Nur wenn ich durch das spammen genau den Endframe erwische bleibt es stecken. Ich hatte bei meinen Posts leider vergessen die Settings zu zeigen. Man kann aber im ersten Bild sehen das ich bereits "Fixed Duration" aktiviert habe. Dadurch wurde es zwar schon etwas schwerer das ganze zu verursachen doch das Problem ist dennoch da. Die "Exit Time" habe ich auch extra deaktiviert weil es die ganze Situation minimal besser machte. Doch das Problem bleibt. Mit StartCoroutine habe ich leider nur schlechte Erfahrungen gemacht. Jedes mal wenn ich das benutzt habe, hat es die eingegeben Sekunden nur kurz nach start des Spiels abgefragt und dann endloss das ausgeführt was es nur alle paar Sekunden machen sollte. Bevor ich die Evenst bei Animationen kannte habe ich es sogar damit versucht. Doch das war auch eine Katastrophe. Mal konnte man den Schlag mittendrin abbrechen und mal lief er bis zum Ende. Dann wurde es mal doppelt abgespielt. Eine andere Methode für eine Zeitverzögerung wäre auch folgendes > float nextFire; void (Update) if(Input.getKeyDown(KeyCode.Space) && Time.time > nextFire) { nextfire = Time.time + 0.11f(Animationslänge} Doch leider gibt es immer wieder neue Probleme wenn man bei Schlägen mit Zeitverzögerung arbeitet. Bei meinem Beispiel wäre es das man wieder einen Fehler beim laufen und dann Schlagen hat. Genau deshalb hatte ich mir eigentlich etwas von den Events bei den Animationen erhofft. Außerdem ist mir noch ein seltsamer Fehler aufgefallen. Das eigentliche Script habe ich ja schon gepostet. Doch darüber habe ich jetzt noch eine If-Bedingung über alle anderen eingebaut. if ( anim.GetBool("attack 0") == true && canMove == false) { canMove = true; anim.SetBool("attack 0", false); anim.SetBool("walk 0", false); anim.SetBool("walk back 0", false); print("Warum zur Hölle geht das nicht???!!!!"); } Das und ich habe "CanMove" auf public gesetzt. Wodurch ich beide Booleans ansehen konnte. Sämtliche Bedingungen waren erfüllt. Doch weder "attack 0" wurde auf False gesetzt und auch "canMove" wurde nicht auf true gesetzt. Allerdings wurde die print-Ausgabe ausgegeben. Also muss ich entweder doch auf deine Idee zurückgreifen oder sehen ob man die Events doch irgendwie noch fixen kann. Danke erst mal für die Antwort. Das das ganze Eventsystem bei den Animationen wohl doch irgendwie verbuggt zu sein scheint, habe ich mich jetzt letztendlich wirklich für eine Zeitverzögerungstacktick entschieden. public Animator anim; float nextFire; bool canMove = true; float speedFactor = 5; // Use this for initialization void Start () { anim.gameObject.GetComponent<Animator>(); } // Update is called once per frame void Update () { if(Input.GetKeyDown(KeyCode.Space) && Time.time > nextFire) { canMove = false; nextFire = Time.time + 1f; anim.SetBool("attack 0",true); } else if (canMove == true) { if(Input.GetKey(KeyCode.RightArrow)) { anim.SetBool("walk 0", true); transform.Translate(Vector3.forward * Time.deltaTime * speedFactor); } if(Input.GetKeyUp(KeyCode.RightArrow)) { anim.SetBool("walk 0", false); } if (Input.GetKey(KeyCode.LeftArrow)) { anim.SetBool("walk 0", true); transform.Translate(Vector3.back * Time.deltaTime * speedFactor); } if (Input.GetKeyUp(KeyCode.LeftArrow)) { anim.SetBool("walk 0", false); } if (Input.GetKey(KeyCode.LeftArrow) && Input.GetKey(KeyCode.RightArrow)) { anim.SetBool("walk 0",false); } } else if(canMove == false && Time.time > nextFire) { canMove = true; anim.SetBool("attack 0", false); anim.SetBool("walk 0", false); } } } Das klappt anscheind wenn man es so macht bisher doch recht gut.
  4. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Das ist das Prefab in dem ich die Events gesetzt habe.
  5. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Das ist das Prefab in dem ich die Events gesetzt habe.
  6. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Das ist von der idle-animation zur Attackenanimation.
  7. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Das ist die Einstellung von der Attackenanimation zur idle-Animation. Die Exittime habe habe ich deaktiviert weil es anscheinend schwerer dadurch wurde den Endpunkt zu erwischen. Doch leider bleib das stecken bleiben dennoch immer wieder vorhanden.
  8. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Das ist die idle-animation.
  9. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Das ist für die Attackeanimation zuständig.
  10. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Das hier ist erst mal der gesamte Animator.
  11. Simsala Animationen

    Schlaganimation bleibt einfach stecken

    Hallo, für ein Kampffspiel möchte ich eine Schlaganimation einbauen, bei der der Chara während des Schlages sofort anhält. Auch wenn man währenddessen nach vorne drückt. Das Script dafür ist dieses. using System.Collections; using System.Collections.Generic; using UnityEngine; public class AlienDragon : MonoBehaviour { public GameObject Hitbox; bool canMove; float speedFactor = 5; public Animator anim; void Start() { anim.gameObject.GetComponent<Animator>(); canMove = true; }     void Update() {         if (Input.GetKeyDown(KeyCode.Space) && anim.GetBool("attack 0") == false || Input.GetKeyDown(KeyCode.Space) && anim.GetInteger("a") != 3) { attacke(); } else if (canMove == true) { if (canMove == true) { if (Input.GetKey(KeyCode.RightArrow)) { anim.SetBool("walk 0", true); transform.Translate(Vector3.forward * Time.deltaTime * speedFactor); } if (Input.GetKey(KeyCode.LeftArrow)) { anim.SetBool("walk back 0", true); transform.Translate(Vector3.back * Time.deltaTime * speedFactor); } if(Input.GetKeyUp(KeyCode.RightArrow)|| Input.GetKeyUp(KeyCode.LeftArrow)) { anim.SetBool("walk 0", false); anim.SetBool("walk back 0", false); } if (Input.GetKey(KeyCode.RightArrow) && Input.GetKey(KeyCode.LeftArrow)) { anim.SetBool("walk 0", false); anim.SetBool("walk back 0", false); } } } print(anim.GetInteger("a")); } void attacke() { canMove = false; Hitbox.SetActive(true); anim.SetBool("attack 0",true) ; } void attackeEnde() { anim.SetBool("walk 0", false); anim.SetBool("walk back 0", false); anim.SetBool("attack 0", false); Hitbox.SetActive(false); canMove = true; } } mit void attacke() und void attackeende() greife ich auf das Evensystem im prefab zu. Das ganze klappt auch ganz gut. In der idle schlägt er und beendet den Angriff. Drücke ich nach vorne stoppt er, greift an und läuft erst dann weiter. Das gleiche passiert auch beim rückwärts laufen. Also erst mal alles so wie es sein soll. Doch wenn ich in bei idle-animation angreife und dann nochmal kurz bevor er die Angriffsanimation beendet auf Space drücke, dann bleibt er einfach bei dem Endframe stecken und macht nicht die geringsten anstallten irgend etwas zu unternehmen. Wenn ich nix drücke geht er nicht in die idle zurück und auch bei allem anderen was ich drücke passiert nix. Dabei müsste er doch selbst wenn der Endframe erwischt wird doch trotzdem wieder irgendwann automatisch zurückspringen. Doch wie eine Statue steht er einfach unbeweglich nur da. Hatte jemand auch schon mal dieses Problem und weiß woran das liegt und noch besser was man dagegen machen kann?
  12. Simsala Animationen

    Prefrab per Script zu parent oder child machen

    Danke erst mal für die Antwort. Ich habe das ganze noch einmal mit dem Collider probiert da ich mir ziemlich sicher war das etwas da stand, was mit den Daten zu tun hat. Jetzt steht aber "Setting the parent of a transform which resides in a prfab is diabled to prevent data corruption.UnityEngine.Transform:set_parent(Transform) " da. Ich hatte mich für den Collider entschieden weil ich den Monstercreator wie im Spiel "Spore" nachstellen wollte, nur das eben das ganze zufällig erstellt wird statt vom Spieler. So das auch die Gliedmaßen an den verschiedensten Stellen auftauchen können. Mit der Methode die du vorschlägst müsste sich das allerdings auch über verschieden Positionsangaben regeln lassen. Ich verstehe allerdings nicht warum ein Rückgabewert von Instantiate verhindert das ich so nicht nutzen konnte.(Wenn ich das richtig verstanden habe was du meinst.) Ich suche schon länger nach Erklärungen die mehr auf transform und Vectoren eingehen die mehr als nur Bewegung erklären, doch finde leider immer nur alles über Variablen, Schleifen und Methoden. Bei der UnityDokumentation verstehe ich gleich nie was die da überhaupt von mir wollen. Jetzt habe ich mal wieder was neues gelernt. Das man var selbst als GameObject verwenden kann. Das bringt mich auf jeden Fall schon einmal weiter, vielen Dank
  13. Simsala Animationen

    Prefrab per Script zu parent oder child machen

    Hallo ich habe jetzt schon länger im Internet gesucht um mein Problem zu lösen und auch eigene Experimente gemacht. Auch hier im Forum habe ich schon gesucht doch leider nix gefunden.Fasll ich so ein Thema nur übersehen habe tut es mit leid. Es geht um folgendes. Ich wollte ein ZufallsMonsterCreator erschaffen. Der aus verschieden Prefrabs zufällig einenen Kopf, Rumpf und Beine heraussucht. Da die Figur allerdings auch Unterschiedlich lang sein können soll, sollten die Prefrabs etwas ausseinander initalisiert werden und dann sozusagen auf den Rumpf zu schweben und per collider "andocken". Das Script dafür wäre folgendes public GameObject Rumpf; void OnTriggerEnter (Collider other) { if(other.Comparetag("Monster")) { this.transform.parent= Kopf.transform} }} Das ganze klappt ganz gut wenn man Objekte hat, die schon im Spiel vorhanden sind. Doch soweit meine Englischkenntnisse reichen und was ich im Internet erfahren habe scheint sich ein Prefrab immer an den Positionskoordinaten des Originals zu bedienen, was dazu zu führen scheint das Unity den Vorgang abschaltet damit keine Dateien beschädigt werden. Meine Frage wäre jetzt ob das was ich vor habe überhaupt möglich ist und wie man das machen könnte. Im besten Fall natürlich so das ich das Script nicht zu stark umändern müsste um selbst überhaupt noch durchzusehen. Leider blicke ich nämlich bei den Scripten nicht allzu oft durch.
  14. Simsala Animationen

    Karten mischen per Script

    Hallo, ich habe im Internet ein Tutorial gefunden das dafür gut ist um Karten zu mischen, so das keine Karten doppelt vorhanden sind oder im Deck plötzlich verschwinden, so wie es sein sollte. Ich habe es etwas für mich vereinfacht. Es sieht so aus. public string [] kart; public string kartenspeicher; public int zufall; public int i; void Update() { zufall = Random.Range (0, kart.Length); for(i = 0; i < kart.Length ;i++ ) { kartenspeicher = kart [i]; kart [i] = kart [zufall]; kart [zufall] = kartenspeicher; // warum diese Zeile dazu führt das die Karten nicht doppelt sind oder verschwinden verstehe ich nicht } } Ich versuche jetzt schon länger zu verstehen warum die Zeile hinter die ich auch geschrieben habe das ich nicht verstehe warum sie so funktioniert dazu führt das nichts doppelt oder ist oder im Deck verschwindet. Ich komme aber einfach nicht dahinter. Könnte jemand so nett sein und mir erklären warum es dadurch so klappt wie es klappen soll?
  15. Simsala Animationen

    Ab Wann ist Unity überfordert?

    Ich kann mir aber nicht vorstellen das Hörner und Zähne ( von denen ich glaube da es daran liegt ) mit Normal Maps richtig wiedergegeben werden können. Ich habe das sogar mal an einem anden Object ausprobiert aber das ergab nur eine wenig leicht erhöhte Wölbung.
×