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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

101

08.09.2014, 14:46

Klappt bei mir auch:)
Ich habe mal ein wenig mit der Engine rum gespielt, zum Beispiel das Tutorial von deiner Seite gemacht. Gefällt mir wirklich sehr gut. Da ich schon recht viel mit Unity gearbeitet habe finde ich mich eigentlich gut zurecht. Deine Engine hat davon ja einige gute Konzepte übernommen. Was ganz cool wäre wären natürlich noch ein paar Tutorials zur Bedienung deiner Engine. Eine kurze Einleitung wie man Shader einbindet, oder wie man Animationen erstellt. Wäre halt nice to have. Aber bis jetzt gefällt mir Duality echt gut. Ich werde mal weiter damit rum probieren.

edit:
-Wie zum Beispiel kann ich die Anwendung vom Code aus schließen? Ansonsten kann ich meine Spiele nicht beenden. Dazu habe ich nichts finden können.
edit2:
-Ich sammel hier mal einfach ein wenig. Gefallen würde es mir wenn ich aus Dualitor selbst Klassen erstellen können würde. Da kann ich aber den Aufwand selbst nicht einschätzen. Ein cooles Feature wäre es dennoch.
-Wie bekomme ich Instanzen per Code erstellt und wieder vernichtet? Nehmen wir an ich möchte einen Shooter entwickeln und dafür Bullets spawnen. Bei Kollision sollen die Objekte wieder gelöscht werden. Im Prinzip suche ich hier etwas wie Unitys Instanciate bzw Destroy Methode.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Schorsch« (08.09.2014, 16:49)


102

08.09.2014, 16:42

Klappt bei mir auch
Ich habe mal ein wenig mit der Engine rum gespielt, zum Beispiel das Tutorial von deiner Seite gemacht. Gefällt mir wirklich sehr gut. Da ich schon recht viel mit Unity gearbeitet habe finde ich mich eigentlich gut zurecht. Deine Engine hat davon ja einige gute Konzepte übernommen. Was ganz cool wäre wären natürlich noch ein paar Tutorials zur Bedienung deiner Engine. Eine kurze Einleitung wie man Shader einbindet, oder wie man Animationen erstellt. Wäre halt nice to have. Aber bis jetzt gefällt mir Duality echt gut. Ich werde mal weiter damit rum probieren.


Das freut mich natürlich zu hören :) Mehr Tutorials sind schon seit längerem auf meiner ToDo, aber leider komme ich kaum dazu, welche zu schreiben - ein Großteil der Zeit, die ich mit Duality verbringe, fließt in die Entwicklung. Akut habe ich beispielsweise alle Hände voll mit einem Austausch des Cloning Systems zu tun, danach hatte ich aber mal wieder Dokumentationsarbeit angedacht. Ist also in Arbeit. Sozuzsagen.

edit:
Wie zum Beispiel kann ich die Anwendung vom Code aus schließen? Ansonsten kann ich meine Spiele nicht beenden. Dazu habe ich nichts finden können.


Einfach die statische Funktion DualityApp.Terminate aufrufen, den Rest erledigt dann die engine.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

103

08.09.2014, 16:50

In DualityApp habe ich sogar gesucht, wohl nicht genau genug geguckt:) Danke dir. Habe oben einen zweiten edit mit weiteren Fragen. Vielleicht findest du ja noch Zeit darauf einzugehen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

104

08.09.2014, 17:05


-Ich sammel hier mal einfach ein wenig. Gefallen würde es mir wenn ich aus Dualitor selbst Klassen erstellen können würde. Da kann ich aber den Aufwand selbst nicht einschätzen. Ein cooles Feature wäre es dennoch.


Da hatte ich mal ein langes Designgespräch mit TrommlBomml, der sich etwas ähnliches wünschte. Definitiv eine coole Idee! Hinter einer vernünftigen GUI steckt allerdings einiges an Implementierungsaufwand und für eine zügige Umsetzung schätze ich die Priorität eines solchen Features derzeit zu gering ein. Ich habs weiterhin im Hinterkopf, aber erstmal habe ich noch eine ganze Reihe Punkte auf der ToDo, die ich zuerst abarbeiten will. Es steht sozusagen auf meiner Nice2Have Ideenliste ^^


-Wie bekomme ich Instanzen per Code erstellt und wieder vernichtet? Nehmen wir an ich möchte einen Shooter entwickeln und dafür Bullets spawnen. Bei Kollision sollen die Objekte wieder gelöscht werden. Im Prinzip suche ich hier etwas wie Unitys Instanciate bzw Destroy Methode.


Im Wesentlichen hast du da zwei Möglichkeiten:
  • Du erstellst manuall im Code ein GameObject, fügst diesem Components hinzu, konfigurierst sie, und fügst das GameObject dann per Scene.Current.AddObject der aktuellen Szene hinzu. Das ist sozusagen die manuelle Variante, eher unüblich würde ich sagen. Geht aber.
  • Du bastelst dir das gewünschte Objekt im Editor, machst eine DragDrop-operation vom Scene View in die project View und bekommst dadurch eine neue Prefab-Ressource. Im Code akquirierst du dir dann eine Referenz auf die Ressource und rufst darauf Instantiate auf, um ein GameObject zu bekommen. Das dann nur noch wie oben beschrieben der aktuellen Szene hinzufügen. Voilà. ^^

Edit: Achja, ganz vergessen: Um ein Objekt zu zerstören, genügt es die jeweilige Dispose Methode aufzurufen. Weil es aber in vielen Fällen unschön ist, ein Objekt zu zerstören während die Szene in der es sich befindet gerade geupdated wird, gibt es zusätzlich die DisposeLater Methode, welche den Dispose-Aufruf verzögert am Ende des aktuellen Frames aufruft.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Fetze« (08.09.2014, 18:06)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

105

08.09.2014, 19:56

Danke für deine Antworten. Habe auch mal das Breakout Tutorial aus deinem/eurem Forum durchgearbeitet. Gefällt mir wirklich sehr sehr gut. Ich werde weiter mit deiner Engine spielen und wer weiß, vielleicht wird es ja mein neuer Liebling. Ich bin mir nicht sicher. Im Tutorial gab es ein, zwei kleinere Stellen bei welcher ich Werte verändern musste da die vorgegebenen nicht gepasst haben. Ich vermute mal das lag eher an den Werten des Tutorials und weniger an Fehlverhalten deiner Engine. Ansonsten Hut ab. Schönes Ding was du da baust.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

106

12.09.2014, 16:03

Ich muss den Editor relativ häufig neu starten. Das Problem welches mir am meisten auffällt. Ich starte das Spiel, es kommt zu einem Fehler, die Szene ist danach nicht mehr im Editor geladen (keine Szene geladen), ich versuche eine Szene zu öffnen (einfach durch Doppelklick) und es passiert nichts. Starte ich den Editor neu geht wieder alles. Wenn ich das richtig sehe passiert das halt jedes mal wenn es zum Fehler/Exception im Spiel kommt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

107

12.09.2014, 16:10

Ich muss den Editor relativ häufig neu starten. Das Problem welches mir am meisten auffällt. Ich starte das Spiel, es kommt zu einem Fehler, die Szene ist danach nicht mehr im Editor geladen (keine Szene geladen), ich versuche eine Szene zu öffnen (einfach durch Doppelklick) und es passiert nichts. Starte ich den Editor neu geht wieder alles. Wenn ich das richtig sehe passiert das halt jedes mal wenn es zum Fehler/Exception im Spiel kommt.
Da der Editor das Spiel ausführt, kann es leider vorkommen, dass eine Exception im Game Code den Editor in einen instabilen Zustand versetzt. In meiner Erfahrung passiert das nicht allzu oft, aber als Entwickler tappe ich natürlich auch in ganz andere Problemstellen als der übliche Nutzer. Der Editor ist an wesentlichen Knotenpunkte durch try-catch Blöcke geschützt, aber eben nicht an allen.

Jetzt wäre es für mich wichtig zu wissen, was genau das für Fehler sind und wann sie auftreten. Auch wenn es sich dabei um Fehler innerhalb deines Game Codes handelt wäre das eine wichtige Information, da sich so oft kontraintuitive engine API und dergleichen meinerseits entlarven lässt - in diesem Fall wäre dann ein Auszug aus deinem Code eventuell auch praktisch. Dabei wichtig wäre auch, jeweils die erste geworfene Exception zu kennen, da es sich bei allen anderen um Folgefehler handeln kann. Du findest sie üblicherweise im Log Window unten, den Text davon bräuchte ich :)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

108

12.09.2014, 16:35

Habe ausversehen versucht einen Nullvektor zu normalisieren. Dabei kam ein Vektor mit Inhalt NaN raus. Diesen wollte ich mit ApplyLocalForce an meinen Rigidbody übergeben. Das Script implementiert ICmpUpdatable und Component.
Weiterhin ist mir aufgefallen, schreibe ich in meiner Klasse sowas:

C#-Quelltext

1
public Vector2 target = new Vector2(5, 5);

oder weise target im Konstruktor zu, so ist der Vektor in Update doch wieder (0, 0). Normales Verhalten ist das nicht. Ich vermute mal du machst intern etwas mit den Membern der Komponenten und dadurch werden die zurück gesetzt. Möchte ich einem Member nun einen Startwert geben, wie erledige ich das in Duality. Gibt es für so etwas Methoden wie OnStart() in Unity? Ist hierfür ICmpInitializable vorgesehen?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

109

12.09.2014, 17:41

Habe ausversehen versucht einen Nullvektor zu normalisieren. Dabei kam ein Vektor mit Inhalt NaN raus. Diesen wollte ich mit ApplyLocalForce an meinen Rigidbody übergeben. Das Script implementiert ICmpUpdatable und Component.


Notiert. Werde mal schauen, ob sich solche Fehler nicht produktiv abfangen lassen :)

Weiterhin ist mir aufgefallen, schreibe ich in meiner Klasse sowas:

C#-Quelltext

1
public Vector2 target = new Vector2(5, 5);

oder weise target im Konstruktor zu, so ist der Vektor in Update doch wieder (0, 0). Normales Verhalten ist das nicht. Ich vermute mal du machst intern etwas mit den Membern der Komponenten und dadurch werden die zurück gesetzt. Möchte ich einem Member nun einen Startwert geben, wie erledige ich das in Duality. Gibt es für so etwas Methoden wie OnStart() in Unity? Ist hierfür ICmpInitializable vorgesehen?


Ich vermute, da bist du einem Denkfehler anheim gefallen. Duality macht mit einer neu erstellten Komponente erstmal nichts - sie behält all ihre Standardwerte in Feldern bei, das sollte also soweit kein Problem sein. Ein anderes Verhalten bekommt man aber, wenn eine bereits erstellte Komponente bereits einen Wert für ein bestimmtes Feld hatte - zum Beispiel (0,0) - und man dann den Standardwert für dieses Feld neu setzt. Stell dir z.B. vor, du definierst die folgende Komponente:

C#-Quelltext

1
2
3
4
5
6
[Serializable]
public class Example : Component
{
    private string foo = "HelloWorld";
    private Vector2 bar;
}


Beim erstellen einer Komponente bekommt diese in ihren Feldern "HelloWorld" und "0, 0" zugewiesen, soweit alles gut. Jetzt verändere ich meine Komponente aber und baue mein Plugin neu:


C#-Quelltext

1
2
3
4
5
6
7
[Serializable]
public class Example : Component
{
    private string foo = "HelloWorld";
    private Vector2 bar;
    private int stuff = 42;
}


Beim Neuladen der Komponenteninstanz übernimmt sie ihre alten Werte. Da die neue Variable "stuff" zuvor unbekannt war, erhält sie den Standardwert "42". Soweit immernoch alles in Ordnung! Folgendes ist vermutlich der Fall, der dir passiert ist:


C#-Quelltext

1
2
3
4
5
6
7
[Serializable]
public class Example : Component
{
    private string foo = "HelloWorld";
    private Vector2 bar = new Vector2(5, 5);
    private int stuff = 42;
}


Beim Neuladen der Komponente könnte man nun denken, "bar" erhielte den neuen Wert "5, 5". Das ist aber nicht der Fall, da die Komponente ja bereits einen Wert für dieses Feld hatte, nämlich "0, 0". Da für die bereits vorher instanziierte Komponente bereits ein eindeutiger Wert für dieses Feld gegeben wurde, als man sie instanziierte, behält sie diesen Wert natürlich. Neu instanziierte Komponenten erhalten dagegen "5, 5".

Zitat

Gibt es für so etwas Methoden wie OnStart() in Unity? Ist hierfür ICmpInitializable vorgesehen?


Jup, genau dafür. In den allermeisten Fällen reicht es aus, ICmpInitializable.OnInit zu implementieren und auf den InitContext.Activate zu reagieren. Es ist aber nicht so gedacht, dass man dort seine Membervariablen auf Standardwerte setzt, für sowas gibt es Prefabs :)

Hoffe ich konnte für etwas Klarheit sorgen :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Fetze« (12.09.2014, 17:49)


Techie

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

110

12.09.2014, 17:49

David sollte endlich mal einen "Like Button" einführen...

+1, ein Projekt, das sogar mich interessiert! :D
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

Werbeanzeige