Jump to content
Unity Insider Forum

MaZy

Members
  • Content count

    520
  • Joined

  • Last visited

  • Days Won

    13

Everything posted by MaZy

  1. MaZy

    Dedicated Server - Unity

    So kann man das machen Ich meinte damit beides. Ein Prozess ist ein Programm z.B. Unity und da drinne halt mehrere Server starten. Ob es mit UNet HLAPI geht weiß ich gerade nicht, da der NetworkManager singleton hat. Mit Server die nur minimal aufgebaut sind z.B. nur Konsoleserver oder so, da geht das auf jeden Fall. Wie willst du das mit Dorf machen? Startest du selber den Server?
  2. MaZy

    Dedicated Server - Unity

    Wenn man die Bereiche als Instanzen macht dann ja. Zur Klarstellung: Eine Instanz im Spiel bedeutet, dass es ein unabhängiger Bereich für die Spieler sind und sind abgekoppelt mit der anderen Welt. Sie bekommen also nichts mit und anders herum auch nicht. Serverinstanzen können auch einfach nur mehrere Server in einem Prozess bedeuten. Also man kann das schnell verwechseln (zu mindest ich).
  3. MaZy

    Dedicated Server - Unity

    Da musst du leider ausführlicher sein. Sagen wir mal in der Scene die normale Map ist 10x10 km groß und ein Dungeon 2x2 km. Dann kann man diesen Dungeon ganz wo anders packen z.B. ganz weit links. Die Spieler betreten dann einfach da rein. Mit UNet NetworkProximityChecker geht das auch gut. Den Dungeon kann man ja als Prefab machen und jedes mal neu Laden oder einen Reset programmieren (also die Sachen spawnen einfach erneut). Soll aber der gleichen Dungeon mehrmals betretbar sein und eigene Instanzen haben, dann kann man mit mehreren Server arbeiten. Da gibt es halt viele Möglichkeiten. Das lässt sich nicht so einfach beantworten.
  4. MaZy

    Schöner oder kurzer Code?

    Folgendes geht aber: if (X == Y) { print("wahr") print("wirklich wahr") } else print("falsch") Zum Thread: Wenn es tatsächlich nur im print geht, dann würde ich Saschas Methode benutzen. Allerdings beim Debuggen erweitert man sein Code und daher ist die erste Methode mit den geschweiften Klammern am Besten dafür geeignet (sonst muss ich immer umschreiben, daher mache ich eigentlich gleich mit geschweiften Klammern).
  5. MaZy

    Dedicated Server - Unity

    Hallo, es ist normal, dass man eine Idee im Kopf hat und dies auch umsetzen möchte, aber gleich etwas kompliziertes zu machen würde ich nicht empfehlen bzw. lieber einen Profi da ranlassen. Nicht umsonst brauchen Spiele wie GTA 5 z.B. 5 Jahre (und dort ist ja so mit Instanzen) und dort ist ein großes Team beteiligt. Zu der ersten Post: Es gibt verschieden Varianten, wie man einen Server und Client logisch aufbauen kann. Du muss erst mal die Frage beantworten, wie du es gern hättest. Z.B. Gegen Cheater vorgehen Minimale Breitband (also ohne Network Lags)? Will man mehr Spieler haben dafür aber komplexere System (wie das mit Instanzen) Oder weniger Spieler ohne Performance Probleme. usw. Je nachdem kann man vieles Serverseitig programmieren oder clientseitig. Minecraft hatte auch vieles früher Clientseitig. Z.B. Inventar. Doch schnell merkte man, dass es echt nervig ist, denn viele duplizierten seine Items. GTA 5 ist z.B. Clientseitig, deswegen gibt es leider auch viele Cheater, dafür aber merkt man, dass es lagfrei läuft, außer der Spieler laggt.. dann bewegt sich das Auto wirklich komisch. Wenn du jetzt vom Server aus validieren willst, dann siehst das so aus. Client sendet an Server "Hey ich drücke jetzt W um vorwärts zu bewegen", der Server antwortet "Hey ok du bewegst dich nach vorn und ich sende an alle weiter, dass du das tust". Hier kann man nun überlegen, ob man erst auf Server Antwort wartet oder bereits schon nach vorn bewegt. Ich hab beide varianten mal ausprobiert und habe aber eigene Logik aufgebaut und nicht, die im Internet vorgeschlagen sind (welches aber eig besser ist), aber lief ganz ok. Bei sehr hohen Ping aber war es echt nicht mehr schön. Nun kommt der Teil mit allgemein Sachen validieren. Spieler möchte eine Tür auf machen - Server: Du darfst es nicht. Kein Erlaubnis. Das ist wie die Vorwärtsbewegungssache nur, dass hier der Server überprüft, ob der Spieler das überhaupt darf. Das durch Wände teleportieren z.B. das geht alles in World of Warcraft. Ich meine in Minecraft auch. Kann mich erinnern, dass manche Fly-Hacks hatten oder sowas. Aber alles andere was Inventar oder so angeht, geht nicht vom Client aus. Ja Unity muss dazu die Map kennen. Was man machen kann ist, dass man Unity Server wie ein Spiel startet und dann als Server startet (Fast so als würde man selbst ein Spiel hosten). Das kann man als Dedicated Server benutzen. Ich glaube mit UNet kann man keine Zonen erstellen, aber ich meine, wenn man den Network ProximityChecker umschreibt, kann man sowas in der art programmieren: https://docs.unity3d.com/Manual/class-NetworkProximityChecker.html Das ist nämlich dafür da, wer wo wen sehen kann und Informationen bekommen usw. Ansonsten muss man mit low level api anfangen.
  6. MaZy

    Problem mit C#/PHP File Upload

    Warum verwendest du diese Funktion, obwohl du gleich WaitForSeconds schreiben kannst? Also statt yield return StartCoroutine(Wait(6.0f)); // Außerdem sollte nicht einfach eine Wait(6.0f) klappen? so yield return new WaitForSeconds(6.0f); Zweitens benutzt du eine veraltete Version der WWW / WWWPost (je nach unity version unterschiedlich). Schaue mal hier Drittens (nur so am Rande), laut PHP Code ist deine PHP Version veraltet (oder man verwendet falsche Funktion). sowas wie mysql_query ist sehr alt und wird eigentlich gar nicht mehr verwendet, aber das sollte mit der eigentlichen Fehler nichts zu tun haben. und nun Header. 429 Too Many Requests sagt, dass du zu viele Dinge hintereinander Requesten tust. Das muss jetzt nicht unbedingt an dir liegen, sondern kann an dem Server liegen. Vllt mag es nicht in 10 Minuten mehrere Requests bekommen. Darum gehen auch deine Files nur ab und zu durch. Der Server kann dich daher erst mal geblockt haben und dann geht das erst mal nicht für eine gewisse Zeit. Da muss man nach den Servereinstellungen (wahrscheinlich PHP Einstellungen) anschauen. Versuchst du 55 Dateien auf einmal hochzuladen oder nacheinander?
  7. MaZy

    C# und PHP Upload

    Weil es mich selbst interessiert hab ich mir das mal angeguckt. WWWPost ist veraltet. Man soll UnityWebRequest benutzen. So sieht mein code aus: void Start() { StartCoroutine(Upload()); } IEnumerator Upload() { var url = @"URL_TO_UPLOAD"; var fileName = "myfile.txt"; var fileContent = System.IO.File.ReadAllBytes(@"assets\myfile.txt"); var fieldName = "userfile"; WWWForm form = new WWWForm(); form.AddBinaryData(fieldName, fileContent, fileName); UnityWebRequest www = UnityWebRequest.Post(url, form); yield return www.SendWebRequest(); if(www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { Debug.Log("Form upload complete!"); Debug.Log(www.downloadHandler.text); } } Etwas den code anpassen und den fieldName zu deinem ändern dann sollte es funktionieren.
  8. MaZy

    C# und PHP Upload

    Also ich hab mit PHP (nichts mit unity) sowas gemacht und da hab ich das hier stehen(gekürzt): <form enctype="multipart/form-data" method="post"> hast ja application/octet-stream ja stehen. Weiß nicht ob da unterschied macht. 2. Du solltest mit isset usw die Variable erst mal checken. Ein Beispiel von mir: <?php if (isset($_FILES) and isset($_FILES['userfile']) ) { if(UploadIsOk($_FILES['userfile']['error'])) { $filename = pathinfo($_FILES['userfile']['name'], PATHINFO_FILENAME); $extension = pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION); move_uploaded_file(.... usw. Ansonsten var_dump ist wirklich wichtig und eine gute Idee das anzuwenden.
  9. MaZy

    Spieleranzahl auf Server

    Weil Network.Connections nicht zu Unet gehört. Man kriegt das mit NetworkServer.connections raus. Wenn du NetworkManager benutzen tust und wissen willst wie viele Spieler(objekte) gespawnt sind, dann: NetworkManager.numPlayers Welche Unity version benutzt du? Weil UNet ist ab 2018.3 veraltet.
  10. Würde mal zu Mirror wechseln, was ja in Discord auch genannt wurde, da UNet bald veraltet ist und nicht weiter entwickelt wird: https://forum.unity.com/threads/mirror-networking-for-unity-unet-replacement.425437/ Zu logs.. such einfach mal Console script oder so für Unity. Da gibt es so fertig dinger wo man die console anzeigen lassen kann im Spiel und dann siehst du was passiert ist. Ansonsten adb.exe funktionen googlen und damit vom handy die outputs zu applications sehen kannst. Man kann da unity rausfiltern, damit man es angenehmer hat. Große Spiele wie World of Warcraft sollen angeblich TCP benutzen. Auch angeblich Minecraft soll TCP benutzen. UDP hat ja mit heuten Technologie die Vorteile wie bei TCP eigentlich, weil ja sowas wie reliable gibt, dennoch wird TCP immer noch ab und zu gerne benutzt.
  11. MaZy

    Controller einrichten?

    Also wie Sascha das schon sagte, sieht es so aus, ob im Code Input.GetAxis("horizontal") verwendet wird. Kannst ja mal alles durchgehen bzw. nochmal im Code gucken, ob man versehentlich selbst was rein geschrieben hat.
  12. MaZy

    Editor

    Wenn ich richtig verstanden habe, dass mehrere Scripte gleichzeitig minimapTypeChoice und gleichen Wert haben sollen, dann kannst du static variable benutzen. Weil du sagtest ja, dass es vergessen wird. Bei static sollte das nicht passieren
  13. MaZy

    Von A - Z zum eigenen Spiel

    Ja, wenn du nicht vorhast Geld zu verdienen. Damit meine ich nicht mit Gedanken so denken, aber trotzdem Werbung einblenden. Sobald die Absichten mit Geld verdienen offensichtlich sind (damit mein ich Werbung einblenden und trotzdem den Gedanken haben "wird eh nix"), musst du Gewerbe anmelden. Du kannst dir bei Finanzamt so ein Heftchen geben lassen, wo einige Seiten sind. Da wird dir bereits vieles erklärt. Man braucht keine Angst zu haben vor einer Gewerbeanmeldung. Als Kleinunternehmer musst du fast nicht mal Buchführen (zu mir meinten die, dass ich damals aber T-Bilanz aufstellen musste - einfach nur Ausgaben - Einnahmen = Gewinn. Das wars. Damals hab ich so Handel über Ebay betrieben ). Impressum muss da angegeben werden, wo etwas Angeboten wird. In dem Fall, wenn es um eine Downloadseite geht wie Play Store, dann wird auf deiner Seite Impressum angegeben. Google haftet dafür nicht nebenbei, sondern du. In der App, ob da muss, weiß ich nicht. Kann das da nicht so rauslesen. Das Problem ist, dass z.B. meine Apps auch auf einigen anderen Seiten verfügbar gemacht wird, ohne dass ich das eigentlich beauftragt habe. Heißt Drittanbieter-App-Stores haben vllt. meine App, aber eventuell ohne mein Impressum. Wenn du nichts speicherst nein. Kannst aber trotzdem machen und zumindest erwähnen, dass du nichts speicherst. Bedenke: Unity Analytics, Ads usw. benutzen die Nutzenuserdaten und speichern sie. Dann musst du auf jeden Fall zu mindest deren Datenschutzerklärung als Verweis in deinen vermerken. Zum Beispiel Google Ads, Unity Ads, Unity Analytics. Mittlerweile wird auch standardmäßig Datenschutzerklärung in Apps mit eingebaut als Link zur einer Seite, dass man es akzeptieren soll, wenn man weiter machen möchte. Allerdings einmalig und bei Veränderungen als Hinweis nochmal. (Wobei bei dir nochmal 3 steht) Der Unterschied wäre nur Gewerbe, dass man es nicht braucht, wenn man keine Einnahmen erzielt. Alles andere muss beachtet werden. Sowas packt man in seine AGB rein und lässt Leute akzeptieren, dass DU keine Haftung übernimmst. Das ist sehr wichtig. Denn man könnte einfach das Spiel oder das Programm modifizieren und behaupten, dass es so war. Ist sehr schwer nachvollziehbar (aber logisch. Wenn er nur selbst hat und sonst niemand, dann ist klar, dass es nicht an den Entwickler liegt). Erinnere dich an die Katze in der Mikrowelle. Die Kläger haben gegen die Mikrowellen-Hersteller gewonnen, weil sie nicht angegeben haben "Keine Katze in der Mikrowelle". Mittlerweile tun sie das. Aber grob genannt Keine lebendigen Tiere in die Mikrowelle. 🤣
  14. MaZy

    Datenbankabfrage mit Php

    PDO ist gewöhnungsbedürftig, aber übelst gut. Kannst aber auch mysqli benutzen: http://php.net/manual/de/mysqli.quickstart.connections.php
  15. MaZy

    Terrain Tree chopping - Collider baked?

    Einfach die Prefabs vorladen und nicht immer instantiate benutzen oder so. Falls das trotzdem sehr high Poly ist, kann das natürlich beim Aktivieren trotzdem einfrieren. Ich meine aber, dass das einfrieren von der Prefab-Speichergröße oder Model-Speichergröße auch kommt. Tarantel muss ich da zu geben. Ich hab mal auch an sowas rangemacht und selbst Platzierte waren mir lieber, weil damit echt vieles erleichtert wird. Nur das Platzieren ist natürlich nervig.
  16. @GekkoState wenn es darum geht, dass du Network kennen lernen willst, dann kannst du da benutzen was du willst. Ich hab damals zum Beispiel ein Chatprogramm geschrieben. Das wurde sogar in der Schulzeit benutzt, weil wir in getrennten Räumen (Gruppen) waren und haben da zusammen dann sogar geschrieben. Ist zwar nicht das selbe wie mit Spielen, aber man versteht was da passiert. Allerdings hab ich da AutoIt benutzt. Wenn man nun sowas wie Lidgren Network, oder C# pure TCP usw benutzt kann es bisschen schwerer werden. Ansonsten ran an UNet. Wirst schon irgendwann an Schwierigkeiten stoßen, die vllt bei der neuen System helfen könnten. UNet hat leider wirklich wie andere schon sagen ein paar Macken, wenn man was komplexes machen wollte. Beispiel bei mir: Die Networkmanager waren nicht so immer modifizierbar. Man musste total tricksen. Da wollte ich mal Characterauswahlbildschirm machen mit NetworklobbyManager. So ähnlich wie das Spiel Alien Swarm oder Left 4 dead, wo man im Lobby ist, aber Karte nicht geladen wurde. Ich musste leider teilweise aus dem Sourcecode Methoden kopieren damit ich sie bearbeiten kann oder ganz musste neu implementieren. Das war schon echt schwierig. Viele schlugen mir vor, dass ingame zu machen. Quasi ein Prefab im Spiel "spawnen" und dann erst Charakter wählen. So wollte ich das aber nicht ^^. Tarantal, man ist nie auf den Masterserver von Unity angewiesen. UNet ist so aufgebaut, dass man eigenen Masterserver haben kann. Du kannst sogar ganz normal mit TCP arbeiten oder mit PHP oder mit vielen anderen Dingen um einen Masterserver zu programmieren. Da gibt es sogar einige Beispiele (inklusiv meine, vllt sende ich hier später ein Video). Dazu hatte ich mal nen Tutorial angefangen, wo ich sogar als Beispiel einen GTA 5 Server Emulator genommen habe, wo ich mitgeholfen hatte. Da hat man auch Masterserver entwickelt. Und wenn man ganz Faul ist kann man ca für 12 Euro sogar sowas holen. https://assetstore.unity.com/packages/tools/network/match-up-104411 Das einzige Problem wäre das mit dem NAT, aber für gibt es ein paar Dinge im AssetStore die glaub ab 10 Euro anfangen.
  17. Meshs haben Faces die nur in eine Richtung gucken. Das heißt, wenn es eine "Platte" ist (in Unity mein ich Plate), dann hat man nur in eine Richtung ein Face. Wenn man gegenübersteht, dann sieht man auch diesen Mesh. In mehrere Richtung guckt z.b. die Box in Unity3D. Hat ja alle Seiten ein Face. Bei dem Haus oder was das sein soll sieht zu mindest im Video so aus, dass es "innen" nicht gibt. Musst mal schauen, ob du in Unity ohne in playmode zu sein, ob man innen Räume sehen kann.
  18. MaZy

    Unreachable code detected

    Compiler führt es immer perfekt aus nur wie wir vorgehen kann falsch sein // Ein Beispiel was ähnlich ist, aber wo compiler nicht meckert. // Beispiel: OnHit(40); // Problem Beispiel: void OnHit(float damage) { if(damage <= 50) { ReportLowDamageHit(); return; } // Wird bis hier niemals ausführen, obwohl die die Funktion "perfekt" ist und tut was es tun soll. // denn damage wenn es unter 50 ist.. wird oben immer abgebrochen. Naja aber ReportNoDamageHit() wird aber nie ausgeführt. // Obwohl damage 70 sein könnte.. dennoch ist es hier unten unbrauchbar.. wird nie reingehen. // Compiler wird aber nicht meckern, da ja denkt.. mit über 50 wirst du dahinten ankommen. Nur nie in den If rein. if(damage <= 0) { ReportNoDamageHit(); return; } } //Lösung Beispiel 1 void OnHit(float damage) { // Wird nicht ausgeführt, da damage = 40 is aber wäre es 0 würde es funktionieren. if(damage <= 0) { ReportNoDamageHit(); return; } if(damage < 50) { ReportLowDamage(); return; } } Beispiel 2 void OnHit(float damage) { // Sieht wie das Problem Beispiel an.. nur dass wir hier sagen, dass es zwischen 0 und 50 (1 bis 49) gecheckt werden soll. if(damage > 0 && damage < 50) { ReportLowDamageHit(); return; } if(damage <= 0) { ReportNoDamageHit(); return; } }
  19. Gute Frage nächste Frage . Wie es aussieht findet der Editor die Komponenten dazu nicht Hast du zufällig auch mit Unity Hub ausprobiert? Würde ich sogar empfehlen es zu benutzen. Ansonsten in Unity Ordner mal überprüfen ob Linux Ordner existiert: UNITY_ORDNER\Editor\Data\PlaybackEngines\ -> LinuxStandaloneSupport EDIT: Da drinne sind nochmal ordner z.b. für headless version usw. EDIT2. Übrigens überprüfen, ob du auch im richtigen Editor drinne bist (Versioncheck).
  20. MaZy

    Unity und Steamworks (steam_api.dll)

    Aso hab es überlesen ^^
  21. MaZy

    Unity und Steamworks (steam_api.dll)

    Es gibt auch ein von Garry Newman welches er für das Spiel Rust benutzt. https://github.com/Facepunch/Facepunch.Steamworks EDIT: Allerdings seit knapp ein Jahr keinen neuen Release außer Github updates, welches 2 Monate alt ist. Muss zugeben, dass ich nicht alles getestet habe (auch mit Spacewar), aber manche Dinge fand ich bei Facepunch besser.
  22. MaZy

    Mehrere Game-Rooms

    Das hört sich nach einen Masterserver an. Wenn du Headless Server meinst ja. Tatsächlich ist es wirklich so, dass man jedes mal einen neuen Prozess also einen neuen Server mit anderen Port startet. Anders weiß ich auch nicht. Zu mindest tut Valve so bei Dota 2. Allerdings geht es bei größeren Spielen nicht ohne mehrere und leistungsvollen Server. Bei Performance kann man auch Amazon Server benutzen Die sind sehr dynamisch und dort werden ja die Ressourcen je nach Bedarf erhöht. Natürlich auch die Kosten. Mehrere Unity Prozesse pro Instanz (Amazon Server).
  23. MaZy

    Verbindung Server zum Handy

    Wenn es tatsächlich um Client-Server Modell geht, dann geht das mit den Nummern nicht. Geht es aber darum, dass man das Spiel startet (in Sinne von App öffnen) und man lädt Daten aus dem Datenbank runter (also keine Sockets (realtime Datenaustausch) werden aufgebaut), dann müsse das gehen (Man braucht natürlich immer noch einen Server ^^) Ja genau. Die Apps fragen ständig (vielleicht alle paar Sekunden) den Server nach dem Status (Gibt es eine neue Nachricht etc.). Deswegen ist es auch zwingend notwendig dass man Apps im Hintergrund weiter laufen lässt und so machen es die Apps ja auch auf Android und iOS Das ist ne gute Theorie, aber so weit ich weiß läuft das nicht so. So wie ich das damals entnommen habe läuft das bei Android Systemen zu mindest anders. Die Apps müssen auch NICHT im Hintergrund laufen. Ich beziehe mich hier auf Android Apps die mit GCM (Google Cloud Message - z.B. für Push Notification) funktionieren. Im Hintergrund läuft ein Prozess ich glaube sogar von Google Play der immer auf eine Verbindung wartet bis Google Server sagen "wir verbinden uns jetzt mit dir". Das heißt du verbindest dich nicht (sendest aber einmalig, dass du online gegangen bist). Kannst quasi wie ein Server auf dein Handy sehen. Jedes mal also, wenn die Verbindung bricht, versuchen Google Server, wenn sie es benötigen, eine Verbindung mit dir aufzubauen. So. Sobald einer eine Push Nachricht sendet geht es erst zu Google Servern und von dort aus wird an dich weiter geleitet (und ggf. Verbindung aufgebaut). Jetzt sucht dein Handy nach bestimmten Subscription sowas wie com.whatsapp.event.messagenotifcation oder sowas. Hat man das.. wird die Push-Nachricht angezeigt. Allerdings weiß ich nicht, ob google erst mal sagt "hey, hab ne push nachricht an dich für event com.whatsapp.event.messagenotifcation" und du sagst "hey hab das sogar als event bei einer app subscriped" und kriegst dann erst nachträglich die Nachricht geschickt oder dass du sofort die Nachricht bekommst und dein handy halt guckt, ob du überhaupt anzeigen kannst. Kann auch sein, dass google irgendwie auch intern registriert, dass du es empfangen darfst. Ich hab nen Iphone5 (naja mittlerweile seit paar Wochen meine Mutter hat das jetzt) und Samsung Edge S6. Beide hatten die gleichen Apps und account. Als ich Iphone 5 nach vieeeelen Monaten gestartet habe.. habe ich all die Push Notifications nachträglich bekommen, die ich bereits schon mit mit meine Samsung bekommen habe. Ich glaube daher, dass man eher auf den google servern sich "registriert", dass man etwas empfangen möchte. Hey aber nicht verwechseln mit den LOKALEN Notifcations. Das gibt es ja auch. Da braucht man kein Google Cloud Server. Man kann daher eigentlich sowas selbst basteln, aber da müsste die App tatsächlich im Hintegrund laufen. Allerdings weiß ich zu mindest bei Unity, dass die Verbindung irgendwann abbricht, wenn es im Hintergrund ist. Vllt ist das mittlerweile anders.
  24. MaZy

    Gegenstände aufheben

    An einem GameObject binden hört sich jetzt so an, als meintest du einfach das Gegenstand den Parent setzen. gegenstand.transform.parent = GameObject. Sonst weiß ich jetzt nicht genau was du meinst.
  25. Bei sowas sollte man sich fragen, wie ich das als Mensch erst mal verhindern würde. Genau wir betrachten das erste Objekt und dann das zweite Objekt und sehen ist gleiche Höhe. Also dazu etwas addieren. Programmiertechnisch wäre das einfach die Y vom letzten merken und schauen, ob das neue den gleichen Wert hat. Wenn ja kannst du addieren oder wieder randomen wie auch immer.
×