Jump to content
Unity Insider Forum

Standalone Patcher


Recommended Posts

MainSite.png

 

Heute möchte ich euch meinen Cross Platform Patcher vorstellen.

 

Der Patcher managed eure Versionen und Patches zwischen den Versionen und vermittelt diese an eure Spieler: Neue Spieler bekommen die neueste Version und bestehende Installationen werden automatisch geupdatet, wenn ein neuer Patch verfügbar ist, ohne dass das gesamte Spiel neu gedownloadet werden muss.

 

Aber wie funktioniert das ganze jetzt?

 

Das System besteht aus 3 Komponenten:

  • Ein AdminTool zum Erstellen und Verwalten eurer Daten online und offline
  • Ein Server, auf den die Daten hochgeladen werden. Dieser Server wird von mir bereit gestellt und von allen Nutzern gleichzeitig verwendet.
  • Ein Client, den eure Spieler erhalten. Dieser übernimmt alle Arbeit, die man sich von einem Launcher/Patcher vorstellen kann von erstmaligem Downloaden über Patchen bis zur Reparatur von beschädigten Dateien.

Ist das ganze sicher?

 

Jeder Account kann mehrere User beherbergen, deren Permissions angepasst werden können. Dadurch kann jeder nur auf die Informationen und Aktionen zugreifen, die für ihn bestimmt sind.

 

Ist das System Cross-Platform?

 

Ja! Das System wurde darauf ausgelegt, auf möglichst vielen Systemen zu laufen.

Das Admin Tool ist Java-basiert und kann unter Windows OS X und Linux per Terminal/Cmd aufgerufen werden. Unter Windows empfehle ich den Installer, der bringt alle Dependencies mit sich und stellt außerdem eine .exe statt einer .jar Datei bereit.

Desweiteren ist gerade eine GUI Version des AdminTools in Entwicklung. Diese wird zuerst für Windows kommen, später dann auch als OSX App.

 

Bei den Clients habt ihr die Wahl zwischen einem Cross Platform Client (Java basiert) und einem Windows Client (C#). Außerdem könnt ihr die jeweiligen SDKs auch separat downloaden und euren eigenen Client erstellen, der alle eure Featurewünsche abdeckt. Die Clients bieten nur ein Subset an dem, was die Platform her gibt.

Weitere SDKs und ein OSX Client, der in die eigentliche App eingebunden werden kann folgen.

 

Die von mir erstellen Clients können individualisiert werden (Aussehen und Informationen über Server/Version etc). Das erstellte Datenformat .pcc kann unabhängig des Clients verwendet werden. Außerdem kann die .pcc mit dem Client gepacht werden, um z.B. das Aussehen des Clients zu ändern oder ab einer bestimmten Version einen Serverwechsel zu vollziehen.

 

Ich habe verschiedene Binaries für Windows, OSX und Linux / Sind Beta Versionen möglich?

 

Auch das ist ohne Probleme möglich. Das System baut auf sogenannte "Channels". Jeder Channel enthält seine eigenen Versionen und Patches. Und jeder Client ruft nur die Daten eines einzelnen Channels ab.

So sind z.B. Channels für die verschiedenen Betriebssysteme möglich oder Builds, die zuerst für bestimmte Testergruppen bestimmt sind und danach auf einen allgemeinen Channel verschoben werden.

Mit etwas Kreativität ist somit auch das wellenweise Verteilen von neuen Versionen möglich.

 

Das klingt alles sehr kompliziert

 

Ist es aber nicht :) Die schwere Arbeit übernimmt der Patcher, ihr könnt euch getrost auf die Entwicklung des Spiels, das ihr schon immer entwickeln wolltet, konzentrieren. Das AdminTools tellt derzeit fast 90 verschiedene Befehle bereit, die euch die Arbeit erleichtern sollen, aber die nötige Flexibilität gewährleisten.

 

Lässt sich das auch automatisieren?

 

Ja das geht! Das Admin Tool unterstützt Scripts, in denen ihr Routinen in Dateien beschreiben könnt. Zusammen mit dem in alle Befehle integrierten Variablen-System lassen sich so vollautomatische Releases erstellen.

 

Wo bekomme ich diesen Patcher?

 

Hier: http://game-patcher.de/

Momentan befindet sich der Patcher in einer Beta Phase. Deswegen ist nur der Free Plan verfügbar (dafür aber mit etwas großzügigeren Werten).

Bitte beachtet, dass sich am Patcher noch einiges ändern kann. Einen wirklichen Release würde ich damit noch nicht machen. Aber wenn man an eigene Tester sein Spiel weiter leiten will, steht dem ganzen nichts im Wege.

Auch zu beachten ist, dass aufgrund der Beta noch nicht alle Dokumentationen verfügbar sind und auch noch nicht alle Guides veröffentlich sind. Aber ich sitze dran und versuche, den Content zu liefern :)

 

Grüße,

Silveryard ;)

  • Like 7
Link to comment
Share on other sites

Ich habe tatsächlich das Ziel, den Patcher im Asset Store anzubieten. Doch bis dahin ist es denke ich noch ein weiter Weg. Ich habe noch nicht alle Features implementiert, die ich auf meiner Liste stehen habe und gerade, wenn wenn etwas nicht 100% nach Plan läuft, kann der Patcher noch nicht mit allen Situationen automatisch umgehen.

Deswegen wollte ich euch eine kleine Erstversion zur Verfügung stellen, damit ihr Kritik geben könnt. Und wer will, darf ihn auch jetzt schon kostenfrei in seinen Projekten verwenden ^^

  • Like 2
Link to comment
Share on other sites

Ich hätte da ein paar Anmerkungen.

 

Zunächst zum Server. Vielleicht hast du das ja auch schon auf deiner TODO, aber es wäre super wenn der Server die benötigten Tabellen selber erstellen würde und man das nciht manuell machen muss.

 

Ich habe zugegebenermaßen nicht alles gelesen aber dennoch habe ich einen Hauptpunkt.

Die Notwendigkeit der Java Runtime. Das halte ich für ungeschickt gewählt.

 

Wenn ich mit Unity entwickle komme ich nicht mit Java in Beruhrung und habe dem entsprechend auch vermutlich keine JRE installiert. Um der Patcher nun verwenden zu können muß ich das extra tun. Ok, einem Enwickler kann man das noch zumuten.

Aber der User, also der Endkunde, muß nun auch exra die JRE installiert haben. Das hat nicht jeder.

 

Ich halte ich Java wirklich für das falsche Mittel. C# wäre da vermutlich die bessere Wahl.

 

Nur um dem vorzubeugen... das ist kein Java gebashe. Ich bin/war selbst Java Entwickler. Mir geht es hierbei auch nicht um die Sprache sondern einfach um die Tatsache daß eine extra Runtime installiert werden muß, die nicht jeder sowieso schon drauf hat. Wie es bei C# zumindest bei Windows der Fall ist.

 

Edit: Ich hoffe das kommt jetzt nicht all zu negativ rüber. Ich will deine Arbeit wirklich nicht sclecht machen!

Edited by MadLion
Link to comment
Share on other sites

Das automatische Erstellen steht noch auf der TODO List ja. Das wird mit einer der nächsten Versionen definitiv noch kommen.

 

Nun zur Wahl der Sprache. Zuerst mal, deine Kritik ist mehr als berechtigt. Lass mich deine Zweifel (zumindest etwas) zerstreuen:

 

1. Dieses Projekt zielte von Anfang an darauf ab, nicht nur in Unity zu funktionieren und daher habe ich von einem reinen Unity Plugin abgesehen. Der Patcher soll allgemein für Software einsetzbar sein. Daher hat sich Java für mich als Platformübergreifende Sprache zusammen mit PHP für den Server angeboten

 

2. Unter OSX ist Java schon auf jedem Gerät installiert, unter Windows wird es ein Großteil haben (wenn auch nicht alle, das gebe ich gerne zu). Aber z.B. Minecraft setzt ebenfalls auf Java. Das Projekt ist auf Java 1.7 entwickelt, nicht 1.8. Das hat unter anderem den Grund, dass so auch Menschen den Patcher nutzen können, die (wie ich z.B.) einfach zu faul für Updates sind. Ich persönlich sehe die JRE nicht als großes Problem an.

 

3. Der Client ist bisher mit Abstand das kleinste meiner Projekte und übernimmt nur den Aufruf einiger Funktionen des Servers, den Download und das Updaten von Dateien. Nichts spricht dagegen einen Unity-Eigenen Client zu entwickeln (was ich möglicherweise auch geplant habe). Vorerst hab ich mich für einen Java Client entschieden, da dieser mit seinen 3MB doch schön klein ist.

Link to comment
Share on other sites

Das automatische Erstellen steht noch auf der TODO List ja. Das wird mit einer der nächsten Versionen definitiv noch kommen.

Das dachte ich mir. :)

 

Zu 1.) Das hatte ich ein wenig vermutet.

 

Zu 2.) Ich würde nicht darauf wetten daß ein Großteil der Windows Rechner auch Java hat. Es spielt ja auch nicht jeder MC. ;)

Mir war nicht bewußt daß bei OSX schon Java installiert ist.

Die Frage ist wer die Hauptanwendergruppe sein wird. Und das wird vermutlich, behaupte ich jetzt zumindest mal, immernoch Windows sein. Und da bin ich eben der Meinung daß die JRE nicht die beste Wahl ist.

 

Ich sage das eigentlich auch nur weil das evtl. für manche ein Grund sein könnte den Patcher nicht einzusetzen.

 

Zu 3.) 3MB + mindestens einmalig (und regelmäßige Updates) 100+MB für die JRE. ;)

 

Ich will dich auch nicht davon abbringen und dazu bewegen nochmal alles neu mit etwas anderen zu machen. Ich wollte das nur mal erwähnt haben. :)

Link to comment
Share on other sites

Ich hab mich mal hin gesetzt und für das Admin Tool eine Wiki geschrieben (Siehe 1. Post)

Es sind bereits einige Befehle der kommenden Version 1.1 enthalten, diese können sich aber noch ändern und sind bei weitem noch nicht vollständig. Es ist aber ersichtlich, welcher Befehl zu welcher Version gehört

Link to comment
Share on other sites

Beim momentanen Entwicklungsstand sind jetzt "channels" möglich.

Jeder channel besitzt seine eigenen Versions und Patches. Das gibt Entwicklern die Möglichkeit, Daten für verschiedene Betriebssysteme auf einen einzigen Server hochzuladen, spezielle Versionen für Beta Tester bereit stellen etc etc.

Außerdem ist jeder Channel Passwort geschützt.

 

Außerdem sind neben dem Client auch SDKs in verschiedenen Sprachen geplant, sodass ein Client in Unity leicht umzusetzen sein wird.

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...

Update:

 

Die .Net SDK ist soweit fertig genau wie ein Client, der darauf aufbaut. Das Ergebnis ist eine .exe Datei, so dass der Spieler nicht mehr gezwungen ist, Java installiert zu haben (und es können ohne einen Umweg über java.exe Shortcuts erstellt werden).

 

Die für Java Clients erstellten .pcc Configuration Files können ohne Änderungen für .Net übernommen werden. Unterbrochene bzw laufende Downloads sind dagegen nicht kompatibel. (Also erst den bestehenden Download abschließen und dann die .jar gegen die .exe austauschen und es sollte keine Probleme geben)

 

Apropos Shortcuts: Für Java kommt jetzt auch ein Tool hinzu, mit dem ihr für .jar Dateien Shortcuts auf Windows erstellen könnt.

 

Dazu kommen noch sehr viele Verbessungen, was Memory Usage angeht. Das Patchen ist dabei immer noch der Flaschenhals, aber auch der Garbage Collector arbeitet nicht immer sauber, so dass man hin und wieder etwas nachhelfen muss.

Link to comment
Share on other sites

Theoretisch gestern ^^

Das System läuft. Die Änderungen, die ich jetzt noch vornehme beeinflussen minimal den Patch Fluss (Repair Version z.B. ist noch nicht in den Clients aktiviert). Sie zielen eher auf Serverseitige dinge wie Account Management ab.

 

Turritom klagt noch über eine OutOfMemory Exception bei Java Clients, die beim Patchen auftritt, was ich allerdings nicht reproduzieren kann und vermutlich auch abhängig vom Spiel ist. Es kann sehr gut sein, dass der Fehler bei dir nicht auftritt (Scheint abhänging von der größten Datei, die gepatcht werden soll).

 

Wenn du Lust hast, einfach bei mir melden

 

Edit: Das ganze sollte natürlich wie oben beschrieben als Beta angesehen werden und nicht als fertiges Produkt

Link to comment
Share on other sites

  • 2 months later...

Kleines Großes Update mal am Rande :)

 

Ich hab was das Projekt angeht nicht viel von mir hören lassen die letzte Zeit, ich habe aber viel Zeit und Mühe darin gesteckt, das ganze weiter voran zu treiben. Nachdem ein umfassendes Update des Servers und des Netzwerk-Codes sich der Fertigstellung nähert und auch Website und online Dokumentation beginnen, Form anzunehmen kommt hier dann mal eine kleine Ankündigung:

 

In naher Zukunft (Wenns gut läuft dieses Jahr noch), werde ich eine offene Beta starten. Der Patcher soll als Service angeboten werden, heißt ihr erstellt einen Account und bekommt Speicher auf von mir bereit gestellten Servern. In der Beta werden nur die Free Plans zur Verfügung stehen mit limitierter Speicherkapazität, Channels etc, von Fall zu Fall kann man mit mir aber auch über ein kostenloses Upgrade reden.

Damit ihr auch wisst, was alles möglich ist, wird eine Doku online gehen mit folgenden Themen:

  1. Tutorials / Guides: Vom QuickStart Guide bis zu spezielleren Themen (Channel Management, Automatisierung etc), die etwas mehr in die Tiefe gehen, könnt ihr hier interessante Artikel lesen, die euch das Konzept und die Möglichkeiten des Patchers näher bringen. Dieser Bereich wird nach und nach gefüllt und wenn sich wer berufen fühlt, selbst einen kleinen Artikel zu schreiben ist herzlich eingeladen.
  2. Admin Tool: Das AdminTool gibt einem volle Kontrolle darüber, was im Hintergrund passiert. Deswegen gibt es einen eigenen Bereich, der alle Befehle erklärt, die angewendet werden können. Es gibt zwar auch eine hilfe im Tool selbst, allerding ist auf der Website einfach mehr Platz für beispiele etc.
  3. SDKs: Die Beta wird nur mit einer C# SDK und einem Windows Client beginnen (kein Java erforderlich auf Client Seite), deshalb wird vorerst auch nur eine Reference für C# vorliegen. Wer seinen eigenen Client schreiben will, wird hier gut aufgehoben sein, da die SDKs als Layer zwischen den Clients und dem Server agieren und man sich als Entwickler so auf das wesentliche konzentrieren kann
  4. Server: Wer ganz tief in die Materie einsteigen möchte oder eine Sprache benutzt, die ich noch nicht supporte, kann auch direkt mit dem Server kommunizieren. Was es hier für Möglichkeiten gibt und was so zu beachten ist, findet ihr in diesem Bereich.

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...
  • 1 month later...

It´s Beta time!

 

Den Patcher kann ab sofort jeder hier downloaden.

 

Bereits verfügbar sind:

 

Natürlich alle benötigten Tools zum Download. Aktuell ist ein native Windows Client und ein universeller Java Client fertig gestellt. Ein native OSX Client mit dem passenden Look&Feel und Behaviour (1 App, keine Zusatzordner) ist bereits in Arbeit.

 

Download.png

CreateAccount.png

 

Guides:

 

Der Einstieg in den Workflow eines neuen Produkts ist immer schwierig. Deswegen gibt es hier aktuell einen Quick Start Guide, der die nötigen Kenntnisse vermittelt, um schnell ein Ergebnis zu erhalten. Artikel, die einzelne Themen genauer beleuchten und erklären, folgen im Laufe der Zeit.

 

Guides.png

Dokumentationen:

 

Wer schnell einen Befehl nachschlagen möchte oder eine Referenz zur Erstellung eines eigenen Clients braucht, ist hier richtig. Eine Dokumentation aller (aktuell) 83 Befehle des AdminTools sowie die öffentlichen Klassen der JavaSDK stehen bereits zur Verfügung.

 

Doku%20AdminTool.png

Doku%20JavaSDK.png

 

Das ist mein erstes wirklich großes Projekt und ich bin jeden Tag wieder überrascht, wie viel Arbeit dort hinein geflossen ist, was eigentlich als "Testprojekt" angefangen hat, um die Materie besser kennen zu lernen. Inzwischen ist das ganze auf über 10k Zeilen Java, 3k Zeilen C#, 3k Zeilen PHP und eine Website mit aktuell 104 einzelnen Seiten gewachsen.

 

Für Feedback und Fragen bin ich natürlich immer offen :D

 

Grüße,

Silveryard

  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...

Moin Silveryard... wollte das grade mal testen aber irgendwie bin ich zu doof :X Ich hab mir nen Account angelegt und nun sagt er ich könnte mich via Admin tool einloggen?! Also NICHT auf der website sondern in dem Admin Tool das ich herunterladen kann ? Da scheiter ich leider an Schritt 2 deines Getting Startet Guids weil ich keine Ahnung von Java habe :D :'(

 

Wirklich schade :-/ Aber damit auch ich das verstehe dein Tool hier läd dann quasi keine Patches herunter sondern immer die komplette neue Version? Hab die letzten Tage versucht was über Patchmöglichkeiten bzw Addon möglichkeiten von Unity herauszubekommen aber da scheints ja ziemlich mau auszusehen.

 

Gruß, Cxyda

Link to comment
Share on other sites

Danke für das Feedback :)

Ich werde das dann im Guide etwas ausführlicher erklären und auch eine Start.bat (Win) bzw Start.sh (Unix) beilegen, um das Programm nicht per Kommandozeile starten zu müssen.

Was du tun musst: WinTaste + R und gib cmd ein. Das öffnet die Eingabeaufforderung. Da schreibst du rein "java -jar " und ziehst die AdminTool.jar in das Fenster. Dadurch wird der Pfad zum AdminTool eingetragen. Mit Enter startest du das Programm.

 

Nein es werden schon Patches herunter geladen :) Wenn sich in deiner riesigen Scene eine Kleinigkeit ändert bzw sich dein Code etwas ändert, werden nur die Änderungen herunter geladen (Nicht mal die kompletten geänderten Dateien sondern wirklich nur ihre geänderten Teile). Du lädst neben den Patches aber trotzdem auch immer wieder Versionen hoch. Denn wenn ein neuer Spieler dein Spiel zum ersten mal startet (bzw den Launcher), müssen erst mal alle Dateien möglichst aktuell gedownloaded werden. Um dem Spieler viele unnötige Patches zu ersparen lohnt es sich also immer wieder, neben Patches für bestende Spieler auch komplette Versionen hochzuladen.

 

Hoffe ich konnte helfen, bei Fragen einfach wieder melden :)

Link to comment
Share on other sites

THX für die Antwort :D Werds heute Abend dann gleich nochmal versuchen.

 

Ist ja cool das es dann tatsächlich nur die geänderten Dateien Patcht ... baue ich dann in Unity ganz normal mein Build und lade die Version hoch oder wie läuft das dann?! *Sorry für das dumme Gefrage bin eben eigentlich Grafiker und kein solide ausgebildeter coder :D

Link to comment
Share on other sites

Der Patcher wurde dafür ausgelegt, mit allen Arten von Dateien zu funktionieren. Er ist also unabhängig von der Engine oder gar Art des Programms (Muss kein Spiel sein). Deswegen brauchst du für Unity auch keine speziellen Dinge beachten.

Du baust deinen Build und kopierst die MeinSpiel.exe und den MeinSpiel_Data Ordner in den Sources Ordner des Patchers. Daraus kannst du dann Versionen und Patches erzeugen.

Bei der .pcc Datei des Launchers gibst du als Executable dann einfach "MeinSpiel.exe" an und wenn der Spieler im Launcher dann auf "Play" drückt, wird dein Spiel ausgeführt.

 

Trotzdem ist es möglich, sich selbt und dem Patcher das leben einfacher zu machen. Unity speichert die Scenendaten in sharedassets Dateien. Je größer deine Scene, desto größer die Datei. Der Aufwand zum erstellen von Patches (und auch das Patchen selbst, wenn auch in viel kleinerem Maße) wächst exponentiell mit der größe deiner Dateien.

 

Wenn du also ein 4GB Spiel hast, das nur aus Dateien < 200MB hast, sind Patches schnell und mit wenig RAM Aufwand erstellt. Wenn du dagegen eine einzige 600MB Datei hast, weil deine Scene riesig ist, solltest du mindestens eine 64bit Java Version haben, aktuell 6-7 GB RAM frei sein und Zeit haben einen Kaffee oder ähnliches zu holen nur um diese eine Datei zu bearbeiten (vorraussgesetzt sie hat sich zwischen 2 Versionen verändert). Dazu gesagt: 2 600MB Dateien brauchen dann nicht 14GB RAM. Der RAM-Anspruch bemisst sich an der größten geänderten Datei im Build. Die Zeit verdoppelt sich aber leider trotzdem.

 

Du kannst dem entgegenwirken, indem du entweder AssetBundles nutzt. Oder deine Scene in mehrere kleine Scenes aufteilst und diese dann zur Laufzeit zusammen lädst.

 

Edit: Der hohe Anspruch an RAM und CPU ist einer der Gründe, warum die Patches bei dir auf dem Rechner und icht auf dem Server generiert werden. Ein anderer Grund ist, dass du so nicht zwingend alle Versionen hochladen musst (Speicher sparen, hab einen Guide dazu geschrieben der beizeiten mal noch mit Bildern ausgeschmückt wird).

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...