Jump to content
Unity Insider Forum

runner78

Members
  • Content count

    97
  • Joined

  • Last visited

  • Days Won

    6

runner78 last won the day on November 26

runner78 had the most liked content!

Community Reputation

19 Gut

About runner78

  • Rank
    Advanced Member

Recent Profile Visitors

784 profile views
  1. runner78

    Datenbankkommunikation

    Das liegt dann daran, das dein Input nur funktioniert wenn er durch 3 Teilbar ist.
  2. 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); } }
  3. 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/
  4. 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.
  5. 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.
  6. 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
  7. runner78

    Der Jammer-Thread

    Fast eine Jahr Später: Mit Unity 2018.3 kommt schon C# 7.3
  8. 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.
  9. 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.
  10. 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.
  11. 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)
  12. runner78

    Komponenten kopieren inkl Werte

    var copy = GameObject.Instantiate(orignial);
  13. 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.
  14. 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.
  15. 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.
×