Jump to content
Unity Insider Forum
Sign in to follow this  
DerStefan

[2D] Objekt bei Berührung zerstören

Recommended Posts

Hallo Freunde :)

In meinem Beispiel möchte ich gern, dass Objekt 2 zerstört wird, sobald es von Objekt 1 berührt wird.
Objekt 2 hat eine feste Position, während die Position von Objekt 1 gleichzeitig mit der Kamera modifiziert wird.
(Um eine Art Aufzug-Simulation zu erzeugen.)

Beide Objekte haben Collider und die Skripte sind:

using UnityEngine;
public class KameraBewegung : MonoBehaviour
{
  public Transform player;
  public Vector3 offset;
 
  void Update() // Update is called once per frame
  {
    transform.position = new Vector3(transform.position.x, transform.position.y + 0.1f, transform.position.z);
  }
}


(Dieses Skript hängt sowohl an MainCamera als auch an Objekt 1)

Hier noch das zweite Skript, welches ebenfalls an Objekt 1 (Aufzug) hängt:

using UnityEngine;
public class Zerstoerung : MonoBehaviour
{
  private void OnCollisionEnter(Collision collision) // Sobald dieses GameObject mit einem anderen kollidiert
  {
    Destroy(collision.collider.gameObject); // Das andere GameObject zerstören
  }
}

Beide Objekte (A und B) befinden sich auf der gleichen Z-Achse, aber bei der Berührung passiert nichts.
Warum?

Danke für jede Hilfe und beste Grüße

Share this post


Link to post
Share on other sites

Das sich bewegende Objekt (Objekt 1) muss einen Rigidbody(2D) besitzen. Unity erkennt nur Kollisionen zwischen 2 Objekten mit Collidern wenn mindestens 1 Objekt davon einen RB besitzt.

  • Like 1

Share this post


Link to post
Share on other sites

Danke für deine Hilfe.
Ich habe es versucht, aber es hat nichts geändert.
(Egal ob BoxCollider2D, RigidBody2D oder 3D)
Die Objekte treffen aufeinander, aber es findet keine "Zerstörung" statt.

Hier mal zwei Screenshots:

Viele Grüße

 

Unity1.png

Unity2.png

Share this post


Link to post
Share on other sites

Du solltest für ein 2D-Spiel dringend 2D-Physik-Komponenten benutzen, das wird dir eine Menge Kopfschmerzen ersparen.

Aber zum Problem... dein Kollisions-Code sieht gut aus. Die Komponenten können noch falsch eingestellt sein (der "eine Rigidbody" muss iirc non-kinematisch sein, siehe hier), aber wenn's das nicht ist, ist hier ein nervigeres Problem vorhanden. Aber erstmal gefragt: Der Cube fällt runter und bleibt auf der Plattform liegen?

  • Like 1

Share this post


Link to post
Share on other sites

Ich bedanke mich für eure Hilfe!

Nach einigen Versuchen habe ich ein neues Projekt (3D) erstellt und beide Objekte mit
RigidBodies und BoxCollidern ausgestattet.
Das Objekt, das zerstört werden soll, hat keine Gravity und eine Masse von 1.
Die Plattform (die nach oben bewegt wird) hat ebenfalls keine Gravity aber eine Masse von 1000000,
damit diese bei der Kollision sich nicht bewegt (ansonsten ändert sich ihre Rotation).
Das obere Objekt wird zerstört!

Das Problem bei dem 2D-Beispiel war, dass ich dort keine Cubes hatte und diese als 3D-Objekte einfügen musste.
Und mit einem BoxCollider2D und RigidBody2D hat es nicht geklappt.
Anscheinend hätte ich 2D -> TileMap verwenden müssen.

Viele Grüße

Share this post


Link to post
Share on other sites
vor 10 Stunden schrieb DerStefan:

Die Plattform (die nach oben bewegt wird) hat ebenfalls keine Gravity aber eine Masse von 1000000,
damit diese bei der Kollision sich nicht bewegt (ansonsten ändert sich ihre Rotation).

Das ist ein finsterer Hack. Schau dir beim Rigidbody lieber "Constraints" und den Modus an. Anstatt so etwas durch extreme Zahlen, die in der Regel doofe Nebeneffekte haben, zu machen, stelle das Ding lieber direkt auf "kann sich nicht drehen".

vor 10 Stunden schrieb DerStefan:

Das Problem bei dem 2D-Beispiel war, dass ich dort keine Cubes hatte und diese als 3D-Objekte einfügen musste.
Und mit einem BoxCollider2D und RigidBody2D hat es nicht geklappt.

Die 2D-Komponenten können alles, was die 3D-Komponenten können. Naja, außer 3D sein. Du musst nur beachten, dass du dann anstatt OnCollisionEnter auch OnCollisionEnter2D benutzt.

vor 10 Stunden schrieb DerStefan:

Anscheinend hätte ich 2D -> TileMap verwenden müssen.

Nö. Tilemaps sind in keiner Weise erforderlich, um ein Spiel zu machen.

  • Like 1

Share this post


Link to post
Share on other sites

Vielen Dank für die beiden Tipps!

Habe es jetzt so umgesetzt und mit 2D funktioniert es ebenfalls perfekt!

 

Ja, ich dachte mir schon, dass das mit der extrem hohen Masse keine saubere Lösung ist... ;)

 

Beste Grüße!

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
Sign in to follow this  

×
×
  • Create New...