Jump to content
Unity Insider Forum

HingeJoint2d (Motor) reagiert langsam auf Tastendruck


Seyshiro

Recommended Posts

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...