Jump to content
Unity Insider Forum

Charakter Animation macht Probleme


denisspain

Recommended Posts

Guten Tag,

Mein Charakter konnte laufen Springen und ducken.

Dann habe ich die Animationen angefügt und jetzt geht er nur noch (mit idle Animation) aber läuft, springt und crouched nicht.

AUch die anderen Animationen macht der nicht.

Braucht ihr noch mehr fotos o.ä.?

Das ist der Code

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


public class PlayerMovement : MonoBehaviour
{

    public CharacterController2D controller = default;
    public Animator animator;


    public float runSpeed = 40f;

    float horizontalMove = 0f;
    bool jump = false;
    bool crouch = false;

    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;

        animator.SetFloat("Speed", Mathf.Abs(horizontalMove));

        if (Input.GetButtonDown("Jump"))
        {
            jump = true ;
            animator.SetBool("Jumping", true);
        }

        if (Input.GetButtonDown("Crouch"))
        {
            crouch = true;
        }

        else if (Input.GetButtonUp("Crouch"))
        {
            crouch = false;
        }
    }

    public void OnLanding()

    {
        animator.SetBool("Jumping", false);
    }

    public void OnCrouching(bool Crouching)
    {
        animator.SetBool("Crouching", Crouching);
    }


    void FixedUpdate()
    {
        //Move Our Character
        controller.Move(horizontalMove * Time.fixedDeltaTime, crouch, jump);
        jump = false;
    }
}

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Außerdem gibt es den Fehler im nachhinein die ganze Zeit während des Spiels.:

UnassignedReferenceException: The variable animator of PlayerMovement has not been assigned.
You probably need to assign the animator variable of the PlayerMovement script in the inspector.
UnityEngine.Animator.SetFloat (System.String name, System.Single value) (at <947776085c2a45bebc6afa3092a3f6ed>:0)
PlayerMovement.Update () (at Assets/PlayerMovement.cs:29)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Fehlermeldung besagt, dass dein Animator den Paramater, den du ansprechen willst, so nicht hat.
 

animator.SetFloat("Speed", Mathf.Abs(horizontalMove)); 

Schau mal im Animator, ob der Parameter wirklich genauso geschrieben ist, wie du ihn hier ansprichst. Groß/Kleinschreibung könnte z.B. das Problem sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay dort war wohl alles richtig, ich hatte aber wohl dem Script Movement die zu animierende Figur nicht eingefügt.

Jetzt klappt die Animation springen und ducken, allerdings fängt der mit dem ducken an und springt nur. Run und Idle muss ich nochmal überprüfen.

Das werde ich jetzt die nächste zeit mir mal genauer anschauen. Sollte ich da eine lösung oder das Problem finden, poste ich das.

 

DAnke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe jetzt irgendwie das Problem, dass meine Animation etwas "hängt"

Meine Figur wechselt im Idle modus die ganze Zeit von Idle zu crouching und das die ganze zeit hintereinander bzw gleichzeitig.

ICh verstehe da nicht, wo da der fehler ist

in der Programmierung /den Code vom Spieler habe ich auch keinen fehler gefunden.

da ist die Animation anbei. wenn ich das Crouching, bzw. die animation (die Pfeile) rausnehme, dann klappen alle anderen animationen, also idle, run und jump.

nur die crouching animation macht mir probleme.

vielleicht hat jemand einen rat

s.jpg

Unbenannt.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also so wie ich das sehe, kann ja nur in die Crouching Animation gesprungen werden, wenn Crouching auch true ist. Also muss diese Variable auch auf true gesetzt werden.
Es reicht ja aus, wenn es nur ganz kurz ist. Aber wenn dein Code noch genauso ist, wie er oben gepostet wurde, dann sollte das eigentlich auch nicht sein.

Mach doch mal in die Crouch Void eine Print-Ausgabe rein. Die dir den Crouch Wert in dide Console auswirft.

Also:

public void OnCrouching(bool Crouching) 
{ 
	animator.SetBool("Crouching", Crouching); 
	print(Crouching); // <- das hier einfügen
}

Wenn du dann in der Console ständig Ausgaben siehst, dann spring auch ständig was in die Void rein und das sollte ja wohl nicht sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 5.10.2020 um 18:52 schrieb malzbie:

Also so wie ich das sehe, kann ja nur in die Crouching Animation gesprungen werden, wenn Crouching auch true ist. Also muss diese Variable auch auf true gesetzt werden.
Es reicht ja aus, wenn es nur ganz kurz ist. Aber wenn dein Code noch genauso ist, wie er oben gepostet wurde, dann sollte das eigentlich auch nicht sein.

Mach doch mal in die Crouch Void eine Print-Ausgabe rein. Die dir den Crouch Wert in dide Console auswirft.

Also:


public void OnCrouching(bool Crouching) 
{ 
	animator.SetBool("Crouching", Crouching); 
	print(Crouching); // <- das hier einfügen
}

Wenn du dann in der Console ständig Ausgaben siehst, dann spring auch ständig was in die Void rein und das sollte ja wohl nicht sein.

Vielen Dank für die super idee!

Das Ergebnis ist angehangen.

Ohne, dass ich irgendwas drücke wechselt der am laufenden Bank auf true/false

, wie man am Bild auch unschwer erkennt. das macht mich jetzt noch viel stutziger ._.

 

grafik.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok. Dann musst du mal schauen, von wo aus in diese void rein gesprungen wird. Also bei welcher Bedingung das passiert.
Kommt das vom CharacterController? Wird da evtl. eine Joystickachse abgefragt?
Irgendetwas scheint genau an dem Punkt zu sein wo Crouching von true auf false geht. Du musst jetzt raus finden was das ist. Es kann von einem Eingabegerät, z.B.einem Joystick, kommen, es kann aber auch eine Entfernungsmessung mittels Raycast sein.

Dein Animator macht jedenfalls keine Probleme, denn er verarbeitet nur die Signale die von außen rein kommen. Das macht er genau so, wie es sein soll.
Die Signale sind das Problem!

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Stunden schrieb malzbie:

Ok. Dann musst du mal schauen, von wo aus in diese void rein gesprungen wird. Also bei welcher Bedingung das passiert.
Kommt das vom CharacterController? Wird da evtl. eine Joystickachse abgefragt?
Irgendetwas scheint genau an dem Punkt zu sein wo Crouching von true auf false geht. Du musst jetzt raus finden was das ist. Es kann von einem Eingabegerät, z.B.einem Joystick, kommen, es kann aber auch eine Entfernungsmessung mittels Raycast sein.

Dein Animator macht jedenfalls keine Probleme, denn er verarbeitet nur die Signale die von außen rein kommen. Das macht er genau so, wie es sein soll.
Die Signale sind das Problem!

Eine vielleicht dumme Frage, aber:

dh jetzt für mich, ich schaue in meinen weiteren Scripten nach, wo die void onCrouching

angesprochen wird  und prüfe da das script? oder sehe ich in der Console, wo der sich mit true und false abwechselt?

mit dem Controller kann ich mir kaum vorstellen, da ich weder Controller angeschlossen habe, noch einen eingestellt hatte

und mit der Animation habe ich mir fast gedacht, aber danke für die erklärung! :)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, du must selber rausfinden, von wo her die void angesprochen wird. Wenn das Script von dir ist, solltest du wissen, wo es her kommt, denn dann hast du die void ja nicht ohne Grund da drin.
Wenn es nicht von dir ist, dann musst du dich durch die anderen Scripte pflügen. Es wird irgendwo beim Charactercontroller zu finden sein, schätze ich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn du weisst wo die Fuction/Void ist, kannst du ja ein  Debug.Log("test"); einfügen, wenn du dann in der Console das anklickst, müsstest du sehen wo es ausgeführt wurde und woher es angesprochen wurde.

in meinem Fall hier wurde die Function Shoot() im WeaponBullets Script ausgeführt und vom PlayerMovement2D Script angesprochen.

debuglog.png.f3d358e25c7c3a597ca5ef3f713f2880.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...