Jump to content
Unity Insider Forum

Blogs

Featured Entries

  • Mark

    UltraTerrain Dev Diary #2

    By Mark

    Nachdem die Tests nun immer umfangreicher werden wächst auch die Funktionsvielfalt.

    Im letzten Post habe ich den PageDataHandler erwähnt, dieser ist nun fast vollständig implementiert, dazu musste aber einiges gemacht werden.

    Der PageDataHandler soll wie der Name bereits andeutet in der Lage sein die Daten einer Page zu handhaben/verwalten, darunter fällt wie bereits erwähnt das Laden der Daten.

    Das Laden der Daten basiert auf 2 Schritten:

    1. Wenn noch keine komprimierten (zip) Daten im Objekt vorhanden sind dann wird das dem System zugehörige VirtuelleFileSystem nach den passenden Page Daten gefragt. Das VirtuelleFilesystem ist das VFS aus SaveIt und kann in einer Datei verschiedene Unterdateien speichern und lesen, das ganze ohne jedesmal die gesamte Datei in den Speicher zu laden. Die Daten wurden vorher komprimiert in das VFS abgelegt.

    2. Sind die komprimierten Daten vorhanden werden diese dekomprimiert und in die Datenarrays gelegt die ein PageDataHandler hat. Das sind aktuell nur 2 Arrays, einmal die VoxelValues welche angeben wir einflussreich ein Voxel ist (0.0 bedeutet kein VoxelEinfluss und 1.0 bedeutet vollen Einfluss) und die BlendValues, welche angeben wie die verschiedenen Texturen später miteinander verschmelen werden.

    Der 2. Schritt ist gesondert vom ersten aus folgendem Grund: Der PageDataHandler soll wenn eine Page längere Zeit unverändert bleibt die Daten zwischenspeichern können um Speicherplatz zu sparen um später wenn die Page noch viel länger unangetastet blieb diese Daten in das VFS zu speichern. Dies soll später dafür sorgen dass nur die Voxeldaten in Speicher verbleiben die unbedingt nötig sind um entweder schnelle änderungen zu ermöglichen oder wieder schnell parat zu sein um änderungen vorzunehmen.

    Intern arbeiten die Load und LowerMemorConsumption Methoden mit Asynchronen Operationen die jeder Zeit abgebrochen werden können um zB wärend eine Page grade die Daten komprimiert diese Operation abzubrechen da ich die Daten spontan doch unkomprimiert benötige.

    Das System für diese Asynchronen Operationen basiert auf den Unity Threading Helper.

    Bestimmte Aktionen können allerdings nicht abgebrochen werden und sind damit auch synchron und nicht asynchron, zB das löschen aller Daten bei dem es keinen Zwischenschritt gibt der noch abgebrochen werden könnte.

    Das System zu laden und Speichern der VoxelDaten bedarf aber noch einen weiteren Zwischenschritt um Versionsupdates auf neuere UltraTerrain Versionen zu ermöglichen, aus diesem Grund wird in den Page Daten später noch die Version des Dateiformates (unabhängig vom VFS Format) abgespeichert werden und basierend auf dieser Version werden dann die geeignetesten Speichermethoden gewählt.
    • 0 comments
    • 409 views
 

Projekt Update

Heute habe ich angefangen das Projekt zu Upadeten auf die Unity Version 2017.4x.
Nach viel Arbeit ist es dann auch fertig geworden.
  Jetzt wird es Interessant Ich habe das Projekt nun auch soweit das Wetter sowie die Server Zeit Syncroniesiert wird.
Aber auch Fehler die ich Pet System gemacht habe konnte ich beheben.
Aber auch Anpassungen die gemacht werden mussten so das die Animationen von den Charakteren flüssiger sind wurden gemacht.
Sicherlich sind noch viele dinge zu tun aber ich werde euch hier auch zum Aktuellen Stand auf dem Laufenden halten mit der Zeit werde ich auch Screenshots und Videos Posten so das ihr auch mal etwas sehen könnt vom Projekt selber.

Nightclaw

Nightclaw

 

Planung und Umsetzung

Nach langer Zeit habe ich nun wieder Angefangen mich wieder mit der Entwickelung eines Spieles in Unity zu befassen.
Bin also zum Entschluss gekommen mein MMORPG Framework weiter zu bearbeiten und mit der Zeit auch Spielbar für andere zu machen.

Dabei handelt es sich schon um einen einsatzbereites Script was ich schon länger besitze..

Ich habe nun erstmal angefangen alles wieder aufzusetzen.
Server ist nun wieder Online sowohl Login als auch die Welt.
Der Client selber wurde nun erstmal vom alten stand auf die passende Unity Version gepatcht leider kann ich nicht die Aktuellste Unity Version nehmen daher bleibt es wohl bei Unity 2017.1 aber das macht ja nix.

Und der Client wurde nun auch auf den SVN Server übertragen den ich später zum Datenaustausch zuwischen den Team  Mitgliedern genutzt werden soll hochgeladen.

Nächsten Schritte :

Story schreiben
GDD Fertigstellen
Erstellung der Welt
Erstellung von Charakteren / NPC und Quests
Spielbare Pre-Alpha

Aber bis dahin sind noch einige Sachen zu tun.
Wer Interesse hat an einem Langfristigen Projekt kann sich gerne bei mir melden. Ich schätze ca. 2-3 Jahre Arbeitszeit bis wir in eine Wirklich gut Spielbare Alpha Version kommen können.

Nightclaw

Nightclaw

 

UNITY doesnt start!

Hey leute!

Seit gestern startet mein Unity Projekt nicht mehr. Keine ahnung warum, das Bild das ich gemacht habe lässt sich leider nicht hochladen schreibe es ganz unten hin was Unity schreibt. Hab jedefalls nach der Nachricht UNity des öfteren Deinstalliert und neu Installiert. Bitte um Hilfe! Danke im voraus!


[b]_____________________________________________________________________________[/b]
[b]Opening Project in Non-Matching Editor Installation[/b]

You project was last opened with a different setup of Unity.

C:/Users/PC1/Documents/Project55

The saved project (5.4.1f1) does not match the launched editor (5.4.2f2).

This may require re-import. Please be aware that openening an older version is unsupported.

Note that if a build target installation is missing, this may also cause a re-import.
______________________________________________________________________________

Lumpi

Lumpi

 

Unity 5 Startet und crasht

Hi ich habe die neueste Version von Unity, die neueste Version von Windows 10 und die neusten Grafik-Treiber. Aber wenn ich Unity starte stürzt es im Ladebildschirm ab. Im Crash report Fenster kommt folgende Fehlermeldung:

Unity Editor [version: Unity 5.4.2f2_b7e030c65c9b]

Unity.exe caused an Access Violation (0xc0000005)
in module Unity.exe at 0033:000008d4.

Error occurred at 2016-11-04_192628.
C:\Program Files\Unity\Editor\Unity.exe, run by Drewes.
29% memory in use.
16319 MB physical memory [11578 MB free].
18751 MB paging file [11044 MB free].
134217728 MB user address space [134216534 MB free].
Write to location 000008d4 caused an access violation.

Context:
RDI: 0x00000000 RSI: 0x136e8c60 RAX: 0x00000000
RBX: 0x136e8c60 RCX: 0x000008d4 RDX: 0x00000001
RIP: 0x000008d4 RBP: 0x00000000 SegCs: 0x00000033
EFlags: 0x00010216 RSP: 0x1328e8a8 SegSs: 0x0000002b
R8: 0x00000000 R9: 0x00000001 R10: 0x000008d4
R11: 0x00715a08 R12: 0x1328eea8 R13: 0x1328eeb8
R14: 0x00000000 R15: 0x136dbf10

Bytes at CS:EIP:
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

Stack:
0x1328e8a8: 0e408768 00000000 1328e900 00000000 h.@.......(.....
0x1328e8b8: 00002736 00000000 00000000 00000000 6'..............
0x1328e8c8: 00000001 00000000 00000000 00000000 ................
0x1328e8d8: 0e3f8838 00000000 136e8c60 00000000 8.?.....`.n.....
0x1328e8e8: 136e8c60 00000000 00000000 00000000 `.n.............
0x1328e8f8: 00000000 00000000 00002736 00000000 ........6'......
0x1328e908: 00000000 00000000 00000000 00000000 ................
0x1328e918: 00000000 00000000 00000000 00000000 ................
0x1328e928: 08351c61 00007ff9 000008d4 00000000 a.5.............
0x1328e938: 08356001 00007ff9 00000000 00000000 .`5.............
0x1328e948: 4c0cf5c0 00007ff9 00000000 00000000 ...L............
0x1328e958: 136e8c60 00000000 136d7600 00000000 `.n......vm.....
0x1328e968: 083565f6 00007ff9 00000000 00000000 .e5.............
0x1328e978: 136e8c60 00000000 45967d3d 000013a0 `.n.....=}.E....
0x1328e988: 00000000 00000000 01f27798 00000000 .........w......
0x1328e998: 07abeeb9 00007ff9 00000102 00000000 ................
0x1328e9a8: 00000000 00000000 45967ded 000013a0 .........}.E....
0x1328e9b8: 00000000 00000000 00000010 00000000 ................
0x1328e9c8: 07abfa4a 00007ff9 00000010 00000000 J...............
0x1328e9d8: 1328eab0 00000000 00000000 00000000 ..(.............
0x1328e9e8: 00000000 00000000 00000140 00000000 ........@.......
0x1328e9f8: 07ac069a 00007ff9 01f55c28 00000000 ........(\......
0x1328ea08: 0934c500 00007ff9 1328eea8 00000000 ..4.......(.....
0x1328ea18: 00000000 00000000 0a797590 00007ff9 .........uy.....

GenArcTrooper

GenArcTrooper

 

Endlich! Master Server Framework im Asset Store!

[b][size=6]Master Server Framework (Beta $40 statt $50)[/size][/b]

Jungs und Mädels.
Ich habe schon länger auf diesen Moment gewartet. Endlich. Es gibt im Asset Store den "Master Server Framework" und gerade noch in Beta. Daher weiterhin im Entwicklung und könnt quasi eure Wünsche einbringen und sie wird vielleicht implementiert.

Allgemein ist das ein Framework, was sich erweitern lässt. Das Framework nimmt einige arbeiten der Entwickler zum Thema-Server backend ab. Quasi etwas für MMO? Oder Multiple Server? Verzicht auf Unity Service oder Photon Cloud Server und deren Gebühren?

[b][size=5]Warum begeistere ich mich aber für diesen Package?[/size][/b]
Was macht es (für mich) besonders?
Eigentlich ist das ein Framework. Das heißt, dass man immer noch selbst Coden müsste, um überhaupt Features zu haben, aber es wurden "Module" eingebaut.

Für mich ist das hier das wichtigste:[list]
[*]Es hat ein [b]Auto start / close Server[/b] Feature, dass heißt, wie bei Photon Cloud werden server gestartet. Damit kann ich auf Photon verzichten. Nicht nur das. Hier braucht man auch keine sorgen über NAT machen.
[/list]
Aber folgendes gibt es auch:[list]
[*]Authentication - Registration und Einloggsystem
[*]Spielerprofile
[*]Lobbysystem / Gameserver - Die Server werden also gelistet und man kann auch vorher sich in der lobby sehen. Auch shoppen und so weiter geht. Spielerprofile anschauen. Stell mir das ungefähr wie bei Dota 2 oder so vor.
[*]Spawner Servers: Das was ich oben schon sagte:
[*]Chat: Private Nachrichten oder Globale
[/list]
Das System ist so aufgebaut, dass man mit verschiedenen Network Solution arbeiten kann. Das heißt Bolt, Forge Networking, UNet usw.

Weiterhin sollen auch viele andere Dinge kommen:[list]
[*]Admin UI (to manage servers, connected users and etc.)
[*]MMO-like Instances module
[*]Matchmaker with Queues and automatic server starting [b](für mich sehr wichtig)[/b]
[*]Friends and Guilds / Clans
[*]Shop functionality
[*]Leaderboards
[*]Forums
[/list]
Diesen Queuesystem könnte ich noch selber kriegen, da ja schon server autostart und so gibt, aber warum nicht.

Hier zum Paket.
[url="https://www.assetstore.unity3d.com/en/#!/content/71391"]https://www.assetsto...!/content/71391[/url]


Hier zum Forum:
[url="https://forum.unity3d.com/threads/master-server-framework.430570/#post-2812490"]https://forum.unity3...0/#post-2812490[/url]

Falls euch das interessiert postet ruhig eure Vorschläge.

MaZy

MaZy

 

Motivation - Linksammlung, Unity WebGL Multiplayer

Hey,

das ist jetzt kein natürlicher Blogeintrag, wo ich meine Gedanken freilaufen lasse.
Ich werde hier mal ein paar Links listen (und weiter führen).
Diese Links beinhalten webgl Spiele mit Unity und sollen zur Motivation dienen. Sie wurden ca. so wie Agar.io oder Slither.io aufgebaut. Mich motiviert es auf jeden fall und hoffentlich euch auch.[list]
[*][b][url="http://PIRANH.IO"]PIRANH.IO[/url][/b] - WebGL, Photonnetwork
[*][b][url="http://GUNR.IO"]GUNR.IO[/url] (Beta)[/b] - WebGL, Websync (nicht sicher, was genau)
[/list]
Mir spezial macht [b]Gunr.io[/b] sehr spaß, aber ist nur am Laggen. Finde ich sehr schade. Soll aber beta sein.

MaZy

MaZy

 

Update!

Leider komme ich nicht weiter hier und muss mich auf andere Sachen unstelen.

Die Idee war gut aber leider könnte ich keine ausreichende Kampfsystem erstellen, dauert einfach zu lange und mir gefält nicht so was darus wird. Das Project brauch also eine komplette Revision.

Nebenbei habe ich versucht ein compacteres Project aufzustellen, und ich habe dafur ein Demo erstellt.[url="https://www.youtube.com/watch?v=hVRbES2owLM"] Ich habe eine Video davon hinzufügt.[/url] Das sollte ein Spiel werden bei der Leute ohne registrierung einlogen können und dan versuchen sollen so lange wie möglich zu überleben um dann sein Name in die Rangliste einzutragen. Das Stadt is eine persistent mmo Welt, voll mir Zombies and anderen pvp Spieler. Leider hat mich das resultat auch nicht überzeugt.

Ausserdem habe ich noch weitere ideen ausprobiert und ein neues Project geplant, dass deutlich besser sein solte, aber ich kann es noch nicht ausprobieren. Das wird eine neue Revision sein einer meiner Projecte, wo es dabei geht einen Spaceship zu bauen und damit kämpfen, ähnlich wie Robowars.

Rasly

Rasly

 

Man, immer wieder wird Mikrofonlautstärke verstellt.

[center][size=6][font=lucida sans unicode,lucida grande,sans-serif][b]Heute mal nichts mit Unity[/b][/font][/size][/center]

[size=4][font=lucida sans unicode,lucida grande,sans-serif]Wer kennt das Problem nicht? Man startet ein Spiel, ein Programm oder sonst was, dass das Mikrofonlautstärke bei Windows-Aufnahmegeräten einfach umgestellt.[/font][/size]

[size=4][font=lucida sans unicode,lucida grande,sans-serif]Ich benutzt ein Standmikrofon. Das Mikrofon ist für Musik, oder Podcast aufnahmen gedacht. Daher reichen mir die 10% Einstellungen in der Aufnahmegeräte. Wird es ca. 20 ist es schon zu laut. Bei 100% ist es unmöglich laut. Da hört man auch die Leute aus der Nachbarschaft reden.[/font][/size]

[size=4][font=lucida sans unicode,lucida grande,sans-serif]Und das ist mein Problem. Warum müssen Entwickler immer so programmieren, dass ihre Programme die Mikrofonlaustärke ändern, obwohl man selber als Benutzer nicht da rumfummelt?[/font][/size]

[size=4][font=lucida sans unicode,lucida grande,sans-serif]Weil ich mich das tierisch genervt hat, habe ich in C# mein eigenes Programm entwickelt.[/font][/size]






[center][font=lucida sans unicode,lucida grande,sans-serif][b][size=6]Microphone Level Resetter[/size][/b][/font][/center]



[center][font=lucida sans unicode,lucida grande,sans-serif][img]http://i.imgur.com/oewkA9G.png[/img][/font][/center]

[font=lucida sans unicode,lucida grande,sans-serif]Dieses Programm kann Einstellung des Benutzers benutzen, um zu überprüfen, ob sich etwas verändert wurde. Man kann es zum Tray (unten rechts zu den Symbolen) minimieren und im Hintergrund laufen lassen. Somit verfliegen alle "meine" Sorgen über die Lautstärke, denn es setzt ja wieder zurück [/font]

[font=lucida sans unicode,lucida grande,sans-serif]Falls ihr sowas auch braucht. Der Download dazu: [/font][url="http://bit.ly/20Q7yTm"]http://bit.ly/20Q7yTm[/url]

[font=lucida sans unicode,lucida grande,sans-serif]Eine kleine Erklärung zu Microphone Level Resetter als Video.[/font]
[font=lucida sans unicode,lucida grande,sans-serif][media]http://www.youtube.com/watch?v=qcJC92G1wmc[/media][/font]

MaZy

MaZy

 

Entwicklertagebuch Woche 2

In meinen letzten Beitrag habe ich mich hauptsächlich dem Thema KI und all seinen Facetten zu gewandt, sodass ich in dieser Woche mehr am allgemeinen Spielprinzip gewerkelt habe. So bin ich zum Schluss gekommen das ich mein Hauptaugenmerk auf den Karrieremodus wenden sollte, da die typischen Schnellkämpfe die für das Gerne normalerweise prädestiniert sind, keinen Sinn machen würden, da ja ein Rundenkampfsystem vorliegt.

[b][b]Karrieremodus? Wie soll dieser aussehen?[/b][/b]

Mein derzeitiges Konzept geht dahingehend dass der Spieler zuerst einen Kämpfer erstellt. Dort hat man dann die Möglichkeit seine Gewichtsklasse auszuwählen und seinen Kämpfer zu erstellen. Von der Theorie her hätte ich auch schon einige Umsetzungsmöglichkeiten im Kopf, wobei mir derzeit immer noch ein Grafiker fehlt, um den Charaktereditor fertig zu bekommen. Des Weiteren soll der Spieler mit Trainingseinheiten die Möglichkeit bekommen seiner Spielfigur neue "Moves" beizubringen, bzw. alte zu verbessern. Ein weiteres RPG Element wären die levelbaren Grundwerte wie Stärke, Ausdauer; Schadenswirkung (bis jetzt nur ein Konzept). So kann der Spieler seinen eigenen individuellen Kämpfer nutzen.

[b][b]Was hab ich praktisch gemacht?[/b][/b]

Kampfsystem:
1. Wenn der Spieler einen bestimmten Angriff oft genug abbekommt, sinkt sein Maximaler Lebenspunkte Wert, sodass er in späteren Kämpfen mit weniger Lebenspunkten startet.
2. Allgemein in der Schwierigkeitsgrad etwas gestiegen, was ich durch Schadensanpassungen erreicht habe.

Karrieremodus:
1. Mit jeden Kampf den der Spieler absolviert vergeht eine Woche im Spiel. Im späteren Spiel wird es Intervalle geben, in denen eine bestimmte Anzahl an Kämpfen absolviert werden kann.
2. Der Spieler kann seinen Kämpfer nun regenerieren lassen um so Kampfverletzungen zu heilen.
3. Die Grundlagen der verschiedenen Ligen wurden erstellt, die derzeit aber noch nicht mit Einbezogen werden.

Grafik:
1. Das Interface im Karrieremodus wurde etwas überarbeitet, ist aber noch lange(!) nicht final.
2. Die Interface Strukturierung wurde etwas angepasst.

[b]Planung:[/b]

Ich überlege derzeit wie ich am besten gegnerische Kämpfer abspeichere. Bei meiner jetzigen Methode habe ich jeden Kämpfer eine ID zugewiesen. Mithilfe dieser ID erkennt das Spiel welcher Kämpfer als nächstes kommt und lädt seine Spezifischen Informationen. Das Problem dabei ist dass das Anmationsystem nicht mit geladen wird und somit gar nichts passiert. Sprich das ganze System braucht nochmal eine Überarbeitung. Falls jemand einen Lösungsvorschlag hat, immer her damit.

SimpleScript

SimpleScript

 

das leidige Thema KI

Viele Spiele heutzutage setzten auf immer komplizierte KI-Routinen um dem Spieler eine Virtuelle Realität immer glaubwürdiger vorzuspielen. So kam auch ich zum Punkt das mein Spiel (ein Kampfsportspiel/Manager), eine KI braucht die halbwegs plausibel funktioniert und den Spieler einigermaßen fordert.

Da ich mich leider vorher noch nie groß mit KI-Routinen und endlichen Automaten beschäftigt habe, stellte sich für mich die ganze Sache als großes Problem da. So kam ich auf die Idee eine Random KI zu schreiben, die zwar nicht sonderlich viel konnte, dafür aber immer wieder in der Lage war den Spieler zu überraschen.

[b][b]Das Prinzip:[/b][/b]

Die KI sollte sechs Fähigkeiten beherrschen, jeweils drei Angriffs- und Verteidigungsfähigkeit. Nun wurde mithilfe eines "Int" ein Zahlenbereich von 1 bis 6 gewürfelt, die jeweils für eine Fähigkeit stand, die dann Ausgeführt wurde. So wurde z.B wenn die "1" gewürfelt wurde ein Lowkick ausgeführt und wenn die "6" gewürfelt wurde eine Verteidigung ausgeführt.

Der Vorteil war das die KI mich immer wieder überrascht hat, was aber auch zum Hauptproblem geführt hat. Es gab nur eine einseitige Interaktion zwischen der KI und dem Spieler. So reagierte zwar der Spieler auf die jeweiligen Angriffe oder Verteidigungen der KI, aber die KI reagierte nicht auf die Auswahl des Spielers. So war es ein leichtes diese KI zu überlisten und ein Sieg nach dem anderen zu bekommen.

Um einen Kompromiss aus Zufall und Abhängigkeit zu bekommen, habe ich der KI und dem Spieler jeweils einen Ausdauerwert gegeben. So ist keiner von beiden in der Lage nur Angriffe auszuführen. Die KI beachtet bei ihren Entscheidungen aber nicht nur seine eigene Ausdauer, sondern auch die des Menschlichen Spielers. So sieht sie z.B ob der Gegner noch genug Ausdauer hat um zu Treten und passt daran ihre Entscheidungen an. Da mir aber der Randomfaktor auch gefallen hat, würfelt sie immer noch Zufällig aus welchen Angriff oder Verteidigung sie tut. So kann man auch nicht sagen dass die KI "Cheatet", da sie ja nichts vorhersieht.

In Zukunft will ich der KI noch mehr Bedienungen aneignen um sie noch Dynamischer zu machen, doch dafür muss ich erstmal mein Spielkonzept weiter ausbauen.

SimpleScript

SimpleScript

 

Nach zwei Wochen Arbeit!

Nun arbeite ich schon seit 14 Tagen und es läuft ganz schon gut. Die meiste zeit have ich an Scene wechsel gearbeitet.

[img]http://s29.postimg.org/9iwt9g9p3/fsg3101a1.jpg[/img]

Hier ist mal ein überblick von dem was ich vorher hatte:[list]
[*]GameEngine zur Darstellung von Charakteren und Ausrüstung.
[*]NetzwerkEngine zur Synchronisierung von Charakterenund Ausrüstung.
[/list]
Und jezt habe ich volgendes:[list]
[*]GameEngine erweitert mit scene wechsel system, wind aber nicht mehr zur Darstellung verwendet.
[*]HausEngine wird zur Darstellung von socialen aktivitäten verwendet.
[*]SceneEngine wird zur Darstellung von multiplayer aktivitäten verwendet.
[*]Zwei neue Scenen, eine für single und das andere für multiplayer aktivitäten.
[*]Charakter Interface.
[*]Storage Interface.
[*]World Map Iterface.
[*]Minimap Iterface.
[*]Character Gesundheit Interface.
[/list]
Auserdem habe ich mehere hilfsklassen geschrieben, wie z.b. ein Klass das eine Kopie eines Charakters überall herstellen kann.

Ich habe nicht so viel gearbeitet als ich gern hätte aber ich glaube es geht voran und das ist gut. Ich muss ein paar Wochen Auszeit nehmen weil ich was anderes machen muss, aber in weiteren drei Wochen hoffe ich eine spielbare Gameplay herzustellen.

Rasly

Rasly

 

Der Anfang?!

Ich will hier teilen was ich in meine Freizeit in Unity mache. Vielleicht findet ihr es interessant.
[img]http://fs5.directupload.net/images/160106/b79j5zbb.png[/img]
Hier ist aktuelles vorhaben. Die Idee ist ein minimales Multiplayer Spiel herzustellen, wo man herum laufen kann und verschiedene Sachen einsammeln.

Soweit funktioniert nur die synchronisation von Aussehen, Position und Items:
[media]https://www.youtube.com/watch?v=tc6ONDyG0PI[/media]
Das Ping würde absichtlich auf +200 ms erweitert um die belastung auf das test server zu minimieren. Mit dieser qualität kann auch jeder einen Server hosten mit mehreren tausenden Spielern gleichzeitig.

Rasly

Rasly

 

Blockade überwunden

So nachdem ich mich nun tagelang unbewusst abgelenkt habe, habe ich es heute endlich geschafft meine Berührungsängste zu überwinden.
Die kommen mir leider immer, wenn ich mich an neue Dinge ranwagen möchte, aber langsam erkenne ich das rechtzeitig und habe gelernt mich zusammenzureißen.
Fazit:
Auch wenn der Char noch ein Platzhalter ist, kann er nun laufen und sich drehen.
Die nächste Aufgabe wird dann sein, dass die Kamera sich nicht nur mit bewegt, sondern auch mit rotiert. Anschließend wird dann noch aus der Welt geschafft, dass man die Berge hochhüpfen kann. Da ich selbst in jedem Spiel versuche in jeden Winkel zu gelangen, stach mir das sofort ins Auge. Aber eins nach dem anderen....

Nun heißt es erstmal Abschied nehmen für eine Weile und volle Konzentration auf meine Abschlussprüfung...

Reggi

Reggi

 

Worum geht es in meinem Spiel?

Zunächst einmal will ich damit meine Zeichnungen aus der Grundschule in ein Spiel bringen.
Da ich zwar lange gezeichnet habe, aber nie wirklich eine Künstlerin geworden bin, wird die Grafik sehr simpel und niedlich gehalten.
Im Story schreiben bin ich nicht wirklich gut, aber es gibt so viele schöne Geschichten in der Welt. Am meisten fasziniert bin ich von grichischer Mythologie, weswegen ich mich auf viele der Sagen aus der Zeit stützen werde. Die Hauptgeschichte handelt von Kronos dem Vater der Titanen. In den einzelnen Gebieten wird man jeweils einen Gott treffen und kleine Geschichten erleben. Es gibt neben den heute bekanten Göttern aber noch antike Götter, die vor den Göttern des Olymp lebten, weswegen es darum geht zu verhindern, dass ein Portal zu dieser rauen Zeit geöffnet wird.
Gekämpft wird mit diversen Monstern, die man sammeln kann. Allerdings soll das Ganze nicht rundenbasiert sein, sondern in Echtzeit. Die Attribute vom Spieler und der Monster werden beim Kämpfen kombiniert, was wie ich finde sehr große Möglichkeiten ergibt. Ob der Spieler helfende Fähigkeiten hat, weiß ich noch nicht zu 100%, weil ich mir erstmal für das andere passende Formeln ausdenken muss und da sicher lange genug brauchen werde.
Es war zum Anfang als MMO gepant, aber nach einiger Recherche habe ich beschlossen es bei einem Single-Player RPG zu belassen. Ich habe weder Lust einen Server zu programmieren, noch einen zu bezahlen. Außerdem.... Wer kann schon eine große Masse an Spielern zufrieden stellen?
Ein Tauschsystem wäre zwar angebracht, beim Sammeln, aber vielleicht fällt mir dazu eine einfachere Lösung ein. Es ist ja genug Zeit bis dahin und wer weiß, was die Technik noch so bringt.

Es gibt nur eine Rasse mit drei Klassen, um es ein wenig einfacher zu halten. Berufe sind im Kopf, aber nicht in der Planung enthalten. An erster Stelle steht den Char durch die Welt zu geleiten und mich lieber auf die Quests zu konzentrieren. Auch den Umfang der Items werde ich möglichst klein halten. Ich habe keine Ahnung, ob es jemals fertig wird, aber ich arbeite mich Szene für Szene vor. Die erste Szene ist schon zu Papier gebracht und zumindest grob in Unity erstellt. Hier werde ich die meiste Arbeit haben, weil erstmal alles überhaupt erstellt werden muss.
Landschaften bauen und planen habe ich an einigen Testszenen schon geübt und nun gilt es sie mit Leben zu füllen.

Reggi

Reggi

 

Mein Vorgeschichte...

Hallo zusammen,

hier mal meine kleine Entwickler-Geschichte, die sich nun auch schon über vier Jahre hinzieht.
Angefangen hat alles mit dem simplen Wunschauch eine eigene Pokemon-Ado zu führen. Also habe ich mir angeguckt, wie das funktioniert, was die Menschen sich wünschen und es auf den anderen Seiten einfach nicht gibt. So entstanden also ein Haufen Pläne, wie ich es besser machen konnte. In den folgenen Wochen brachte ich mir also über das Internet alles, was ich zu HTML und CSS wissen musste bei. Ein paar Wochen später stand sie auch meine Ado. Nach ein wenig Werbung kamen die ersten Spieler und alles lief perfekt. Da ich keine Ahnung von PHP und Co hatte, habe ich alle Fortschritte direkt im Quelltext ändern müssen, die Kämpfe alle einzeln im Chat ausgewürfelt und so weiter. Nun saß ich also jeden Tag noch ca. 3 - 4 Stunden, um alle zufrieden zu stellen und musste aufgeben, weil ich den Massen an Spielern auf die Art nicht gewachsen war.
Die nächste Idee war einen Schritt weiter zu gehen und ein Spiel über PHP zu erstellen, indem dann meine Handarbeit automatisch gemacht wird. Also wieder ans Lernen gesetzt.
Abgesehen davon, dass richtig programmieren eine ganz andere Schiene als HTML ist, habe ich aber auch nach allem anderen gesucht, was ich so brauche. Z.B. eine Datenbank. Mich in SQL reinzufinden war relativ einfach, allerdings gibt es keinen kostenlosen Freespace, dessen Datenbanken man für Spiele nutzen darf, also schlief das ein wenig ein.
Je mehr ich aber lernte, desto größer wurden die Ziele, also dachte ich, dass wenn ich schon programmieren lerne, ich auch gleich eine richtige Sprache lernen kann. Also wieder monatelang diverse Tutorials und Bücher durchgearbeitet. Dabei bin ich allerdings umgestiegen und wollte nicht einfach nur Pokemon nachbauen, sondern meine damals selbst gezeichneten Monster verwenden. Daraus entstand dann zur Übung auch das erste kleine Minispiel in Java:
[url="http://legend-of-kronos.de/flieg.php"]http://legend-of-kronos.de/flieg.php[/url]

[img]http://legend-of-kronos.de/screen-neiko.jpg[/img]

Die Grafik ist ganz ok, allerdings fehlt da so einiges an Pfiff.

Vor ca 2 Jahren habe ich dann durch etliches auf mich einreden wegen der Performance der Sprache entschlossen mir eine Sprache zu suchen, die alles vereint, was ich möchte. Das war dann der endgültige Umstieg auf C#, weil es angeblich die Schnelligkeit von C++ mit der Pllattformunabhängigkeit von Java vereinen soll.
Dazu fing ich neben der Arbeit an, mit Hilfe eines Fernlehrgangs zu lernen, in dem ich so viel Einblick gewinnen konnte, dass ich sogar den BEruf gewechselt habe, weil ich nicht mehr aufhören konnte und am liebsten ganz schnell ganz viel lernen wollte, ohne ständig wegen der Arbeit rausgerissen zu werden. Nun habe ich also mein Hobby zum Beruf gemacht und kann das auf Arbeit gelernte bei meinem Spiel nutzen und die Erkenntnisse hier auf Arbeit nutzen.
Nun musste aber noch eine passende Engine her, weil es doch schon sehr anstrengend ist ausschließlich mit einem Editor ein Spiel zu programmieren und das ja sehr klein war.
Nach lagem Suchen und Vergleichen habe ich mich dann für Unity entschieden, weil es ncihts kostet und meine Sprache verwendet. Da es damit aber leider nicht getan ist, musste ich noch einmal ein paar Monate aufwenden. Mein erstes 3D-Programm kann nicht in das benötigte Format exportieren, also musste auch da etwas Neues her. Blender....
Ich steht da immer noch auf Kriegsfuß mit. Habe mittlerweile zwar ein Buch mit Erklärungen und Übungen, aber wirklich weit gekommen bin ich nicht, weil die Steuerung doch sehr gewöhnungsbedürftig ist. Außerdem gab es ein Buch über Unity, in dem endlich mal deutsche Anleitungen waren, sodass ich die API und die Zusammenhänge der Klassen besser nachvollziehen kann. Und weil man nicht einfach mal so ein tolles Spiel zaubert, auch noch ein Buch über Game-Design.
Viel erstellen konnte ich noch nicht, aber da ich gerade auf Arbeit viel über Planung, Prototypen und Dokumentation lerne, glaube ich, war das alles richtig so. Jetzt bin ich bereit ordentlich zu planen, schrittweise vorzugehen und mich nach und nach allen Problemen zu stellen...

Reggi

Reggi

 

UNet, Photon, nein ich gehe zu Lidgren (oder alternativ zur Bolt)

[size=6][font=courier new,courier,monospace][i]Keine Zeit mehr zu warten.[/i][/font][/size]

(Der Text wurde sehr spät. bzw früh mit Müdigkeit und Mühe geschrieben. Eventuell gefundene Fehler werden bald mit einem Update gefixt )

[font=courier new,courier,monospace][size=6][b]UNet[/b][/size][/font]
[font=courier new,courier,monospace][size=1]-[/size][/font]
[font=courier new,courier,monospace]Ich habe mich mit UNet auch intensiv beschäftigt. Ich muss leider sagen, dass es nicht wirklich meine Wünsche befriedigt. Ist egal, ob es jetzt seine Endphase nicht erreicht hat, aber wie sich das entwickelt zeigt schon, dass ich doch bei der alten Network bleiben muss, oder meine eigene brauche.[/font]

[font=courier new,courier,monospace]UNet ist toll, wenn man diesen NetworkManager benutzt und seinen zwei Szenen klatscht. Was aber, wenn man mehrere hat? Steht nicht viel dazu. [/font]
[font=courier new,courier,monospace]UNet bietet auch Cloudserver an, was total schön ist für Spiele die sehr dynamisch aufgebaut sind (So wie bei LoL, Dota 2: Spiel / Match suchen / finden -> Server wird bereitgestellt -> Spiel beenden -> Server wird für die nächsten Matches verfügbar gemacht)[/font]

[font=courier new,courier,monospace]Doch was ich bei UNet bemerkt habe ist, entweder du hast es sehr simple oder sehr schwer. Das hat sogar ein Unity-Crew gesagt in einer Demonstration. Entweder leicht haben oder sich Schwer machen. So ähnlich wurde es gesagt. Ich muss sagen ich finde es schwerer als altes Netzwerksystem.[/font]

[font=courier new,courier,monospace]Warum?[/font][list=1]
[*][font=courier new,courier,monospace][b]PlayerController[/b]: Ist eine Klasse aus Networking. PlayerController ist quasi sowas wie NetworkPlayer. Hat eine Variable PlayerController.[b]gameObject[/b]. Da steht, dass es einen Player GameObject gibt. Was wenn wir RTS spiele machen und viele Einheiten steuern? Wo ist dann Player GameObject.[/font]
[*][font=courier new,courier,monospace]NetworkServer und NetworkClient ist zu kompliziert gemacht. Man weiß gar nicht, wann man was braucht. Ich habe echt lange gebraucht bis ich das hinbekommen habe.

[b]NetworkServer.Listen(port)[/b] und [b]NetworkClient client = new NetworkClient()[/b]
brauchen Konfigurationen bevor sie laufen. Das finde ich ja noch ok, weil man da vieles einstellen kann, aber mache Dinge machen keinen Sinn. Für beiden kannst du die Maximale Connection einstellen. Wieso? [/font]
[*][font=courier new,courier,monospace]Viele Namen werden komisch verwendet, die nicht das Aussagen, was eigentlich tut. AddPlayer ist jetzt zum Beispiel bedeutet, dass man einer Verbindung ein GameObject zuweist (Quasi sagen dieser Spieler darf diesen GameObject kontrollieren).[/font]
[*][font=courier new,courier,monospace]Zu sehr auf Lobby Spiele fixiert.. Spieler müssen sogar "ready" sein um weiter zu kommen.[/font]
[*][font=courier new,courier,monospace][b]Command[/b] und [b]RpcClient[/b] sind auch nette Attributen.[/font]
[font=courier new,courier,monospace]Command werden von Clients (Zitat: aus Spielerobjekten) an andere Spielerobjekte gesendet. Daher Server als Spielerobjekt kriegt es eventuell auch. [/font]
[font=courier new,courier,monospace]Z.B: CmdDoFire().[/font]

[font=courier new,courier,monospace]RpcClient sendet von Server Objekten an Objekten von Clients[/font]
[font=courier new,courier,monospace]RpcKill()[/font]

[font=courier new,courier,monospace]Beide Attributen zwingen entweder Cmd oder Rpc als Anfangsbuchstaben für eine Funktion zu benutzen. Gar nicht toll!!. Sieht Später richtig unübersichtlich aus.[/font]

[font=courier new,courier,monospace]CmdDoFire()[/font]
[font=courier new,courier,monospace]RpcKill()[/font]

[font=courier new,courier,monospace]Hier muss man kein networkview.RPC oder sowas ausführen. Hier kann man Direkt den Methoden Namen schreiben und es ist automatisch an andere versendet.[/font]

[font=courier new,courier,monospace]Vielleicht merkt ihr das Problem[/font]
[font=courier new,courier,monospace]Command: Client an Clients & Server[/font]
[font=courier new,courier,monospace]RpcClient: Server an Clients[/font]

[font=courier new,courier,monospace]Wo ist von Server an Server und Clients.. gibst nicht. Und das doofe ist, dass die Methoden RpcKill bei sich selber nicht funktioniert. Man ist also gezwungen noch eine Funktion Kill() zu schreiben, wo nochmal die gleichen Sachen stehen. Das ganze zwei Mal machen nein Danke.[/font]
[*][font=courier new,courier,monospace]Ist schwer zu beschreiben. Ich hatte eine Klasse wo ein NetworkView Component war. dort hatte ich auch ein Script wo viele Funktionen gab. Sowas wie ChangeName, Chat. So allgemein Dinge halt. Ich musste den Component nur linken. Dann hatte ich sowas wie GlobalNetworkview.RPC("methode, All, bla, bla). Das geht noch so mit UNet. Allerdings ist das Problem bei Playerobjekten. Die Skripte müssen quasi das gleiche seine um etwas Synchron zu machen.

Stellt vor. Mein GlobalNetworkview wäre für alles. Da bekomme ich die Position, die Rotation von Objekten, Chat nachrichten alles einfach.

Jetzt ist das nicht mehr möglich[/font]
[/list]
[font=courier new,courier,monospace]Wie man sieht [size=5][b]zwingt[/b][/size] mich UNet zu Dingen, die ich gar nicht möchte und vor allem nicht brauche, wie mit PlayerObjekten zuweisen.[/font]


[font=courier new,courier,monospace][size=6][b]Photon Cloud[/b][/size][/font]
[font=courier new,courier,monospace][size=1]-[/size][/font]
[font=courier new,courier,monospace][size=4]Photon ist gut. Leider aber können die Pings manchmal hoch sein 80-120. Gute Pings sind im Vergleich 10-40.[/size][/font]
[font=courier new,courier,monospace][size=4]Daher passieren auch doofe Lags und Verzögerungen im Spiel die man bisschen umgehen kann ( "visuelles Faken" nenne ich das )[/size][/font]

[font=courier new,courier,monospace]Photon Cloud kostet, aber bis 20 concur kostenlos, 100 ConCur einmalig 90$ glaub ich war das. Geht noch so.[/font]

[font=courier new,courier,monospace]Das Problem ist, dass ich schon mal geschafft habe, dass ich 90.000 Spieler gleichzeitig bei meinem App sich aufgehalten haben. Wie soll man Später sowas bei Photon Cloud finanzieren. Damit mach ich nicht das Geld, womit ich das finanzieren könnte.[/font]

[font=courier new,courier,monospace]Außerdem gibst hier riesen fetten Nachteil. Kein serverseitiges Programmieren. Alles läuft über ein Spieler (als hätte er das Spiel gehostet).[/font]
[font=courier new,courier,monospace]Ich will, aber auch das können.[/font]



[font=courier new,courier,monospace][size=6][b]Bolt[/b][/size][/font]
[font=courier new,courier,monospace][size=1]-[/size][/font]
[font=courier new,courier,monospace]Bolt wird jetzt auch von Exitgames entwickelt (von Photon Leuten). Leider weiß ich noch nicht viel darüber, aber anscheinend wollen die Matchmaking mit einplanen, die durch ihren Photon Cloud System laufen wird. Ob es auch nen Auto-Matchmaking haben wird ist ne andere Sache. Genau aber das werde ich brauchen.[/font]
[font=courier new,courier,monospace]Da ich wenig Zeit habe brauche ich eine Alternative.[/font]
[font=courier new,courier,monospace]Bolt ist eine Erleichterung was Programmierung an geht, wenn es um Networking geht. Viele Lösungen wie zum Beispiel Animation Synchronisierung wird da angeboten. Außerdem wird alles über Unity programmiert . Konsole sowie Dedicated soll auch geben.[/font]


[font=courier new,courier,monospace][size=6][b]Unity Networking (altes)[/b][/size][/font]
[font=courier new,courier,monospace][size=1]-[/size][/font]
[font=courier new,courier,monospace]Die besten Erfahrungen habe ich damit gemacht. Bietet nicht viel an, aber dafür hat man andere brauchbaren Dinge. Hier kann man schön eigenen Server programmieren. Ein Beispiel zu meinem Spiel. Ich habe ein Server programmiert, wo man die Welt aber nicht sieht (denn es war nicht autoritativer Server), jedoch sollte irgendwo konstant ein Server laufen, wenn man das wollte. Zack programmiert fertig.[/font]

[font=courier new,courier,monospace]Bei einem anderen Beispiel war alles auf dem Server. Kollisionen usw wurden da auch überprüft. Das geht mit Bolt auch, aber nicht mit Photon Cloud und eventuell mit Lidgren.[/font]

[font=courier new,courier,monospace]Leider lässt angeblich die Perfomanz bei vielen Spielern nach. Habe ich bis jetzt erlebt.[/font]

[font=courier new,courier,monospace]Großer Nachteil für mich. Kein auto-matchmaking.[/font]
[font=courier new,courier,monospace]Wer mein Blog verfolgt hatte, hatte gesehen, dass ich das damit am Lösen war. Das Problem ist, dass es etwas machbar war, aber es wäre auf deutsch gesagt "scheiße" gelaufen. Sehr viel Fummelarbeit.[/font]

[font=courier new,courier,monospace][b]Lidgren[/b][/font]

[font=courier new,courier,monospace][size=1]-[/size][/font]
[font=courier new,courier,monospace]Lidgren ist kein Service wie bei UNet, Photon und Bolt, sondern man muss echt von Null Anfangen. Lidgren ist ein Allgemeines Networking für C# .Net.[/font]
[font=courier new,courier,monospace]Das heißt man müsste erst mal Unity dazu bringen Lidgren zu verstehen und Lidgren dazu bringen Unity zu verstehen (Plugins, Coding usw).[/font]

[font=courier new,courier,monospace]Ich habe damit angefangen muss sagen, dass es mir bis jetzt Spaß macht. Endlich mal, wo ich weiß, dass ich alles mir erstellen könnte, was ich so brauche. Denn ich fange von Null an und kann meine Wünsche mit einbauen.[/font]
[font=courier new,courier,monospace]Wird vielleicht länger dauern, schwer sein, aber, wenn ich überlege werde ich mehr Zeit sparen als auf UNet zu warten, als über Photon kosten auf zu regen.[/font]
[font=courier new,courier,monospace]Man auch mal richtigen dedicated Server mit ner Konsole machen [/font]

[font=courier new,courier,monospace][size=5][b]Und was genau mach ich da? [/b][/size][/font]
[font=courier new,courier,monospace]Ich sage mal so. Bin ungefähr bei 40 %. Ich habe nun Lidgren und Unity kennenlernen lassen. Ich kann Server erstellen und kommunizieren lassen. Bis jetzt waren das nur Texte, aber vieles wurde vorbereitet. die ganzen Standard Sachen wie Vectoren, Quaternion, int, float habe ich eingebaut.[/font]

[font=courier new,courier,monospace]Vieles fehlt noch. Derzeit arbeite an einem System, wo man auch zukünftig, andere mit Leichtigkeit hosten lassen kann.[/font]

[font=courier new,courier,monospace]Eventuell werde ich meinen eigenen Auto-Matchmaking schreiben. Wir gucken mal weiter.[/font]

[font=courier new,courier,monospace]Der Anfang[/font]
[font=courier new,courier,monospace][img]http://puu.sh/jRd9u/286bfeb13a.png[/img][/font]
[font=courier new,courier,monospace]Wie man auf dem Bild sieht hoste ich mit ner Konsole. Und da ist auch ein Message von einem Client angekommen als "Broadcast" mit "this is a test"[/font]
[font=courier new,courier,monospace]Und in der Unity Console sihet man, dass der Server auch was zurück geschrieben hat.[/font]

[font=courier new,courier,monospace]Und dazu hab ich ne eine DemoKlasse gemacht:[/font]
[font=courier new,courier,monospace][img]http://puu.sh/jRgV6/3abae0ae7a.png[/img][/font]

[font=courier new,courier,monospace]Wie man hier sieht habe ich sowas änhnliches wie beim UNet "ULGNetworkbehavior". Dort wird Global eine Verbindung aufgebaut, sei es als Server oder Client. Gott sei Dank geben bei dir den Peer connection zurück, wobei ich dann nicht NetServer oder NetClient benutzen muss. Würde einfach doppel zu viel Arbeit machen.[/font]

[font=courier new,courier,monospace]Wenn man Connect macht (Eventuell, werden diese namen verändert).[/font]
[font=courier new,courier,monospace][img]http://puu.sh/jRgTX/b498c72601.png[/img][/font]
[font=courier new,courier,monospace]Dummerweise kann nicht wirklich FailConnection auswendig machen. Da kriegt man auch einfach Disconnectereignis. Vielleicht schicke ich bei der Disconnect Event noch eine Meldung (Grund Paramater) hinterher und die Entwickler können selbst entscheiden, obwohl sie danach überprüfen. Mal sehen.[/font]

[font=courier new,courier,monospace]Derzeit sieht der Ordner so aus:[/font]
[font=courier new,courier,monospace][img]http://puu.sh/jRhhp/6e3854da43.png[/img][/font]


[font=courier new,courier,monospace]NetMessage ist einfach eine Hilfe um die Unity-Typen besser zu senden. Mit nem[/font]
[font=courier new,courier,monospace]Netbuffer.WriteVector3(Playerpos) kann man seine Position über das Netzwerk senden.[/font]
[font=courier new,courier,monospace]mit NetBuffer.ReadVector3() kriegt man dann die Position wieder.[/font]

[font=courier new,courier,monospace]Falls ihr ideen habt immer her damit.[/font]
[font=courier new,courier,monospace]Ich habe extra nen Trello erstellt. Eigentlich für mich persönlich, aber auch falls ihr Ideen habt.[/font]

[font=courier new,courier,monospace]Der Text wurde sehr spät. bzw früh mit Müdigkeit und Mühe geschrieben. Eventuel gefundene Fehler werden bald mit einem Update gefixt [/font]

MaZy

MaZy

 

Ãœberraschung: AnimationCurve.Evaluate ist schneller als Mathf.Lerp!

Da müsste ein Link auf das ursprüngliche Forum-Posting dabei stehen ... es ging um die Frage, wie man 0, 0.5, 1.0 linear auf 0.5, 0.75, 1.0 abbilden kann. Da kam natürlich dann recht flott auch Lerp, also lineare Interpolation, was für so etwas die naheliegendste Methode ist. Ich dachte mir, dass aber Artists sicher lieber AnimationCurves verwenden, weil das anschaulicher und flexibler ist.

Um mich nicht mit einem Tip zu blamieren, der potenziell der Performance schadet, machte ich die Bemerkung:

[quote name='jashan' timestamp='1436865245' post='76067']Die Flexibilität, die dir das bietet kostet natürlich ein wenig Performance ... da müsste man mal testen, was das konkret für einen Unterschied macht.[/quote]

... und dann wollte ich's aber genau wissen. Das Ergebnis hat mich dann am Ende doch etwas überrascht (deswegen als Blog-Posting):

[i]Wenig[/i] heisst in diesem Fall wirklich [u][b]wenig[/b][/u]: Bei 10000 Iterationen dauert es in beiden Fällen noch keine ganze Millisekunde. Bei 1 Mio Iterationen habe ich bei [b]Lerp 26 ms[/b], bei der [b]AnimationCurve 28ms[/b].

Allerdings braucht die AnimationCurve eine gewisse Zeit zur Initialisierung: [b]bei einem Schleifendurchlauf[/b] habe ich bei [b]AnimationCurve 1090 Ticks[/b], bei [b]Lerp 40 Ticks[/b]. Da könnte man jetzt sagen: "Lerp ist 27 Mal schneller, auf keinen Fall AnimationCurves verwenden". Aber das gilt halt nur, wenn man es nur ein einziges Mal verwendet (und 1 Tick ist 1/10000 ms, also wenn ich's richtig im Kopf habe 0.1 ns ... also ... praktisch "keine Zeit" ;-) ).

Bei der zweiten "Runde" mit einem Durchlauf, sind es dann 0 Ticks, 0 Ticks (manchmal auch 10 Ticks, sowohl bei Curve als auch bei Lerp, also kein wirklicher Unterschied messbar).

[b]Wow, man muss so etwas wirklich sauber testen und messen:[/b] In der "Praxis" ist es dann nämlich offenbar so, dass die [b]AnimationCurve sogar schneller ist, als Lerp![/b] Damit hätte ich jetzt nicht gerechnet: Beim ersten Durchlauf mit 1 Mio Iterationen ist nach wie vor Lerp minimal schneller (Lerp 26ms, AnimationCurve 28ms). Aber bei allen Wiederholungen haben wir dann Lerp immer noch 26ms, aber AnimationCurve 24ms.

Wieder mal was gelernt ;-) ... ich kann's mir nur so erklären, dass AnimationCurve irgendetwas schlau cachet oder irgendwie anders umgesetzt wird, so dass nach einem "warmup" die Berechnung extrem schnell ist (schneller als das praktisch triviale Lerp).

Und, um auch den letzten Rest meiner Neugier zu befriedigen: Auch wenn die Kurve deutlich komplexer ist (mit zig Kontrollpunkten) hat das nur minimale Auswirkungen auf die Performance, was allerdings die Caching-Theorie (die sowieso auf Strohbeinen stand) widerlegt, weil sonst der erste Durchlauf deutlich länger dauern müsste.

[CODE]
using UnityEngine;

public class SimpleCurve : MonoBehaviour {

public AnimationCurve curve = new AnimationCurve();

public int counter = 1000000;

public float Evaluate(float t) {
return curve.Evaluate(t);
}

public void Awake() {
for (int i=0; i < 10; i++) {
TestA();
TestB();
}
}

private void TestA() {
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch ();
sw.Start();
float result = 0;
for (float i=0; i < counter; i++) {
result = curve.Evaluate(i / counter);
}
sw.Stop();
Debug.LogFormat("Using curve for {3} iterations took: {0} ms, {1} ticks, result was: {2}",
sw.ElapsedMilliseconds, sw.ElapsedTicks, result, counter);
}

private void TestB() {
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch ();
sw.Start();
float result = 0;
for (float i=0; i < counter; i++) {
result = Mathf.Lerp(0.5F, 1.0F, i / counter);
}
sw.Stop();
Debug.LogFormat("Using lerp for {3} iterations took: {0} ms, {1} ticks, result was: {2}",
sw.ElapsedMilliseconds, sw.ElapsedTicks, result, counter);
}
}
[/CODE]


Source: [url="http://forum.unity-community.de/topic/10012-mathematische-anfangerfrage/page__view__findpost__p__76073"]Mathematische Anfängerfrage[/url]

jashan

jashan

 

Easy-Doings: Debug.Log mal anders

[size=6][b]Worum geht es hier?[/b][/size]
Ihr benutzt wahrscheinlich wie ich immer wieder Debug.Log(""). Manchmal verwendet man einfach zu viele. Man vergisst auch manchmal sie zu entfernen oder man ist einfach viel zu faul dafür.
Daher kann man ja mal die Funktion etwas verbessern. So kann man mit einer Boolean die ganzen Logs ausschalten lassen. Ist praktisch, um die ganzen Debug.logs nicht zu löschen, falls man ja immer noch später Debuggen will.

Daher mal nen kleinen Code was ich mir geschrieben habe.

[CODE]
using UnityEngine;

public static class Logger
{
static bool ShowDebug = true;
public static void Print(string str)
{
if (!ShowDebug)
return;
Debug.Log(str);
}
}
[/CODE]

So, ich habe die Klasse Logger genannt. Wollte es simpel haben und auch mich schnell daran erinnern können, was Logger macht oder wie es heißt. Kommt von Log, loggen, daher kann man das kaum vergessen. Wie man hier sieht ist es eine statische Funktion und hat kein Monobehavior. Daher kann man diesen Script nicht als Component benutzen.

Die Klasse hat die ne static boolean und ne public static Funktion "Print", wo ihr dann den Log-Text als String übergeben könnt, welches wiederum zur Debug.Log() Funktion geht und dort ausgeführt wird. Jedoch wird mit boolean vorher überprüft ob wir Debug anzeigen wollen oder nicht.

Einfach auf falls, weils ihr einen Build starten wollt.

Nun könnte man eventuell das erweitern und Bespiel sowas wie Config.ShowDebug machen, aber das ist euch überlassen. . Sowas ist nützlich, falls ihr wollt, dass die Spieler eventuell Logs aktivieren können. Denn Unity erstellt immer eine Logdatei, wo alle Debug abgespeichert sind. Das kann uns mal die Entwicklung erleichtern.

[size=5][b]Wie wendet man das nun an?[/b][/size]
[CODE]
void Start()
{
Logger.Print("Start ausgeführt");
}
[/CODE]

Ist nun ShowDebug auf falls, so sollte nichts in der Konsole angezeigt werden.
Yow das wars

MaZy

MaZy

 

Auto-Matchmaking #4: Serverstart erleichtern.

[font=lucida sans unicode,lucida grande,sans-serif]Hallo Leute,

diesmal habe ich nicht viel machen können aus Zeitdruck.
Ich habe ja in der letzten Teil gesagt, dass ich zwei Projekte in einem Unity-Projekt mache. Den "Cloudserver" bzw "Gameserver" und den "Masterserver". Dazu hab ich logischerweise zwei Szenen erstellt wo jeweils die GameObjects mit Scripts darauf warten gestartet zu werden.

Das Problem wäre hier, dass ich beim Compilen immer die erste Szene verändern müsste, damit die Szene beim Start geladen wird. Außerdem hätte ich dann zwei verschiedene "Spiele" bzw. Server. Das mochte ich gar nicht.

Daher habe ich 3 Szenen erstellt wo ich quasi am Anfang was auswählen KÖNNTE. Jedoch gefiel mir dieser Gedanke auch nicht. Warum? Unity hat zum Beispiel "-background" als Commandline implementiert. Damit kann eine Unity-Instanz angeblich ohne 3D oberfläche gestartet werden. Das ist sehr gut als Serverinstanz benutzbar. Commandlines sind die man hinter jeder Ausführung anhängen kann. Damit kann man quasi beim Programmstart ein Befehl mit geben. Meistens macht das per Verknüpfung erstellen und in der Eigenschaft einstellen, aber man kann auch eine BATCH Datei erstellen oder in Linux eine Shell Datei erstellen und so die Parameter übergeben. Und genau diesen Background will ich später benutzen. Wieso soll das Spiel ganze Zeit geöffnet sein, wobei es so oder so nur als Server dient und sonst nichts?

Daher habe ich an einer Lösung gedacht. Eigene Commandlines erstellen. Habe dazu zwei batch Dateien erstellt.
Die in der selben Ordner wie die .exe Datei ist. So sieht das dann aus.

[CODE]Dateiname: start_gameserver.bat
Inhalt: Matchmaking.exe -port 23000 -startserver

Dateiname: start_matchmaker_server.bat
Inhalt: Matchmaking.exe -port 24130 -matchmakingserver[/CODE][/font]
[font=lucida sans unicode,lucida grande,sans-serif]Hier fehlt noch -background. Das habe ich erst mal weggelassen.[/font]
[font=lucida sans unicode,lucida grande,sans-serif]Demonstration mit Video
Klickt dazu auf das Bild.

[url="http://puu.sh/iB2jw/99d30cedf9.mp4"][img]http://puu.sh/iB2F0/2e33a78387.png[/img][/url][/font]

[font=lucida sans unicode,lucida grande,sans-serif]Der Vorteil hierbei ist, dass der Gameserver mit verschiedenen Ports gestartet werden kann, wenn mehrere Matches gibt.[/font]

[font=lucida sans unicode,lucida grande,sans-serif]Falls ihr das Video gesehen habt:
Die Konsole und das Spiel bleibt auch für immer geöffnet. Jetzt könnte man hinten und noch -background anhängen und schon wäre nur die Konsole da. Leider finde ich noch keine "gute" Lösung dafür, dass man per Konsole ins Spiel Befehle senden kann. Das wird aber erst mal auch nicht beachtet.[/font]


[font=lucida sans unicode,lucida grande,sans-serif][b]Part #5[/b] wird wohl der Gameserver und die Clients sein. Der Server macht nichts außer auf Connection hören. Wir wollen nun Parallel zu Client programmieren, dass sie miteinander kommunizieren können.[/font]

[font=lucida sans unicode,lucida grande,sans-serif]Natürlich wird der Teil nicht wie bei Photon sein. Photon hat eine universelle Lösung. Mein Vorhaben ist aber nur speziell für mich bzw. für ein Spiel gedacht. Entweder übernimmt man das beim nächsten Spiel oder man schreibt neue Logiken auf. (Ist doch fast jedes mal so, wenn man auch ein Spiel neu beginnt ). Der Vorteil trotzdem dabei ist, dass wir unsere eigene logischen Bedingungen auf dem Server ausführen können. Beispiel Punkte vergeben. Yay.[/font]

MaZy

MaZy

 

Auto-Matchmaking #3: Konzept und wie weit ich bin.

In diesem Blog geht es darum wie ich meinen eigenen Auto-Matchmaking-system schreibe (bin schon viel weiter). Hallo endlich kommen wir zum Konzept. Ihr fragt euch schon wie ich mir das ganze machen möchte bzw. bereits gemacht habe. Wie das wohl mit Unity Networking gehen soll? Vergisst nicht. Es geht mir ausschließlich um Auto-Matchmaking-System. [Erst mal was ich bis jetzt habe.
-
Ich habe einen Masterserver mit einer Szene, wo man die verbundenen Spieler sehen kann. Außerdem sollte der Server noch anzeigen, was sie machen, jedoch hab ich dort ein Problem. Unity Networking kann nicht mit zwei Servern verbunden werden. Masterserver enthält außerdem eine Playerklasse, wo nochmal die wichtigen Informationen enthalten sind. BILD DAZU http://i.imgur.com/Bj9VYPP.png In dem selben Projekt habe ich eine weitere Szene. Dort hab ich noch ein Server programmiert, welches als Gameserver benutzt wird. Wird so ähnlich wie Photon aufgebaut. Einfach nur Daten hin und her schicken. Das wars so weit. Vielleicht habt ihr bereits verstanden, was ich vorhabe. Das Konzept ist einfach. Ich brauche ein Gameserver, wo die Spieler beitreten und spielen und ein Masterserver, der die Spieler dazu verhelfen soll auf diese Gameserver zu kommen. Also ein Auto-Matchmaking.
Also wird ein System auf dem Masterserver entwickelt, wo Beispiel die Spieler auf ein Button klicken, wo dann dieser Spieler eine RPCall zum Serverschickt, dass er suchen möchte. Dazu schickt der Masterserver zurück "ok du kannst suchen". Wie gesagt. Autoritativer Server "beste" für mich . Auf jeden Fall läuft die Suche auf dem Masterserver. Darum brauchen wir ein Array und noch besser "List" oder so, um die Spieler in einer Queue zu setzen und zusammen zu picken. Da habe ich noch keine Erfahrung, aber ungefähr habe ich die genannte Vorstellung. Jetzt kommt noch ein Teil
Der Masterserver muss wissen, ob ein Gameserver gestartet wurde, läuft, oder beendet wurde. Denn er soll ja schließlich wissen, wann er nochmal diesen Server benutzen kann.
Der Gameserver läuft in meinem Beispiel auf dem selben IP, aber die PORTS variieren. Geht auch anders nicht . Dazu hab ich was simples gedacht. Der Gameserver startet und verbindet sich mit dem Master und sagt "Ich bin startklar, mein Prozess ID". Die ID brauch ich damit der Masterserver weiß, ob der Server abgestürzt ist. Wenn ja ist das Spiel automatisch vorbei und zählt nicht.
Danach wird die Verbindung zum Masterserver wieder getrennt und stellt sich als Server mit Network.InitializeServer() bereit. Ansonsten am Ende verbinden wir uns nochmal mit dem Masterserver und schicken, dass das Spiel erfolgreich beendet wurde. Das Problem könnte hier allerdings kleine Delays sein. Was wenn der Serverstart also Network.InitializeServer() plötzlich 10 Sekunden dauert, weil es gerade Performanz-Probleme gibt? Weiß nicht, ob das überhaupt möglich ist. So mehr fällt mir gerade nicht ein. Im nächsten Teil zeige ich die Fortschritte

MaZy

MaZy

 

Auto-Matchmaking #2: Natürlich selber schreiben! Aber mit Unity Networking?

[size=5][font=lucida sans unicode,lucida grande,sans-serif]In diesem Blog geht es darum wie ich meinen eigenen Auto-Matchmaking-system schreibe (bin schon viel weiter).[/font][/size]

[font=lucida sans unicode,lucida grande,sans-serif]Hallo,

so da ich unbedingt Fan von Unity Networking bin habe ich auch damit angefangen. Viele finden den Unity Networking "schlecht", aber es liegt teilweise an der Programmierung. Ich habe ca. 90 Spieler auf einem Server simuliert und da fing erst an leicht zu ruckeln. Aber es war klar. Denn es war eine Loop schleife mit ein paar Berechnungen. Wie dem auch sei.


[size=5]Es gibt jede Menge tricks wie man ein Server optimieren kann[/size]

Ich bin zum Beispiel bin Fan von RPC. Mit RPC habe ich die ideale Möglichkeit auszusuchen, wohin meine Daten senden möchte. Ich baue auch dazu meisten einen autoritativer Server.
Das Bild soll zeigen wie ich das meine:

[img]http://www.gabrielgambetta.com/img/fpm1-01.png[/img]

Quelle: [url="http://www.gabrielgambetta.com/fpm1.html"]http://www.gabrielga...a.com/fpm1.html[/url]

Wir ihr sieht sendet ihr nur, dass ihr euch bewegen WOLLT und schickt quasi ein Request zum Server. Der Server sagt danach ja du hast dich erfolgreich bewegen können bzw. darfst dich dahin bewegen und dann bewegt ihr euch dahin. In anderen Worten. Der Server weißt immer besser ob du das kannst.

Der Vorteil ist. Du brauchst nicht immer deine Position senden sondern sagst einmalig wohin du bewegst. Es kann einfach eine Taste W sein für vorne. Ein riesen vorteil ist auch hier, dass du hier kein Lerp oder sonst was brauchst, da man sich exakt gleich bewegt. Aus Sicherheitsgründen überprüft man trotzdem, ob man sich doch zu weit bewegt hat oder nicht. Dann setzt man quasi das Objekt zu der richtigen Position. [/font]
[font=lucida sans unicode,lucida grande,sans-serif]Noch habe ich dazu keine bessere Idee gefunden.

Weiter mit RPC. Mit den Verfahren könnte ich quasi dann per Server steuern wohin, welche Daten geschickt werden soll. Wenn sich jetzt zwei Spieler von ein ander entfernen, sagen wir mall 500 Meter und sie brauchen dann nichts mehr von einander wissen, dann braucht der Server dann das auch nicht schicken. Schon spart man Messages und es wird auch weniger Laggs verursacht . [/font]Zusätzlich gibt es auch in RPC Gruppen, wo man nochmal etwas unterteilen kann.

[font=lucida sans unicode,lucida grande,sans-serif]Mit OnNetworkViewSerialize wird nicht so klappen, da man Daten nicht auslassen kann. Falls ich mich irre dann korrigiert mich [/font]

[b]Mal kleinen Hinweis[/b]: Ich vermute, dass viele Spiele aus so ähnliches Gründen in Multiplayer laggen. Z.B. Arma 3, Space Engineers. Wobei zu Arma 3 nicht viel sagen kann, da ich lange nicht mehr anprobiert habe, aber Space Engineers war am Anfang nicht toll in Multiplayer zu spielen. Irgendwann update zu update wurde das so gut optimiert, dass es fast laggfrei spielbar war. Nun stellt euch vor das Ganze wäre in Unity Networking. Natürlich würden am Anfang die Spieler sagen "ja Unity halt" oder die Entwickler "Ja Unity Networking halt". Aber, wenn man es optimiert läuft es halt . Deswegen sucht man schnell alternativen.
Dummerweise wird in Tutorials-Videos gesagt, dass es Unity Networking schlecht sei, oder peer2peer (was nicht stimmt!), MMO ist unmöglich. Doch klar ist es möglich.

[font=lucida sans unicode,lucida grande,sans-serif]Im nächsten Blogeintrag geht es um das Konzept.[/font]

MaZy

MaZy

 

Auto-Matchmaking #1: Photon PUN oder selber ähnliches schreiben?

[font=lucida sans unicode,lucida grande,sans-serif][size=5]In diesem Blog geht es darum wie ich meinen eigenen Auto-Matchmaking-system schreibe (bin schon viel weiter).[/size][/font]

[font=lucida sans unicode,lucida grande,sans-serif]Hallo

viele kennen das von euch. Ihr wollt ein Spiel programmieren und möglichst in Multiplayer, damit die Interesse bei Spielern größer ist oder einfach damit ihr mit euren Freunden euer Spiel zocken könnt. Dabei fragt ihr euch NOCH NICHT, welches Networking-System ihr dafür benutzen wollt, bis ihr ein Tutorial sieht, dass euch zeigt wie "toll" Photon PUN doch so ist.

Photon von exitgames.com ist wirklich toll. Es nimmt viel Arbeit ab und was am meisten Reiz ist, dass man überhaupt keinen Server braucht, da Photon PUN über ihren eigenen Cloudserver läuft. Das heißt, ihr erstellt einen "Room" und gleichzeitig, wenn nötig ist, wird bei Photon Cloudserver aktiviert/deaktiviert. Zusätzlich dazu freut sich der Entwickler, dass man kaum auf der Serverseite programmieren muss. Denn sie kümmern sich nur darum, was der Spieler machen KANN. Vergessen hierbei wird, was der Spieler noch machen KÖNNTE. Dazu gleich mehr.

Auf jeden Fall bietet Photon sehr viele Dinge. Auto-Matchmaking, Lobbies & Räume, Kleines Freundesliste-System, das sogar mit anderen Platformen verbunden werden kann z.B.: Facebook.
Damit lässt sich schnell schöne Dinge entwickeln.

Das ganze hat zwei riesen Nachteile, wobei eins davon relativ ist.
Erstens: Man kann unmöglich Serverseitig programmieren. Irgendein Spieler kann Master werden und der kann die Serverseitige Logik übernehmen, jedoch finde ich, dass man da cheaten könnte. Ist nicht ganz sicher. Dabei kommen dann zusätzlich viele andere Nachteile. Keine Serverseitige Mods. Keine Configdateien, Keine Dedicated bzw. Listenserver für die Spieler. Sie können also keine Server erstellen wie bei den Spielen wie: Counter-Strike, Rust, Garry's Mod, Arma 2 - 3, DayZ usw. Wenn man diese Spiele anguckt, hat man da die Freiheiten. Keine Server von Spielern wo sie selbst Administrieren können, Spieler bannen können usw. Oder vielleicht auch Modden.

Warum ist das nicht möglich? Photon PUN bietet Cloudserver an. Diese Cloudserver sind quasi wie ein Telefonanbieter. Nehmen wir mal an Telekom ist ein Cloudserver. Ist nur ein Beispiel. Willst du mit jemanden telefonieren, geht deine Leitung über das Telekom und wirst dann zum Ziel weitergeleitet.
So kann man sich Photon's Cloudserver vorstellen. Jeder verbindet sich mit dem Cloudserver und tauscht einfach die Daten aus, was sie hin und her schicken. Mit einem selbst erstellen Server könnte man viele andere Dinge machen. Beispiel, wer überhaupt verbinden darf. Config-Dateien erstellen und Admins zuweisen. Oder noch Komplexer: Dinge validieren, ob sie überhaupt gültig sind. Beispiel ob der Spiele wirklich Gold gedroppt hat und aufheben darf. In anderen Worten mehr Sachen programmieren, wo der Server mehr zu tun als, als nur einfach Daten empfangen und schicken.

Zweitens: Es kostet Geld je nach wie viel Slot ihr braucht.
Bis 20 CCU kostenlos.
100 CCU | 40k Monthly Actives | CCU Burst not included | $95 einmalig

500 CCU | 200k Monthly Actives | CCU Burst is included | $950 / jährlich oder $95 /monatlich
10,000 CCU | 4,000k Monthly Actives CCU Burst is included | $18,500 /jährlich oder $1,850 /monatlich

Kurz erläutern. CCU soll einfach heißen gleichzeitig verbundene Spieler. Man spricht extra von CCU da man davon ausgeht, dass es NIEMALS alle Spiele die dein Spiel haben gleichzeitig online sind. Nehmen wir das obrige Beispiel mit 100 CCU. Dort steht, wenn man 40.000 Spieler im Monat hat, so werden geschätzt 100 Leute gleichzeitig online sein. Natürlich kann es stark variieren, ob das Spiel neu draußen ist oder keiner spielen möchte. Tageszeiten... nachts weniger online als am Tag usw.
Ich finde es macht ein wenig sind aber habe jedoch bedenken.

Ich schreibe gerne Apps und kostenlose Apps, wenn sie gut sind, werden auch sehr gerne runter geladen. Ich habe eine App, die 900.000 mal runtergeladen wurde und am Tag ca 50.000 - 90.000 Leute online gehen. Davon sind, aber nicht 200-300 gleichzeitig online sondern viel mehr.

Jetzt zurück zu Kosten. Diese Kosten sind nicht hoch und ist denke ich mal bezahlbar. Jedoch nicht für Leute die fast gar nichts dabei verdienen. Für die sind es teuer. Da reicht wohl die einmalige Bezahlung.


Ich habe mir daher die Frage gestellt, warum nicht eigenen schreiben?

Mehr dazu in Teil #2 [/font]

MaZy

MaZy

 

Unity 5.1 ist jetzt released - mit VR und Multiplayer Unterstützung

Ich hatte mich schon etwas gewundert, dass es keinen weiteren Release Candidate mehr gab - das lag wohl daran, dass sie schon den Release vorbereitet haben:

Download here: [url="http://unity3d.com/get-unity/update"]http://unity3d.com/get-unity/update[/url]

Ich denke die wichtigsten neuen Features dürften wohl native VR-Unterstützung sein, sowie das neue Unity Multiplayer Networking (ehemals UNET). Ansonsten Cleanup und Bugfixes ... ist natürlich auch fein :-)

[url="http://unity-buch.de/blog/ArticleID/40/Unity-5-1-released-Mit-VR-und-Multiplayer-Unterstützung"]Artikel zu dem Release auf Deutsch auf der Webseite zu Das Unity-Buch[/url]

Source: [url="http://forum.unity-community.de/topic/9839-unity-51-ist-jetzt-released-mit-vr-und-multiplayer-unterstutzung/page__view__findpost__p__74606"]Unity 5.1 ist jetzt released - mit VR und Multiplayer Unterstützung[/url]

jashan

jashan

×