[Unity] Die Silvester-Inseln: Es lebe das Schwarzpulver

Gehe zu Seite 1, 2  Weiter

Worklogs [Unity] Die Silvester-Inseln: Es lebe das Schwarzpulver Kommentare

Montag, 25. Februar 2013 um 20:40 Uhr von DAK

Delta Timing, so wie PhillipK es meint, ist im Grunde, dass du die momentane Position als mathematische Funktion dieser Art ermittelst:

Momentane Position = Startposition + (Auftrieb * Flugzeit) - (Graviation * Flugzeit)

Wobei Flugzeit die Zeit ist, die sich das Ding schon in der Luft befindet.

Um das Ganze in 3D zu machen, brauchst du 3 Gleichungen:

posX = startX + (auftriebX * Flugzeit) - (gravitationX * Flugzeit)
posY = startY + (auftriebY * Flugzeit) - (gravitationY * Flugzeit)
posZ = startZ + (auftriebZ * Flugzeit) - (gravitationZ * Flugzeit)

Durch AuftriebX, -Y und -Z kannst du die Richtung des Auftriebs als Vektor einstellen (so z.B. wenn die Rakete schief fliegen sollte). Das Gleiche gilt für die Gravitation (ist dort aber eher sinnlos, da die meistens gerade nach unten geht.

Ist alles nix Besonderes, einfach nur Funktionen und Vektoren.

Damit kannst du dann, statt von Höhe oder Entfernung auszugehen, einfach sagen, die Rakete brennt ~5 Sekunden, also wenn die Rakete irgendwo in den Bereich kommt, dann lässt du sie explodieren. Das wär dann auch näher an der Funktionsweise echter Silvesterraketen heran, weil die fliegen auch nur so lange, bis ihr Pulver aufgebraucht ist, und nicht, bis sie eine bestimmte Höhe erreicht haben (wär aber cool, dann würd ich sie waagrecht feuern^^).

PS: Durch herausheben läße sich die Formel vereinfachen:
Momentane Position = Startposition + (Auftrieb-Gravitation) * Flugzeit
Und das dann für jede der drei Koordinaten.

Montag, 25. Februar 2013 um 17:35 Uhr von Spark Fountain

Hm, ich hab mal den englischsprachigen Wikipedia-Artikel zum Thema "Delta Timing" angeschaut (den Begriff kannte ich nämlich noch nicht). Aber ist das nicht letztendlich ein ähnliches Verfahren, wie es der BlitzBasic Timer benutzt? (Den ich natürlich verwende Wink)
Ich habe jetzt allerdings nochmal etwas anderes vorgeschoben, nämlich will ich die GUI jetzt komplett auf Devil's GUI umstellen. Meine war bisher recht buggy und ich will nicht mehr ewig viel Zeit damit verschwenden, so banale Funktionen zu implementieren wie "welches Fenster muss jetzt im Vordergrund sein" oder "welche Variable kümmert sich um welchen Button" usw. Zumal es ja eine Engine dafür gibt Smile.

Montag, 25. Februar 2013 um 15:21 Uhr von PhillipK

Ach iwo. Rumrechnen der höhe is doch simples mathe.

Wenn: Du DeltaTiming hast, gilt dein speedvektor als "einheiten pro sekunde" - dementsprechend reicht es, wenn du startposition + (auftrieb * lifetime) - (graviation * lifetime) machst. Warum du die höhe wissen willst, ist mir allerdings schleierhaft ^^
Wenn du kein DeltaTiming hast.. dann fang besser damit an! Smile Sonst explodieren die Raketen den Spielern auf schlechten pc's direkt vor der nase, wärend leute mit krassen gaming pc's die exlposionen garnicht mehr sehen, weil die raketen so schnell fliegen *grins*

Danke für den Tipp :)

Mittwoch, 20. Februar 2013 um 18:45 Uhr von Spark Fountain

Hey PhillipK,

danke für den Tipp mit den Hügeln! Daran hatte ich noch gar nicht gedacht, dass die Raketen dann "kürzer" aufsteigen würden, wenn man auf dem höchsten Gipfel steht. Auch deine Alternativ-Vorschläge sind recht praktisch. Das mit der Zeitdauer hatte ich auch schon überlegt, d.h. dass man die Rakete nach z.B. 10 bis 11 Sekunden in der Luft explodieren lässt. Nur hatte ich ein paar Bedenken, ob ich dann kompliziert herumrechnen muss, welche Höhe sie bis dahin erreicht hat; aber das ist eigentlich in der Tat nicht so furchtbar wichtig Wink.
Ich werde das ganze also noch etwas überdenken und deine Vorschläge auf jeden Fall mit einbauen. Danke nochmal!

Was den Editor angeht, habe ich mit dem Bugfixen bereits angefangen. Laden und Speichern war schon implementiert, allerdings muss ich das nochmal überarbeiten, weil ich einen Denkfehler gemacht hatte: Ich habe alle Objekte (egal welcher Kategorie) von ein und demselben Type erzeugt, namentlich WorldObject. Zuerst dachte ich, das sei praktisch, weil es dann ganz eindeutige ID's von allen existierenden Objekten gibt etc. Aber dann ist mir aufgefallen, dass die verschiedenen Kategorien ja auch ganz unterschiedliche Attribute haben! Ein Fahrzeug braucht eine Masse, Beschleunigungsverhalten etc., ein Mensch hingegen besteht aus Animationen, hat bestimmte "Fähigkeiten" etc., und ein Karton, der auf dem Boden liegt, braucht eigentlich nicht viel mehr Infos als Position und Drehung.
Deshalb werden nun doch alle Elemente beim Speichern in Kategorien unterteilt. Zwar stehen noch nicht alle Attribute pro Kategorie fest, aber das alte Konzept hätte auf kurz oder lang enorme Probleme bereitet.
Langer Reder kurzer Sinn: Funktionsfähig wird der Editor in den nächsten Tagen sein, aber bis alle Features implementiert sind, dauert es noch ein Weilchen. Dazu muss ich auch alles nochmal fertig durchdenken, damit ich später keinen doppelten Aufwand habe.

Dienstag, 19. Februar 2013 um 15:58 Uhr von PhillipK

Huhu!

Ich möchte einen kleinen Wiederspruch gegen die "wann explodiert rakete" planung einlegen.
Würde pur auf die Z Koordinate geschaut werden, gibts bei hügeln etc ein problem. Ausserdem finde ich, das es wieder sehr künstlich wirkt.
Stattdessen würde ich auch hier eine Zeitspanne (5-10 sekunden als beispiel) bevorzugen, bis die rakete explodiert. Nicht jede Rakete, egal ob baugleich oder nicht, explodiert zum gleichen Zeitpunkt.
als beispiel:
Du baust etwas ein, was das paralele zünden von 10 Raketen ermöglicht. Diese starten also nach zufälligen 5-7 sekunden und explodieren alle an der exakt gleichen höhenposition. Fände ich sehr schade - ein bisschen differenz wirkt einfach besser.
Mögliche auslöser die mir einfallen:
-> Weg zurückgelegt (pro bewegungsupdate den speedvektor auf einen puffer addieren, ist die länge des Vektors > Wunsch-wert ist eine explosion möglich) (anmrk: Auch beim bewegungsspeed sind geringe zufallsdifferenzen cool. Die eine rakete fliegt mit 4.9m/s², die andere mit 5.1m/s²)
-> Zeit des fliegens (4.5-5.5 sekunden als beispiel)
-> Höhe, mit variation.Aktuelle höhe - starthöhe als "zurückgelegte höhe-wert". Nun noch eine differenz von 55-60metern e voila!


Natürlich gibt es auch feuerwerkskörper die ziemlich krass kontrolliert sind. Selbst geringe produktionsabweichungen werden aussortiert. Diese explodieren zb nach 5.1 bis 5.15 sekunden - also ziemlich identisch. Könntest du auch mit einbauen, falls eine mission ziemlich Starke rahmenbedingungen hat. Diese könnten dann aber beispielsweise Teurer sein Smile

------

kleines ps:
Schreibe den editor fertig, oder zumindest brauchbar ins Beta stadium. Baue eine Speichern / Ladefunktion ein und überlasse der Community den rest. Wenn jeder auch nur 3 dinge zusammenschustert, hast du keinen streß mit Content und kannst dich auf programmlogik konzentrieren. E voila, hast nen dicken batzen an raketen,böllern, scherzartikeln, welche du zum testen nutzen kannst. Und natürlich auch für die erste Beta des spiels Smile

Freitag, 25. Januar 2013 um 13:36 Uhr von DAK

Schaut nicht schlecht aus, wenn du es durchziehst.
Noch ein paar Tipps zwecks großen Projekten aus eigener Erfahrung:
-Verzettel dich nicht in Content. Mach den erst am Schluss. Ich hab in einem Spiel von mir ein doch recht komplexes Map-Format erstellt, und den Fehler gemacht (weils Spaß gemacht hat), von Anfang an einige Maps zu erstellen. Jedes Mal, wo ich irgendwas am Map-Format geändert habe, habe ich alle Maps updaten müssen, damit sie immer noch mit meinem Spiel kompatibel sind.
-Wenn du technisch aufwändige Sachen einbauen willst, tu das, wenn das Spiel noch klein ist. Ich wollte z.B. bei einem Spiel, an dem ich da schon seit einem halben Jahr geschrieben hatte, einen Multiplayermodus einbauen. Keine Chance. Geht einfach nicht mehr. War schon viel zu spät, und einfach nicht für Multiplayer ausgelegt.

Viel Spaß ansonsten!

Versionsverwaltung

Freitag, 25. Januar 2013 um 12:27 Uhr von Spark Fountain

Danke erstmal für die positiven Kommentare!
@Lador: Ich werde in den nächsten drei Wochen erstmal mit der Präsentation eines Softwareprojekts sowie Klausurlernen beschäftigt sein, aber dann ist das Semester rum und ich hab viel Zeit, um weiter am Projekt zu arbeiten. Deshalb halte ich Ende März als Datum für eine erste spielbare Multiplayer-Version für realistisch. Allerdings lege ich da vor allem Wert auf ein gut funktionierendes Gameplay und darauf, dass das Spiel stabil läuft. Deshalb werden die Texturen vermutlich erstmal provisorisch sein, was das Spielerlebnis aber hoffentlich nicht trüben wird Smile.

@Xeres: Ich benutze jetzt keine Software wie Git oder SVN, aber ich lege regelmäßig Backups an von bestimmten Änderungen, die ich vorgenommen habe. Natürlich mit entsprechenden Kommentaren, damit ich weiß, was da eigentlich genau drin steht^^. Es ist von Vorteil, dass ich allein an dem Spiel entwickle, denn dadurch kenne ich meinen Code zu 100%; und da ich mindestens jeden zweiten Tag ein bisschen daran arbeite, vergesse ich auch nicht so schnell, was ich wo implementiert habe. Die Funktionalität ist für den Editor weitestgehend implementiert, jetzt folgt die Spiellogik.

Donnerstag, 24. Januar 2013 um 20:18 Uhr von Xeres

Schön, dass dir klar ist, dass du viel vor hast.
Als allererstes solltest du eine Versionsverwaltung bemühen (git natürlich), falls du das noch nicht getan hast, um durch größere (oder kleinere) Änderungen nicht mit einem Funktionslosen dummy da zu sitzen und alle Lust zu verlieren. Denn zumindest ich bleibe länger bei einem Projekt, wenn ich den Erfolg sehe (git log) und etwas funktionierendes vorweisen kann.
Soviel der gut gemeinten Ratschläge, ich bin dann mal gespannt, wie es ausgeht.

Viel Spaß & viel Erfolg!

Donnerstag, 24. Januar 2013 um 16:45 Uhr von Lador

Klingt echt ambitioniert. ^^
Ich hoffe wirklich, dass du die Zeit und die Motivation hast, das durchzuziehen, oder zumindest irgendwann mal eine einigermaßen spielbare Version zu veröffentlichen.

MFG Lador

Ich geb mir Mühe ;)

Freitag, 18. Januar 2013 um 00:53 Uhr von Spark Fountain

Danke schonmal für die ermunternden Worte Smile. Natürlich habe ich mir schon Gedanken gemacht, welche Sachen erstmal wichtig sind und was bisher nur theoretisch geplant ist. Wieviel ich bis wann umgesetzt kriege, ist auch abhängig davon, wieviel Zeit ich in den nächsten Monaten habe, und wie lange ich brauche um die Funktionalitäten zu implementieren (bisher läuft das zum Glück recht flott).

Eins kann ich schonmal verraten: Sobald an dem Editor noch ein paar Feinheiten verbessert bzw. ergänzt sind, mache ich mich erstmal an die Mehrspieler-Funktionalität. Es wird einen Ort geben, der den Namen "Pyranha-Arena" trägt (wobei Pyranha ein fiktionaler Name einer Firma ist, die Feuerwerkskörper herstellt. Die bekommen später auch noch nen eigenes Logo etc. Wink). Diese Arena sieht von außen aus wie ein kubischer Kanonenschlag, und man kann drinnen einen der beschriebenen Spielmodi wählen (Deathmatch, Lichtshow oder "Aufräumen").

Selbst bis das einigermaßen laufen wird, können möglicherweise noch 2-3 Monate vergehen, aber ich geb mein bestes. Sobald es was Testbares gibt, werde ich die entsprechende Pre-Alpha-Version zum Download anbieten. Ich werde sowieso auf die Meinung von Testspielern angewiesen sein, wie gut das Multiplayer-Verhalten ist bzw. ob es "fair" ist etc.

Erst wenn das einigermaßen gereift ist, mache ich mich an die Modellierung von Häusern, Fahrzeugen und sonstigen Objekten, erst dann wird die ganze Musik komponiert und die Story implementiert... Es ist also noch ne Menge Arbeit zu erledigen, aber sobald das Spiel erstmal für mehrere Spieler funktionsfähig ist, hat man sicherlich schonmal seinen Spaß daran (auch wenns später mal noch viel umfangreicher werden soll^^).


Viele Grüße

Gehe zu Seite 1, 2  Weiter


Kommentar schreiben

Titel:
Text: