Jump to content
Unity Insider Forum

Fragen zu 2D Collidern


Tintenklecks

Recommended Posts

Hallo Leute!

Ich hab mal ganz allgemein ein paar fragen zu Collidern.

1. Frage: Wenn ich möchte, das mein Character gegen eine Wand Läuft, und diese aber auch z.B. abschießen kann, um diese zu zerstöhren brauche ich immer 2 Collider. Einmal einer mit dem Hacken "IsTrigger", damit er auf den Schuss reagiert, und einmal einen, damit der Spieler nicht einfach durch die Wand Rennt. Hab ich da irgendeine Einstellung falsch? Oder muss man da irgendwie mit einem entsprechenden Script drann gehen? (Das Beispiel ist aus einem etwas älteren Tutorial)

2. Frage: gibt es eine möglichkeit, einen PolygonCollider 2D dazu zu bringen, sich mit den Bewegungen des Characters mit zu bewegen? also, wenn der character z.B. den Arm hebt, das sich Der Collider Mitbewegt? Oder ist sowas schwachsinnig, wenn man das macht? Macht es da sinn, für jedes Körperteil einen Collider anzulegen, Wen ja, habe ich dann nicht das Problem, wenn ich z.B. ein Heilkit aufhebe in dem ich durchrenne, das ich dieses Mehrmals aufhebe, je nach dem, wie viele Collider dieses in dem Moment berühren?

Ein Rießen Dankeschön schon mal im Vorraus für die Antworten!

LG

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 51 Minuten schrieb Tintenklecks:

brauche ich immer 2 Collider. Einmal einer mit dem Hacken "IsTrigger", damit er auf den Schuss reagiert

Nö. Keine Ahnung, woher dieser Irrglaube kommt, dass man einen Trigger für Events braucht. Ist aber irgendwie verbreitet.

Es gibt exakt zwei Unterschiede zwischen Collidern mit "Is Trigger" an und denen wo das aus ist:

  1. Durch Trigger können Rigidbodys (und CharacterController) durch, ohne mit ihnen zu kollidieren
  2. Man benutzt OnTrigger...-Events (z.B. OnTriggerEnter2D) bei Triggern und OnCollision...-Events (z.B. OnCollisionEnter2D) für "normale" Collider

Wie du siehst, ist bei dieser sehr kurzen Liste "eines von beiden kann keine Events auslösen" nicht dabei :)

Zur zweiten Frage: Wenn überhaupt, dann mehrere Collider, für jedes Körperteil einen. Dann packst du noch den PolygonCollider zusätzlich drumherum. Der große Collider dient dann zur Fortbewegung und um Dinge zu triggern (z.B. was einsammeln), während die kleinen nur noch als Hitboxen für eingehenden Schaden dienen (oder wofür auch immer du das haben willst). Das erreichst du zum Beispiel, indem du verschiedene Layer benutzt. Packe die kleinen Collider alle auf einen Layer, der z.B. "Character Hitbox" heißt, und schalte in der Layer Collision Matrix die Kollision zwischen diesem Layer und allem, was nichts mit Hitboxen zu tun hat (also z.B. Pickups), aus. Außerdem sollte es auf die gleiche Weise keine Kollision zwischen den kleinen und dem großen Collider geben, da diese ja übereinander liegen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke schön für die Schnelle Antwort.

Man, das Forum hier ist ja echt fix :D

Aber eine kleine Frage hätte ich da dann noch, vielleicht verstehe ich das auch noch nicht ganz genau. Brauche ich dann im Skript einen befehl "OnCollision..." Um dann mit einem Collider zu arbeiten, der nicht auf "IsTrigger" zu arbeiten, z.B. dem Gegner einen LP abziehen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 10 Stunden schrieb Tintenklecks:

Aber eine kleine Frage hätte ich da dann noch, vielleicht verstehe ich das auch noch nicht ganz genau. Brauche ich dann im Skript einen befehl "OnCollision..." Um dann mit einem Collider zu arbeiten, der nicht auf "IsTrigger" zu arbeiten, z.B. dem Gegner einen LP abziehen?

Wenn ich dich richtig verstanden habe... ja. Kannst ja mal das hier auf ein Objekt mit nem Collider2D packen:

void OnCollisionEnter2D(Collision2D collision)
{
  Debug.Log(collision.gameObject.name);
}

void OnTriggerEnter2D(Collider2D other)
{
  Debug.Log(other.gameObject.name);
}

Dann packst du ein anderes Objekt mit Rigidvody2D und Collider2D drüber und lässt es reinfallen. Dann mal bei dem unteren Objekt mit Script "Is Trigger" einmal an und einmal ausschalten und schauen was passiert.

Was die andere Frage angeht... kommt völlig darauf an, was du da machst. Wenn du mit Raycasts schießt, dann kannst du der Raycast-Funktion eine LayerMask geben, bei der du den Layer, auf dem die Collider um die Hitboxen drumherum ausschließen kannst. Beim Abschießen mit einem Rigidbody-Geschoss kannst du die bereits erwähnte Layer Collision Matrix benutzen, um dafür zu sorgen, dass das Geschoss nur mit den Hitboxen kollidiert und nicht mit dem Collider drumherum.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...