Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Techie

Alter Hase

  • »Techie« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

22.12.2013, 22:52

[ Unity & C# ] Collider Duo

Hi,
ich muss über die Ferien ein kleines Planetsystem nachproggen ( mein Physiklehrer hat mich darum gebeten... für gute Noten tut man alles.. ).
Dabei habe ich mir gedacht, ich nehme eine Sphere, gebe ihr 2 Collider ( ein für die Sphere selbst und einen für das Gravitationfeld ) dabei muss ich auf einen der beiden Collider per Code zugreifen.
Wie schaffe ich es, dass ich auf einen bestimmten Collider zugreifen oder allgemeiner, wie kann ich auf eine bestimmte Komponente eines GameObject zugreifen, wenn diese doppelt vorhanden ist?

Gruß Techie
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

22.12.2013, 23:01

Sorry, aber du hast in Physik wohl nicht aufgepasst, als es um Gravitation ging.
Die Gravitationskraft hat keine maximale Reichweite, sie wirkt unendlich weit. Es ist demnach unsinnig, ein Gravitationsfeld durch einen Collider darzustellen. Zudem wirkt die Gravitation anziehend. Ein Collider würde dafür sorgen, dass die Planeten bei einer gewissen Entfernung voneinander abprallen. Also in doppelter Hinsicht falsch.

Nimm doch einfach die Formel für die Gravitation, rechne die Kräfte aus und wende sie an.

Du brauchst nur maximal einen einzigen Collider für den Planeten selbst.
Und wenn die Planeten nicht zusammenstoßen sollen (was in einem Planetensystem normalerweise so ist), kannst du dir den auch schenken.

Um trotzdem deine Frage zu beantworten: Ein GameObject kann nur eine Komponente pro Typ haben (kann sein, dass das in der neusten Version von Unity geändert wurde, ich glaube etwas gelesen zu haben). Will man mehrere haben, muss man mehrere GameObjects erzeugen und diese zu Kindern (Children) des anderen machen.

Techie

Alter Hase

  • »Techie« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

3

23.12.2013, 11:38

Leider hatten wir das noch nicht in Physik, wir werden das aber nach den Ferien ansprechen, deswegen sollte ich es mal machen um es zu demonstrieren ^^

Danke für die Korrektur und für den Tipp mit den ChildObjects, mal sehen was ich draus machen kann ;)
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

23.12.2013, 11:41

Wie gesagt, du wirst das gar nicht brauchen, weil ein Collider für den Planeten selbst völlig genügt.
Übrigens, komisch, dass der Physiklehrer von dir erwartet sowas zu programmieren, ohne dass ihr die Gravitation überhaupt durchgenommen habt.

Es wäre übrigens einfacher, das nicht über die Gravitation zu machen, sondern die Planeten sich einfach um die Sonne drehen zu lassen. Damit bekommst du zwar nur kreisrunde Bahnen, was nicht korrekt ist, aber es ist wesentlich einfacher umzusetzen. Gravitation brauchst du dafür nicht.

Techie

Alter Hase

  • »Techie« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

5

24.12.2013, 13:22

Wie gesagt, mal sehen was ich draus machen kann. Mein Physiklehrer will es übrigens von mir, da ich einer der besten in der Klasse bin ( Physik betreffend, aber auch nur der Mathematische Teil ).
Übrigens, das Foto ist Klasse :thumbsup:
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Renegade123

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

6

24.12.2013, 16:32

Ein GameObject kann nur eine Komponente pro Typ haben (kann sein, dass das in der neusten Version von Unity geändert wurde, ich glaube etwas gelesen zu haben). Will man mehrere haben, muss man mehrere GameObjects erzeugen und diese zu Kindern (Children) des anderen machen.


Seit neuestem geht das ;)

Ich finde seine Idee mit den beiden SphereCollidern gar nicht mal so verkehrt.
Du hast natürlich recht, dass die Gravitation sehr weit reicht, jedoch ist sie doch ab einer bestimmten Reichweite so gering, dass sie für ein Spiel zu vernachlässigen ist.
Insofern schlage ich vor, du erstellst einen SphereCollider für den Planeten selbst und einen Weiteren als Trigger. Sobald etwas in den Trigger eindringt könntest du die Formel anwenden. Das würde ich auf kleinere Himmelskörper wie Asteroiden anwenden.

Hierfür kannst du dir mittels GetComponents alle Komponenten des Typs SphereCollider holen und den als Trigger gekennzeichneten auswählen. Im Übrigen müsste das zurück gelieferte Array von GetComponents die SphereCollider in der selben Reihenfolge speichern wie es auf dem GameObject liegt.

Für Monde, Planeten und Sonnen würde ich iTween verwenden und damit Pfade anlegen. Damit könntest du die elliptischen Umlaufbahnen faken.
Liebe Grüße,
René

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Renegade123« (24.12.2013, 16:39)


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

7

24.12.2013, 16:54

Wenn es nur darum geht, einen Planeten um einen Stern kreisen zu lassen, bzw. einen Satellit um einen Planeten, dann setze einfach Gravitationskraft und Zentripetalkraft gleich und löse nach v auf.
Verstehe nicht, wieso du einen Collider für ein G-Feld nutzen willst.

Als Ansatz
§F_{G}=G*\frac{m_{1}*m_{2}}{r^{2}}=m_{2}\frac{v^{2}}{r}=F_{Z}§
bzw.
§F_{\mathrm{Z}}=m \omega^2r§
Den Rest bekommst du denke ich selber hin.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

LeBusch

Frischling

Beiträge: 81

Beruf: Student B.Sc. Informatik

  • Private Nachricht senden

8

24.12.2013, 17:13


Wenn es nur darum geht, einen Planeten um einen Stern kreisen zu lassen, bzw. einen Satellit um einen Planeten, dann setze einfach Gravitationskraft und Zentripetalkraft gleich und löse nach v auf.

Bei der Rotation des Satelliten um den Planeten müsste man aber auch die Gravitation des Zentralgestirns berücksichtigen. Für Mittelstufenphysik ist das m.M.n. zu komplex.

@Techie: Was genau ist denn gefordert bzw. sollen "deine" Planeten auch Monde o.Ä. haben, soll das Sonnensystem unserem ähneln oder soll es z.B. ein Doppelsternsystem sein usw.?

Renegade123

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

9

24.12.2013, 17:14

Will dein Physiklehrer überhaupt, dass Berechnungen für die Gravitation durchgeführt werden?

Ich meine, wenn es nur um das Visuelle geht, dann bist du mit iTween und Pfaden definitiv schneller als mit Programmieren.
Liebe Grüße,
René

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

10

24.12.2013, 17:20


Wenn es nur darum geht, einen Planeten um einen Stern kreisen zu lassen, bzw. einen Satellit um einen Planeten, dann setze einfach Gravitationskraft und Zentripetalkraft gleich und löse nach v auf.

Bei der Rotation des Satelliten um den Planeten müsste man aber auch die Gravitation des Zentralgestirns berücksichtigen. Für Mittelstufenphysik ist das m.M.n. zu komplex.

@Techie: Was genau ist denn gefordert bzw. sollen "deine" Planeten auch Monde o.Ä. haben, soll das Sonnensystem unserem ähneln oder soll es z.B. ein Doppelsternsystem sein usw.?


Das n-Körperproblem sollte man für sowas eigentlich rauslassen können.
Falls du meinst, dass ein sich ein um einen Planeten bewegender Satellit auch der Bahn des Planeten folgt, dafür gibt es Parenting (Gibt es das in Unity? Denke ich doch mal).
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige