Jump to content
Unity Insider Forum

runner78

Members
  • Content count

    101
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by runner78

  1. runner78

    Spieleranzahl auf Server

    Die HLAPI von UNet wird zukünftig als externes Paket ausgelagert, und hat bis 2021 Support, aber keine neue Features. Die LLAPI wird im laufe des 2019.x Zyklus von Unity entfernt, sobald die neue API stabil genug ist. Eventuell gibt es einen Wrapper für die HLAPI. Die HLAPI wird nicht ersetzt, stattdessen wird es eine Reihe von Paketen geben.
  2. Bei WoW wird glaube ich beides verwendet. Bei TCP wird sichergestellt, dass Daten-Pakete in der richtigen Reihe auch wirklich ankommen. Das beuteutet auch, das der Server warten muss bis der Empfänger zurückgibt das das Paket gekommen ist, und im schlimmsten Fall das Paket nochmals senden, wenn es verloren geht. Dadurch entsteht eine nicht unerhebliche Zeitverzögerung. TCP hat auch einen größeren Header und braucht deshalb auch mehr Bandbreite. UDP schickt einfach die Pakete ohne sicherzustellen ob und in welcher Reihenfolge die Pakete ankommen. Z.B. bei Spielerpositionen kann es auch mal egal sein wenn mal ein Paket verloren geht. Während bei TCP der Server das mittlerweile veraltete Paket nochmal schicken muss, hat bei bei UDP der Client vermutlich bereite aktuellere Pakete erhalten. TCP macht dann Sinn wenn Performance keine Rolle spielt, und man Sicher gehen will, dass die Daten auch ankommen, z.B beim Senden von Benutzereingaben zum Server. Beim FPS Example wird übrigens beim Senden von Benutzerangaben auch die Versionsummer des letzten empfangenen Paketes mitgesendet, somit weiß der Server wann der User eine Aktion ausgeführt hat und passt die Server Simulation Rückwirkend an.
  3. UNET verwendet UDP, nicht TCP (bei Multiplayer üblich). UDP ist schneller, allerdings kann es zu Packetverlusten kommen. Wenn ich mich richtig erinnere, wird beim FPS example jedem Paket eine Versionsnummer mitgesendet.
  4. runner78

    Performance ruckelt

    Stimmt nicht, Formate wie DXT liegen auch komprimiert im Grafikspeicher, genau dafür sind solche Formate gemacht.
  5. runner78

    Datenbankkommunikation

    Das liegt dann daran, das dein Input nur funktioniert wenn er durch 3 Teilbar ist.
  6. runner78

    Datenbankkommunikation

    Wenn du 2 Gruppen von 3 Elementen in dem Array hast, dann hat das Array einen index range von 0 - 5 Bei ersten Durchlauf wird Index 0, 1 und 2 als Daten für den Score verwendet. dann nach wird i auf 2 gesetzt. 2 ist kleiner als die Länge des arrays, also nächster Durchlauf: Bei zweitem Durchlauf wird Index 2, 3 und 4 als Daten für den Score verwendet. dann nach wird i auf 4 gesetzt. 4 ist kleiner als die Länge des arrays, also nächster Durchlauf: Bei dritten Durchlauf wird Index 4, 5 und 6 als Daten für den Score verwendet. 6 ist aber außerhalb des ranges des arrays und du bekommst einen Fehler. Versuch mal: // Daten-Objekte füllen void FillHighscore(string[] input) { highscore.Clear(); int length = input.Length; for (int i = 0; i < length; i+=3) { Score score = new Score(); score.email = input[i]; score.PlayerName = input[i+1]; score.Points = input[i+2]; highscore.Add(score); } }
  7. runner78

    Datenbankabfrage mit Php

    Um genau zu sein vor 5 Jahren mit PHP 5.5.0 als veraltet markiert und vor 3 Jahren mit PHP 7.0.0 entfernt. Man sollte beim googlen vielleicht auch auf das Alter diverser Anleitungen schauen. Ich würde aber generell zum Gebrauch von etablierten Bibliotheken raten, wie doctrine https://www.doctrine-project.org/
  8. runner78

    Codeüberprüfung und Feedback gesucht!

    "Einbrüche" ist relativ, ich habe eine schnelle CPU und SSD, da hatte ich fast konstant bei 70-80 fps. Es gab aber manchmal spikes mit 15 fps. Bei schächeren PCs oder verallem Mobile, da könnte die Framerate etwas problematischer werden. Mit Visual Studio kannst du auch Teile des code automatisch in neue Methoden auslagern. Sie dir auch an ob die wiederholende Code-Bereiche hast, dann kann man dann gut ein eine einzelne Methode zusammenfassen. Ich kenne mich mit UNET jetzt nicht aus, aber ich habe gesehen du benutzt ja Network Identity, das ist aber Teil der high-level API und hat mit low level nichts zu tun. So ein Kartenspiel könnte man auch sehr gut mit ECS/C# Jobs und dem neuen Unity Networking performant realisieren.
  9. Für alle die in Unity Projekten noch mit JavaScript oder Boo Programmieren, habe erst heute gesehen, dass es in der letzten Beta für 2018.3 eine weitreichende Änderung gab: Es gibt hier ja immer wieder Neulinge, die hier mit JavaScript ankommen (über alte Tutorials oder Kursen)
  10. runner78

    Codeüberprüfung und Feedback gesucht!

    Wie gesagt, netwoking kenne ich mich nicht so aus, allerdings würde ich hier einen anderen Ansatz wählen. Trenne Die Darstellung und die Spiellogik. Die Animationen sind bei allen die selbe, das musst du nicht per Netzwerk synchronisieren. Ein Ansatz wäre (cheating sicherer): Nur der Server kennt alle Karten Ein Spieler Client kennt nur die Karten die aufgedeckt sind. Ein Client sagt dem Server den nächsten Zug Der Server sagt dem anderen Client das Ergebnis. Animationen und visuelle Positionen der Karten simulieren die Clients lokal. Änderungen gehen beim beenden verloren, sie eigenen sich daher für Einstellungen die du im Editor machst, oder auch um Daten zwischen verschiedenen Gameobjects/Komponenten auszutauschen.
  11. runner78

    Performance in Unity3D

    Für Leute die sich weniger mit der Zukunft von Unity beschäftigen mal ein kleines update zur Performance von Unity die zukünftig mit ECS Möglich ist. Zur Unite LA 2018 hat Unity eine Demo Project Vorgestellt namens Megacity, die Eckdaten der Scene: 4.500.000 Mesh renderer 100.000 individuelle Audioquellen 5.000 dynamische Fahrzeuge Constant 60 fps https://www.youtube.com/watch?v=j4rWfPyf-hk
  12. runner78

    Der Jammer-Thread

    Fast eine Jahr Später: Mit Unity 2018.3 kommt schon C# 7.3
  13. runner78

    Codeüberprüfung und Feedback gesucht!

    Ich bekomme übrigens bei spielen die Meldung beim Zug der AI: Zum Networking und Mobile muss jemand anderes was dazu sage, da habe ich keine Erfahrung darin. Das ist nicht unsinnig, und der Koordinationsaufwand wird irgendwann auf diese Weise sogar größer. Wenn das Spiel wächst und du mehr Funktionen einbaust, wird es immer unübersichtlicher und wenn du mal nach einigen Wochen Abstinenz mal wieder in der Code zurück kehrst, dann kennst du dich selbst nicht mehr aus. Die Ausrede "es ist nur ein kleine Projekt" zählt nicht, da man sich sonst nie einen sauberen Programmierstil angewöhnt. Pack bitter generell nicht mehrere Klassen in eine Datei. Eine Datei pro Klasse. Es gibt Order und Namespaces. Ich habe momentan nicht die Zeit den genau den Workflow deines Spiele zu analysieren, aber wenn du variablen über Find zuweisen musst, dann hast du schon ein Konzeptionelles Problem. Mit ScriptableObject kannst du dir als Asset im Asset-Ordner erstellen sie wie Prefabs einer Komponente zuweisen. Du könntest dir deine Karten hier definieren, anstatt Hardgecodet. So könnest du auch Variationen mit anderen Motiven erstellen. Im Spiel "Tales of Berseria" gibt es ein Hanafuda Minispiel mit Charakteren auf vorherigen Spiele der Reihe als Motive.
  14. runner78

    Codeüberprüfung und Feedback gesucht!

    Mich hat es ein wenig gewundert, dass du die alte OnGUI verwendest und nicht die neuere Unity UI. 2019 kommt mit UIElements auch schon die nächste UI auf XML und CSS basis. Gerade wenn eine Funktion sehr umfangreich ist, ist es besser sie aufzuteilen, oft wiederholen sich bestimmte Codeblöcke die man so wiederverwenden kann und man hat dann auch wenig code. Die Settings könnte man als ScriptableObject anlegen. Es spricht nichts gegen Statische Helfer-Klassen, aber man sollte sie der Übersichtlichkeit Logisch strukturieren, siehe die Math Klasse aus .NET (Mathf float variante in Unity) Spezifische Sachen haben aber wiederum nichts in einer Global statische klasse zu suchen wie z.B Global.HoverCard, pack die Logik dort hin wo sie hin gehört. Zur Performance kann ich momentan nicht viel sagen, aber ich glaube hier gibt es noch sehr viel Spielraum nach oben. Du solltest z.B. alle "GameObject.Find()" aus der Update() rausbekommen. Da solltest du mal dein Spiel mit dem Profiler anschauen. Siehe https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members#names-of-fields ECS steht für Entity Component System, und ist eine neue Art um Gamecode in Unity zu programmieren. Befindet sich aber noch in Preview.
  15. runner78

    Codeüberprüfung und Feedback gesucht!

    Ich habe nur mal kurz reingeschaut, was mir aber aufgefallen ist bezüglich Code Qualität: Die Scripts sind zum Teil unübersichtlich. Vor allem die AI.cs. Die Update() ist über 400 Zeilen lang, hier würde das aufsplitten in mehrere Methoden alles etwas übersichtlicher machen und das unschöne goto wäre nicht nötig. Die Global ist ein Sammelsurium aus Settings und anderen Statischen Funktionen. Eine logische Trennung wäre grundsätzlich anbracht, habe keine Angst mehrere Dateien Anzulegen. Keine einheitliche Namensgebung von Feldern, mal camelCase, mal PascalCase Öffentliche (dazu gehört auch protected) Felder und properties werden in der Regel PascalCase geschrieben, Unity hält sich mittlerweile bei neuen Sachen z.B. ECS selbst daran (meistens zumindest). Für private Felder und properties gibt es keine Namingconvention, allerdings sollten sie im Projekt konsistent sein.
  16. runner78

    Komponenten kopieren inkl Werte

    var copy = GameObject.Instantiate(orignial);
  17. runner78

    Shader Graph

    Der Shader Graph wird wohl zur Version 2019.1 den Preview status verlassen, weil es LWRP auch tut, genau so das neue Editor UI Framework "UIElements" auf dessen GraphView der Shader Graph basiert. Möglich wäre es ein Visual scripting für Shaders des Buildin-Renderes zu machen, allerdings wird Unity diesen zusätzlichen Mehraufwand nicht betreiben und stattdessen sich stärker auf die SRP konzentrieren. Es fehlt eigentlich nur noch eine spezialisierte 2D-SRP, dann wäre der Buildin-renderer fast schon überflüssig.
  18. Ich vermute das das Item Objekt ist ein struct? Entweder du machst Item zu einem reference object, oder du musst dir ein anderes Konzept einfallen lassen.
  19. runner78

    Game ohne code?

    Als Programmiere kann ich mir auch vorstellen Visual Scripting zu benutzten, z.B um ein Grundgerüst zu erstellen. Ich kann mir das gut bei ECS vorstellen, wo mein eine System Klasse mittels Visual scripting erstellt, dabei definieren welche Komponenten man braucht, die Jobs und deren Abhängigkeiten erstellt, Unity erstellt die c# Klasse und am Ende programmiert man die Jobs per Hand aus.
  20. runner78

    Game ohne code?

    Laut Roadmap Video 2019.2 eine erste Preview: https://youtu.be/o_DOrBpOvG0?t=1847
  21. runner78

    Game ohne code?

    Unity bekommt übrigens im laufe des 2019.x Zyklus Visual scripting integriert.
  22. runner78

    Unet oder aufs Neue networking warte

    Das neue System setzt derzeit auf dedizierte Server, kein P2P mehr. Unity bietet einen Hosting über die Google Cloud an, aber man hat man die freie Wahl wo man den Server hosten will. Man kann mit dem neuen System Headless Server erstellen, im FPS-Sample kann man vom Editor aus mit einem Klick einen Server und meherer Game instanzen starten. Das System ist auch bereits für C# Jobs und ECS ausgelegt.
  23. runner78

    Funktionen und mehr via Configs Laden und ausführen.

    Ich weiß nicht ob es mit Unity möglich wäre, aber der Roslyn compiler ist selbst in C# geschrieben und man könnte versuchen ihn als Library einzubauen.
  24. runner78

    Unet oder aufs Neue networking warte

    Eine preview ist jetzt verfügbar https://unity.com/solutions/real-time-multiplayer/network-transport-layer Und wird im FPS Sample benutzt. https://unity.com/fps-sample
  25. runner78

    Unity und die IsoMap

    Jetzt im Herbst, aber genaues Datum ist nicht bekannt. Du könntest dich ja aber schon vorher mal mit Unity und denTilemap beschäftigen.
×