Unity C# Collision und Clicken erkennen?
In meinem Code will ich überprüfen, ob geclickt wird, ein Objekt mit dem Tag "Enemy" berührt wird und der timer größer/gleich ein cooldown ist, alles gleichzeitig. Dann soll etwas in den Log geschrieben werden. Der timer wird in FixedUpdate immer +1 gerechnet.
Mein Code:
private void OnTriggerStay2D(Collider2D collision)
{
if (Input.GetMouseButton(0) && timer >= cooldown * 50 && collision.gameObject.CompareTag("Enemy"))
{
Debug.Log("Hit Enemy");
}
}
Das Problem:
Wenn ich die benötigten Schritte einmal mache, wird es geloggt. Wenn ich aber nach dem timer wieder clicke (und immernoch den Gegner berühre) geht es nicht, bis ich mich bewege.
Woran könnte das liegen?
1 Antwort
Vermutlich wechselt der Rigidbody in den Schlafmodus, da das Objekt eine Geschwindigkeit (Sleep Threshold) unterschreitet. Dann wird er so lange nicht mehr in physikalische Berechnungen eingebunden, bis er wieder in Interaktion mit der Szenerie tritt. Das OnTriggerStay2D-Event wird in dieser Zeit ebenso nicht erneut ausgelöst.
Es handelt sich bei diesem Verhalten um eine Optimierungsmaßnahme seitens Unity. Du kannst sie für dein Ridigbody2D-Objekt jedoch deaktivieren, indem du den Schlafmodus auf Never Sleep setzt.