Jump to content
Unity Insider Forum

Kokujou

Members
  • Content count

    259
  • Joined

  • Last visited

  • Days Won

    1

Kokujou last won the day on September 27 2018

Kokujou had the most liked content!

Community Reputation

2 Neutral

About Kokujou

  • Rank
    Advanced Member
  • Birthday 11/13/1993

Contact Methods

  • Website URL
    http://obscuritas.pw

Profile Information

  • Gender
    Male
  • Location
    Dessau-Roßlau
  • Interests
    Spieleentwicklung, Animes

Recent Profile Visitors

1,051 profile views
  1. Hallo erstmal. Ich bin mal wieder mit meinem Latein am Ende. Ich nutze NetworkServer und NetworkClient. Der, der das Spiel erstellt ist ein Host, der Mitspieler nur ein Client. Bei jedem Zug sendet jeder Client eine Nachricht an den Server, dieser wiederum broadcastet sie dann. Es ist zwar nur ein Zweier-Spiel, aber joa... Mein Problem sind plötzliche Verbindungsabbrüche wenn sich eine Weile nichts tut. Offenbar hat Unity die Wahnidee, nach einem Timeout die Verbindung zu trennen, wenn nichts gesendet wird. Und ich muss ihn jetzt irgendwie davon abhalten. IIch habs schon mit KeepAlive Nachrichten versucht, also einfach Nachrichten mit lediglich nem Bool-Wert jede sekunde rumgeschickt, ohne dass darauf ne reaktion erfolgt. Registriert auf ID 130, falls das wichtig ist. Ohne Erfolg. Gerade hab ich versucht die DisconnectTimeout Eigenschaft zu erhöhen, aber wenn ich das versuche einzubauen krieg ich gleich garkeine Verbindung mehr. Vielleicht weicht der DefaultConfiguration von der des Matchmakings ab oder was weiß ich. Eine andere Option wäre es bei jedem Disconnect wieder zu verbinden aber... Ich hab nicht die geringste Ahnung wie ich das überhaupt angehen soll. Am liebsten würd ich direkt auf ne Netzwerkarchitektur ausweichen, die sowas nicht macht, denn Unity macht was das angeht nur Probleme und ich arbeite sowieso ziemlich Low-Level mit Nachrichten. Aber es wäre schon schön wenn man dabei TCP hätte, also dass die Nachricht solange gesendet wird bis sie auch mit sicherheit ankommt. Das ganze händisch zu machen ist mir dann irgendwie zu verwirrend.
  2. Zu meinem Projekt: Ich benutze den matchmaker eigentlich nur zum Aufbau der Verbindung danach kommuniziere ich nur noch über Nachrichten, also recht lowlevel. Jetzt habe ich aber sowohl beim Aufbau der Verbindung als auch beim Senden der Nachrichten das Gefühl, dass das nicht immer so hinhaut, wie ich mir das denke. Besonders auf meinem Smartphone. Dort baut er keine Verbindung auf, obwohl der Server brav horcht oder Nachrichten kommen nicht an. Das blöde ist noch dazu dass ich keine Fehlermeldungen vom Handy kriege. Ich weiß das ging mal, dass man im Editor auch übers Netzwerk Logs empfangen konnte aber ich weiß echt nicht mehr wie. Ich gehe davon aus dass die Verbindung über WLAN nicht so gut ist und deswegen irgendwann Nachrichten nicht ankommen, viel zu häufig eigentlich. Lange Rede kurzer Sinn: Wie kann ich das verhindern? Muss ich jetzt solange dieselbe Nachricht senden, bis ich TCP-Mäßig ein Ping zurückkriege a la "Nachricht erhalten"? Die konkreten Funktionen mit denen ich Arbeite sind NetworkServer.SendToAll und NetworkClient.Send
  3. Hallo~ Folgendes: ich möchte eine Skript-Animation basteln. Und ich hab damit schon angefangen und vielleicht könnt ihr mir ja helfen eine bessere möglihckeit zu finden. Ich arbeite mit Sprites und der Unity UI, genauer gesagt mit Images, denn da kann ich am besten kontrollieren wo und was, bei den Weltkoordinaten ist mir das zu viel Mathe. Ich zerlege meine 128 x 128 großen Texturen im Sprite Konstruktur in Blöcke der gleichen größe und für jeden dieser Blöcke erstelle ich ein GameObject mit Imae-Koponente, erstelle ein Sprite dafür über die Create-Funktion und platziere es so, dass es das gesamtbild ergibt, um dann Transformationen darauf anzuwenden. Nun werdet ihr mir sicher Zustimmen, wenn ich sage, dass das verdammt ineffizient ist, wenn man sehr kleine Blöcke wählt oder noch görßere Textturen hat und damit noch mehr Blöcke. Für die Animation von der ich Rede will ich, dass das Bild sich quasi zu dem neuen Bild "transformiert". Mein Ansatz ist, dass ich aktuell die Farbe jedes einzelnen Blocks Lerpe (Color.Lerp), allerdings meine ich mit Farbe nur die Eigenschaft des Images, also damit es ein bischen mehr so aussucht. Der Rest läuft über die Transparenz, im Endeffekt ist es nur ein zeitlich verschobenes überblenden. Um den Durchschnittswert der Farbe zu kriegen Summiere ich die Quadrate aller einzelnen Farbwerte (R,G,B einzeln), teile sie durch die Gesamtzahl und ziehe dann die Wurzel, die Formel hab ich gefunden, angeblich soll der normale Durchschnitt falsch sein. So viel zu dem was ich bereits ausprobiert habe. Viele, viele, viele Laggs je größer ich die Sache angehe. Also vielleicht teilt ihr mir mal mit was euch zu dem Thema eifnällt. Vielleicht ist das Ergebnis ja selbst wenn es nicht laggen würde gar nicht das was ich mir erhofft habe. Ich versuche mich gerade an Übergangsanimationen für einen Ladebildschirm und bin quasi in der Brainstorming Phase, wo ich rumprobiere wie was aussieht.
  4. Kokujou

    Codeüberprüfung und Feedback gesucht!

    Ja und so ähnlich hab ich es jetzt! :3 Es macht Spaß Neues zu lernen. Ich werd mal den ersten Beitrag bearbeiten, damit das GitHub dass ich habe ganz oben steht und man sich das nicht irgendwo raussuchen muss. Obwohl die GitHub Links ja unkompliziert sind. Nix mit asdh78920912jeduin/xy/z/ä/ XD Aber vielleicht kann ja dann man jemand über meine Neusten Arbeiten gucken und mir sagen ob ich auf dem richtigen Weg bin oder ob ich hier jetzt kompletten Mist mache XD ___ Achja und ich habe eine kleine Frage. Ich habe ein ziemlich blödes Konstrukt. List<object> ich habe die KI-Klasse die von der Player-Klasse erbt und gebe als Spieler-Liste entweder die KI ein oder den Player. Würde ich jetzt List<Player> nutzen wären die zusätzlichen Informationen der KI Klasse dann verloren oder wäre es nach wie vor dasselbe Objekt und wenn ich dann (KI)players[0] Schreibe würde ich Zugriff darauf haben? ___ Okay und noch ein ziemlich fettes Problem dass mir gerade aufgefallen ist. Ich ordne die Karten ja mathematisch an. Das Problem bei der ganzen Sache ist die reale Größe des GameObject. Aktuell geh ich über GetComponent<MeshRenderer>().bounds.size Aber... wie zur Hölle skaliert das?! Auf dem Spielfeld haben alle Karten eine 1/1.5-fache localScale. Also ich teile durch 1.5f. Dadurch werden wohl die bounds neu berechnet. Jetzt kommt das Problem. Aus irgendeinem mir völlig unerklärbaren Grund variieren diese Werte sehr intensiv. Wenn ich jetzt eine Karte in der Hand bewegen will würde ich ja eigentlich als Referenzwert die bounds.size/1.5 nehmen. Aber die haut nicht hin, ist viel größer als die der Karten auf dem Feld. Ich würde ja einfach die erste Karte auf dem Feld ansprechen, aber wenn das Feld leer ist, geht das nicht. Und dieser Fall kann theoretisch eintreten, wenn auch sehr selten. Ich versteh nicht wie das überhaupt sein kann... Selbst wenn ich vor den Code localscale /= 1.5f schreibe sind die Bounds des Renderers völlig verschieden. _____ okay das letzte Problem hab ich irgendwie gelöst bekommen folgendermaßen: Offenbar ist die größe der bounds des MeshFilters einer Plane, die ich als Kartendarstellung Nutze, gleich 5. Die größe meiner Orthografischen Kamera ist 41. 41 * 2 = 82 so kriegst du die Bildschirmhöhe. 82/5 ergibt dann die Große der Karte, die ich dann nur noch mit der AspektRatio der Kamera multiplizieren muss. Ehrlich gesagt steig ich bei dem ganzen Zeug un der mathematischen Sinnhaftigkeit dieser Formel nicht dahinter aber es funktioniert XD
  5. Kokujou

    Codeüberprüfung und Feedback gesucht!

    Ja aber das würde nicht mehr so gut passen wenn es in der Card-Klasse wäre. Eine Spielkarte weiß ja nichts von ihren anderen Hovern. Also hab ich das Raycasting jetzt halt in der Player-Klasse ne Kommunikation mit der Spielfeld-Klasse zum Triggern von Ereignissen bezüglich der Kartenauswahl und ehrlich gesagt sieht alles jetzt viel schöner aus. 4 Skripte fliegen raus sobald alles wieder funktioniert und ich hoffe dass ich dann nicht mehr ganz so viel Kritik für meinen Codestil kriege. Ich hab sogar etwas an der Deutsch/Englisch Macke gearbeitet ^^ aber nur wenn ich mal drüber stolpere. Als ich das in der Card Klasse geändert hab hätt ich mir echt in die Fresse schlagen können weil folglich ja die ganzen verdammten ScriptableObjects die ich angelegt habe alle kaputt gegangen waren XD ich bin froh dass ich die änderung rückgängig machen konnte auch wenn Unity nicht geschnallt hat dass ichs gemacht hab und ich erstmal Copy -> In Ordner Temp neu importieren -> alte löschen -> wieder in den alten Ordner verschieben. Es war ja dieselbe datei. Nur die Meta löschen hat nicht geklappt, reimportieren oder aktualisieren hat nicht geklappt, man musste es auf die harte Tour machen. Das Blöde ist ja dass du nicht denselben Namen mehrfach verwenden darfst. logischerweise. Ich meine ich hab ne Klasse Spielfeld, ne Instanz vom Spielfeld, sogar Funktionsparameter also brauch ich drei verschiedene Namen XD Board board = _board; oder wie? XD "Playboard" klingt irgendwie falsch... "GameEnvironment" genauso... mir gehen echt die Worte aus ^^
  6. Kokujou

    Codeüberprüfung und Feedback gesucht!

    hey so ähnlich hab ichs tatsächlich gemacht Ich musste etwas Fummeln, weil so viel Hintergrundwissen aus anderen Klassen benötigt wird... Aber am Ende liefs auf Kommandos hinaus. In der Player-Klasse wird jetzt der Input gehandhabt. Da switche ich dann zwischen zwei Funktionen für die Update-Routine die ich durch Kommando einstellen kann. In der Player-Klasse die direkten Zugriff auf die Hände hat wird das Hovern der Karte geregelt und dann in der Funktion der Spielfeld-Klasse mitgeteilt, welche Karte gehovert wurde damit sie die passenden Feldkarten highlighted. Und wenn man dann auf dem Feld auch noch aufrufen muss ruft die Spielfeld-Klasse RequestInput() auf und die Player-Klasse schaltet quasi auf die zweite Update-Routine. Zu finden in meinem neusten GitHub Skript^^ Das alleinige Hovern liegt jetzt tatsächlich auf der Karten-Komponente die vorher völlig leer war aber die Koordinierung des Hovers (es muss ja auch das vorherige "geunhovert" werden XD) übernimmt wieder das Spielfeld etc... kannst ja mal bei allem drübergucken was ich heute committet habe... hab nen neuen Branch eingerichtet weil die Änderungen von den Grundfunktionen das ganze Spiel zurückwerfen XD
  7. Kokujou

    Codeüberprüfung und Feedback gesucht!

    Naja meine letzten Verbesserungen sind nur im Punkto Codequalität XD Der schritt war weniger aufs Raycasting gemünzt aber es wäre halt cool wenn eine Karte die auf sie bezogenen Aktionen durchführen könnte. Hovering, Klick-Aktionen und Skripte, Triggern anderer Events etc... Schön wäre es ja wenn ich einfach n OnClick-Event einbauen könnte... Aber ich schätze mal ein Button-Skript kann ich nicht drauf legen oder? XD Mir ging es halt größtenteils darum das alles aus der Hauptklasse rauszukriegen, denn wenn ich alles nur mehr oder weniger in eine Klasse schreibe dann ist das wohl irgendwie schlechter Stil und neher an imperativer Programmierung als an OOP, besonders wenn ich jetzt vorhabe zwei größere Klassen zusammenzufügen, weil ich gemerkt habe dass Klasse B zu 50% aus Verweisen an Klasse A besteht XD Erst dachte ich daran ne Klasse für das ganze Input-Handling zu bauen aber auch das klingt nicht so prickelnd vor allem weil man halt wieder viele Verweise braucht. aber wenn das scheiße ist dann überleg ich mir was besseres... mal gucken wie es wird.
  8. Kokujou

    Codeüberprüfung und Feedback gesucht!

    Ist es eigentlich performant wenn ich mehrere Karten-GameObjekte habe und die alle Raycasting in der update-Routine der Komponente ausführen lasse? Oder wäre da eine übergeordnete die über einem Layer arbeitet besser?
  9. Kokujou

    Codeüberprüfung und Feedback gesucht!

    Ah ich glaub das könnte mir später nützlich sein das Speicher ich mir mal weg, danke! Aber ob das die Sache geändert hatte... Es ging ja primär darum Änderungen am Objekt anzunehmen. Wichtig ist das auf Jeden Fall!
  10. Kokujou

    Codeüberprüfung und Feedback gesucht!

    Editor-Skript? erzähl mal was ist das wie sieht das aus?
  11. Kokujou

    Codeüberprüfung und Feedback gesucht!

    kommt drauf an. Am Ende häätte es nicht funktioniert und alles umsonst. Denn wie gesagt ich hatte ja sogar mal die völlig korrekten Files da reingepackt und auch die hatte er wieder überschrieben^^ stell dir mal du müsstest die Fummelei jedes mal machen. Da wird man wahnsinnig
  12. Kokujou

    Codeüberprüfung und Feedback gesucht!

    Uff... Ich sagte doch dass ich das Ding nur benutze damit es schneller geht, oder hast du Lust die 48 Namen manuell einzutragen? Ich hau den code da raus sobald er endlich die Änderungen behält. Aber SetDirty hat ja Gott sei Dank funktioniert ^^
  13. Kokujou

    Codeüberprüfung und Feedback gesucht!

    WEil es nunmal nicht bei Ausführung passiert sondern bei vom Skript unabhängigen Aktionen wie dem Laden einer Szene oder dem Schließen von unity for (int i = 0; i < AllCards.Count; i++) { SerializedObject obj = new SerializedObject(allCards[i]); obj.Update(); EditorUtility.SetDirty(allCards[i]); AllCards[i].Title = AllCards[i].name; obj.ApplyModifiedProperties(); } for (int i = 0; i < allYaku.Count; i++) { SerializedObject obj = new SerializedObject(allYaku[i]); obj.Update(); EditorUtility.SetDirty(allYaku[i]); allYaku[i].Title = allYaku[i].name; obj.ApplyModifiedProperties(); } AssetDatabase.SaveAssets(); Also dass das Forum die VS Formate nicht unterstützt ist schon doof >.< keine Lust diese Leerzeichen einzeln zu löschen. Das findet alles in der Awake()-Routine start... ja ich weiß es ist schrecklich aber ich hau jetzt alles rein da mir sonst nichts mehr einfällt XD TATAAA ES HAT FUNKTIONIERT! Fürs erste zumindest >.< SetDirty war die Lösung. Weiß der Geier warum. Nagut n bisl nachvollziehen kann ichs. In meinem Code mach ich's nicht aber das SO soll wohl standardeinstellungen laden und dann für die Dauer eines Spiels gemoddet werden. Skripting als Massen-Text-Editing ist wohl nicht so das vordringliche Ziel XD
  14. Kokujou

    Codeüberprüfung und Feedback gesucht!

    woher sollichs denn wissen! XD Es liegt NICHT in meinem Code. Ich glaube es hat was damit zutun, dass unity zwar das Objekt erstellth at, aber Änderungen nicht annimmt, darum hab ich nach Speichermethoden gesucht.
  15. Kokujou

    Codeüberprüfung und Feedback gesucht!

    Bei computerbase werden sie automatisch zusammengefasst *maul* Ich habs jetzt sogar mit SerializedObject.ApplyModifiedProperties versucht... nix >.>
×