Seyshiro Geschrieben 15. Oktober 2017 Melden Share Geschrieben 15. Oktober 2017 Hi@all, ich bin mir nicht sicher ob ich hier im richtigen Bereich bin, da ich nicht weiß, ob das ein Problem meines Scripts ist oder ob der Fehler irgendwo anders liegt. Am besten ich erkläre gleich mein Problem. Ich habe meiner Scene ein Sprite hinzugefügt, welches sich bei Tastendruck um eine bestimmte Achse drehen soll, dazu habe ich diesem Object eine HingeJoint2D-Component hinzugefügt (und natürlich auch nen RigidBody2D). Bei dieser Component habe ich "Use Motor" aktiviert (Motor Speed wird später per Script gesteuert) und da ich möchte, dass sich dieses Sprite nur in einem bestimmten bereich dreht habe ich auch noch "Use Limits" aktiviert und die Limits so eingestellt, wie ich sie benötige. Desweiteren habe ich dem Object noch einen PolygonCollider2D hinzugefügt. Mein Script, welches den Motor vom HingeJoit2D steuern soll sieht folgendermaßen aus: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Hinging : MonoBehaviour { public KeyCode key; public float motorSpeed; private JointMotor2D jointMotor; // Use this for initialization void Start () { jointMotor = GetComponent<HingeJoint2D>().motor; } // Update is called once per frame void Update () { if (Input.GetKey(key)) { jointMotor.motorSpeed = motorSpeed; } else { jointMotor.motorSpeed = motorSpeed * -1; } GetComponent<HingeJoint2D>().motor = jointMotor; } } Wenn ich das jetzt ausprobiere, dann muss ich die eingestellte Taste ca. 1 Sekunde lang gedrückt halten, bis das Object in der Scene auf den Tastendruck reagiert. Weiß jemand woran das liegen könnte, bzw. wie ich das Problem beheben kann? P.S.: Wenn ich den PlygonCollider2D entferne, dann reagiert das Object ohne verzögerung aber den Collider brauche ich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 16. Oktober 2017 Melden Share Geschrieben 16. Oktober 2017 Ich würde das vielleicht etwas anders schreiben und nicht mit if-else sondern mit zwei mal if. So einen ähnlichen Fehler hatte ich auch schon einmal. Wenns doof kommt, kannst du mit dem Code in den Minusbereich kommen. Lass dir eventuell mal mit Debug.Log den Wert vom Motorspeed ausgeben. Denn so lane du keinen Key drückst wird Motor *-1 gerechnet. Würde also einmal mit if Abfragen ob ein Key gedrückt wird und einen Boolean auf True schalten, wenn los gelassen wurde, mit einem zweiten if Abfragen ob dieser true ist und hier rein deine Else packen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.