UNITY Gameobjekt in Drehungs Richtung bewegen?
Ich habe in Unity ein Projekt gemacht, bei dem ich einen Panzer gemacht habe dessen "Panzerrohr" zu per Pfeiltasten nach links oder nach rechts drehen kannst. Wenn man dann W drückt wir eine Kugel gespawnt, die dann in die Richtung fliegen soll, in die das Rohr ausgerichtet ist.
Ich habe zuerst einen einfachen .Translate script gemacht:
void FixedUpdate()
{
transform.Translate(Vector2.up * speed); //speed ist ein einfacher float
}
(Der script ist auf der Kugel und wird ausgelöst, sobald sie spawnt)
so funktioniert es zwar, dass die Kugel in die richtige Richtung fliegt, aber da sie mit tranform.Translate bewegt wird kann sie nicht mehr mit anderen Gegenständen mit Collidern collidieren.
Hat jemand eine Idee was ich anders oder falsch machen könnte??
2 Antworten
Also ich hab in diversen Projekten Projektile mit Translate bewegt und hat gar keine Schwierigkeiten mit Collision.
Vielleicht solltest du dich mal mit Collision beschäftigen.
Zu dem wird FixedUpdate nur für Physikalische Sachen aka Rigidbody Movement etc pp. verwendet.
Checke ob deine Kugel oder dein Gegner entsprechenden Code OnTriggerEnter... hat und jeweils Collider und min 1 von beiden Rigidbodys ohne Gravitation wenn du keine brauchst.
Beim instantiieren ein Child empty auf dein Rohr. Und die Kungel an der Rotation dessen ausrichten. Z Achse nutzen für das Bewegen und fertig.
Hast du denn eine Abfrage im Code auf Collision? Sind alle Collider 2d und Alle Rigidbody auch 2d? Debugge mal die collision im enemy. Z.B. über einen Tag o.ä.
ok DANKE!!! ich habe die collision detection umgestellt und auf fixedUpdate gewechsel. Ja ich habe eine Abfrage im Code, wodurch die Kugel zerstört werden soll.
jetzt funktioniert das auch endlich und die Kugel geht nicht durch.
(...) da sie mit tranform. Translate bewegt wird (...)
Warum bewegst du sie den mit Transform.Translate()? Für so etwas wie Geschosse nimmt man üblicherweise Rigidbody.AddForce().
Hast du eine Lösung, wie ich die mit addforce in Richtung Rotation bewege?
Damit die Kugel basierend auf der Rotation geschossen wird
Ich habe nun Update statt FixedUpdate und sowohl mein Gegner, als auch die Kugel hat einen Collider. Außerdem hat die Kugel einen Ridgidbody2d ohne Gravitation. Das mit dem instantiieren habe ich schon vorher so gemacht.
Trotz allem: Die Kugel fliegt durch meinen Gegner (kein Collider ist ein trigger).