2016-04-17 2 views
0

Im Allgemeinen, nach dem, was ich gelernt habe, werden Kollisionen in dem Skript behandelt, das an ein Game-Objekt angehängt ist. In meinem Spiel habe ich 6 Spielobjekte, die miteinander kollidieren und die Umsetzung der früheren Idee erschweren. Ich möchte alle Spielobjekte vorab erstellen und in einem anderen Skript instanziieren, das an ein leeres Spielobjekt angehängt ist. Wie kann ich Kollisionen zwischen all diesen 6 Spielobjekten im neuen Skript behandeln?Wie man 2d Kollisionen in einem Skript behandelt, das nicht mit Game Object verbunden ist

+0

Warum wäre es "schwierig zu implementieren"? Was willst du passieren, wenn es zu einer Kollision kommt? Umherspringen ist automatisch – Fattie

+0

So wie es steht, hat nur ein Objekt ein Fertighaus und ich instanziiere eine Anzahl von Kopien in einem leeren Spielobjekt. Alle Spielobjekte kollidieren miteinander und verursachen Änderungen in Box-Collidern, Sprite-Renderern, Objekt-Zerstörung und -Erzeugung und angewandte Kraft sind einige der Dinge, die während der Kollision passieren. Das Schwierige ist zum Beispiel, wenn Objekt A mit Objekt B kollidiert, sollte Objekt A den Collider oder Objekt B oder beides haben? Diese Entscheidung wäre einfach, wenn nur wenige Objekte kollidieren würden. – Nullititiousness

+0

Ich kann dir überhaupt nicht folgen. Wenn A mit B kollidiert, dann haben ** sowohl ** A als auch B Collider. – Fattie

Antwort

1

Ich frage mich die gleiche Sache wie Joe Blow, aber immer noch, wenn Sie versuchen, Kollisionen manuell zu behandeln (was übrigens wird Physik schwieriger, da Sie Bounciness, Schwerkraft, etc. berechnen müssten) manuell ..), dann können Sie dies versuchen:

public class OtherScript : MonoBehavior 
{ 
    public GameObject[] objects; //Your 6 GameObject 

    void Update() 
    { 
     for (int i=0; i<objects.Length; i++) 
     { 
      for (int j=0; j<objects.Length; i++) 
      { 
       if (objects[i].GetComponent<Renderer>().bounds.Intersects(
          objects[j].GetComponent<Renderer>().bounds)) 
       { 
        //Handle collision 
        break; 
       } 
      } 
     } 
    } 
} 

Wenn dies nicht funktioniert, dann sollten Sie auch mit GetComponent<MeshFilter>().mesh.bounds versuchen. Beachte, dass wenn dein Spiel 2D ist, du stattdessen GetComponent<SpriteRenderer>().mesh.bounds benutzen solltest.

+0

Bitte überprüfen Sie meine Antwort auf Joe Blow's Kommentar. Ich versuche zu vermeiden, Kollisionen in der Update-Methode zu überprüfen, ist es möglich, eine benutzerdefinierte OnCollisionEnter2D-Methode zu erstellen, um mein Problem zu lösen. – Nullititiousness

+0

Sicher ist es möglich, ein benutzerdefiniertes Ereignis für die Kollision mit Delegaten und Ereignis zu erstellen, aber Sie müssen immer noch die Kollision erkennen (entweder durch Überprüfung der Grenzen oder Unity's Physik-Engine), um das benutzerdefinierte Ereignis auszulösen. Vielleicht können Sie, wenn Sie etwas genauer erklären, was genau Sie erreichen möchten, verschiedene Ideen vorschlagen. – Agustin0987

+0

Ich bin verblüfft von Ihrer Frage @Nullitititess natürlich, gibt es Callbacks, wenn Sie eine Kollision haben http://docs.unity3d.com/ScriptReference/Collider2D.OnCollisionEnter2D.html und so weiter. – Fattie

Verwandte Themen