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

De_Struktor

unregistriert

1

15.01.2014, 12:38

[Unity Theorie] Wann wird das Spiel zerstört???

Hallo liebe Community,

ich habe eine Frage bezüglich der Zerstörung des gesamten Spiels in Unity. Aus meiner XNA zeit kannte ich es noch so, das MS das Spiel dann mitels expliziten Destruktor komplett aus den Speicher gelösch hat. Und übernimmt Unity das auch automatisch oder wie wird das Gehandhabt???

Also XNA Code:

using(Game game = new Game())
{
game.run();
}

oder muss man sich darum selber kümmern, was ich mir bei der Engine kaum vostellen kann.

Wie immer wäre ich über Aufklärungen sehr dankbar :)

Mfg

De_Struktor

Tim Bureck

Frischling

Beiträge: 26

Wohnort: Krefeld

Beruf: Softwareentwickler

  • Private Nachricht senden

2

15.01.2014, 12:58

Da kümmert sich Unity meines Wissens automatisch drum sobald du das Spiel mittels X-Button. Möchtest du beispielsweise einen Beenden-Button in deiner GUI einfügen, musst du das Spiel aber explizit beenden, indem du im entsprechenden Event-Handler Application.Quit() aufrufst.

De_Struktor

unregistriert

3

15.01.2014, 13:06

s

Also sobald man in Unity in der obigen Leiste auf "Stop" klickt, dann
werden alle Ressourcen freigegeben? und als .exe sobald man auf X oben
beendet auch?

Renegade

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

4

15.01.2014, 14:06

Unity kümmer sich automatisch darum, wenn Objekte zur Laufzeit nicht mehr benötigt werden. Sobald das Programm beendet wird, wird auch der restliche Speicher freigegeben.Hier ist der Link aus der Dokumentation von Unity und Hier der Link zu Garbage Collection von MSDN.
Liebe Grüße,
René

De_Struktor

unregistriert

5

15.01.2014, 14:36

Das da der GC eben auch integriert wird, habe ich mir ja auch schon gedacht, denn GC hat XNA ja auch, dennoch haben das die Entwickler so gelöst, das sie noch einen expliziten Destruktor reingebaut haben. Das habe ich dann nicht so ganz verstanden, warum sie dann noch expliziten Destruktor haben.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

15.01.2014, 14:51

Mir ist nicht bekannt, dass Untiy da irgendwas besonderes mit Destruktoren macht.
Auch wenn: der Garbage Collector kümmert sich lediglich um das Leeren des Arbeitsspeichers (des Heaps der jeweiligen Anwendung) und hat nichts mit Ressourcenfreigaben etc. zu tun. Wenn man bspw. der Grafikkarte sagen muss, dass die geladene Textur entladen werden darf oder die Sperrung von einer Datei im Dateisystem aufheben möchte, sollte man dies manuell (im "Finalizer") machen.

[...], denn GC hat XNA ja auch, [...]

Anders:
Die Laufzeitumgebung (das .NET Framework und Mono) besitzen jeweils einen Garbage Collector und da Unity Mono verwendet, wird automatisch auch der GC verwendet. Da XNA nur unter .NET läuft, hat man bei der Verwendung automatisch einen GC, was aber nicht an XNA liegt.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

15.01.2014, 15:24

Was du meinst ist der Finalizer, welcher dieselbe Syntax hat wie der Destruktor in C++. Das ist einfach die letzte Methode eines Objekts, die aufgerufen wird, wenn es vom Garbage Collector entfernt wird. Dort werden meistens unmanaged Objekte oder Ressourcen freigegeben, wie WINAPI-Objekte über handles etc.

Ansonsten ist doch die Power von Unity mit C#, dass du durch .NET dir null Gedanken über Speicher freigeben musst. Stimmt eigentlich nicht 100%, weil du wenig Kontrolle über den Garbage Collector hast und wann er Objekte freigeben soll, aber das ist auch kein so triviales Thema. Prinzipiell kannst du wirklich sicher sein, dass deine Objekte weggeräumt werden, wenn sie keiner braucht.

Dadurch klärt sich auch die Frage des beendens des Spiels. Wenn alle Managed-Objekte freigegeben sind, dann auch all ihre Ressourcen, dann wird die Unity-Runtime beendet, und da wird dann der rest freigegeben.

De_Struktor

unregistriert

8

15.01.2014, 17:56

Ok vielen Dank :)

Und Sacaldur: Ich weiß das XNA selber keinen hat^^ schon klar, das war nur so gemeint, wenn ich mit XNA unter .NET arbeite, dann habe ich das so gemeint, das ich auf jeden Fall einen GC habe. Aber noch vielen Dank für die Auskunft :)

Werbeanzeige