Jump to content
Unity Insider Forum

MaZy

Members
  • Content Count

    527
  • Joined

  • Last visited

  • Days Won

    14

MaZy last won the day on July 12

MaZy had the most liked content!

Community Reputation

155 Excellent

About MaZy

  • Rank
    Advanced Member
  • Birthday 02/20/1988

Profile Information

  • Gender
    Male
  • Location
    Hannover

Recent Profile Visitors

9,988 profile views
  1. Hallo, ich bin viel in Discord unterwegs und ja auch hier von Forum. Ich finde man kann aus dem Discordserver viel mehr machen. Für mich sieht der Discordserver eher nach einem Chatroom aus. Sehe da auch selten ein Admin oder so unterwegs. Wahrscheinlich sind sie aber nur unsichtbar ^^. Klar es gibt ein Channel für den Unity Support, aber der Server hat viel mehr potenzial, aber es wird nicht ausgenutzt. Z.B. Warum gibt es sowas wie #work-in-progress nicht? Manche zeigen gerne ihre aktuellen Arbeiten z.B. per Video oder Screenshots. Das sorgt für interessante Gespräche und für mehr Informationsaustausch. Oder #release, #completed-projects oder so, wenn es um fertige Projekte geht. Sowas wie #unitytips, wo man Tipps über jegliche Art zeigt (Twitterlink, Youtubelink, Bild oder einfach nur Snippet Code) Was ich auch cool finden würde wäre, wenn man Rollen zuweisen kann. Programmierer, Designer oder sowas. Weiß allerdings nicht, ob man dafür irgendwas scripten muss (z.B. wegen commands). Das war es erst mal.
  2. Warum ist das Regel Nummer eins? Kenne ein paar VR spiele die das haben. Ja auch das mit Bild schwärzen. Also ich hab bei Pavlov VR mal angeschaut. Da ist das auch so wie ich mir das vorstelle. Sobald man mit dem Kopf gegen die Wand kommt (mit etwa 30-50 cm Abstand) wird man in die entgegengesetzte Richtung zurück "gestoßen". Wahrscheinlich gehe ich falsch vor. Ich muss vllt tatsächlich die Kollision abfragen und selbst per Script dann berechnen, dass Player Gameobject zurückgestoßen werden. (nach 15min) Ich habe mal mal ein Testprojekt erstellt und getestet. War mir nicht sicher, ob OnCollision* bei Childobjekte auch geht. Es geht nicht. Aber da wo der Rigidbody ist (oder beim Parent?) kann ich abfragen, welcher Collider kollidiert. So kann ich zurück stoßen lassen. OnTrigger* geht als Child und muss von da an Parent schicken (dazu hab ich eh bereits standardscripte fertig ^^), aber hat keine Kollisionspunkte sondern so grobe Punkte. Hab bisschen rumprobiert und damit könnte ich das eventuell lösen.
  3. Hallo hab ein Problem, was ich nicht lösen kann. Folgendes sieht man im Hierachy. Player --ControllerLinks --ControllerRechts --Camera Um den Spieler zu bewegen bewegt man natürlich Player GameObject. In VR ist so, dass die Camera "dich" repräsentiert. Also wenn du in der Wirklichkeit dich nach Links bewegest.. ist z.B. die Camera in der localposition x = -1 oder so. Das heißt. Der Player bewegt sich nicht.. sondern die Kamera. Folgende Probleme hat man damit. Wenn Player einen Charactercontroller hat, wird er sich mit der Camera nicht bewegen. Man kann also dann in die Wände reingucken. Nun hab ich gelesen, dass man ja vllt den Körper zu der Kamera Position bewegen kann. Das geht.. nur doof, dass dieser "Körper" nicht aber Playerobject ist, denn wenn es so wäre, würde man sich unendlich bewegen, weil ja eigentlich beide sich versuchen immer zu anpassen. Und da es nicht Playerobject ist, wird Player selbst nicht mit Wänden kollidieren. Denn die Idee war, wenn ich mit der Kamera zu nah an die Wand kommen, dass ich nach hinten gepusht werde Vllt habt ihr Ideen?
  4. Uhh so langsam bin ich mit meinem eigenem Network System fertig.

  5. Weiß leider auch nicht wirklich weiter Hab mal Frame by Frame angeschaut.. da bewegt sich sogar in der Scene-Ansicht zuerst,, dann GameView und danach der eigentliche Client, der die Position gesendet hat. Also ja irgendwie schon, aber das ist nur ein bis zwei Frames vorne. Das finde ich noch in Ordnung. Nein auf gar keinen Fall. Die Clients können niemals selbst ein Server sein, weil der Servercode bei dem Client bzw in der Unity Editor nicht vorhanden ist. Der Server ist ein separates C# Consolen Projekt. Ich entwickle nämlich eigenen Network System und hab erst mal mit der Konsolen Version angefangen. Ja das stimmt schon, aber später bei komplexen Multiplayer teil wird nicht Da der Netzwerk Teil von mir programmiert wird, gibt es sowas nicht ^^. Es wird dafür eine sehr low level api Library (c# socket etwas vereinfacht) benutzt der mit Unity nichts zu tun hat und fragt auch nichts ab, ob man Buildversion hat oder so. Ja empfinde ich auch so. Ich kann leider auch nicht so wirklich überprüfen. Ich werde deltaTime und fixedDeltatime mal anschauen, ob die unterschiedlich sind. Ansonsten hab ich auch keine Ahnung Hab auch mal bei 2019er version nochmal Frame by Frame angeschaut.. da sieht man, dass es ca 3-4 Frames im Editor sich schon bewegt. danach fängt der eigentliche Client, der die Position gesendet hat an und dann die anderen Clients. Die FPS Anzeige sagt ja auch etwas aus ^^ EDIT: So hab mal was herausgefunden. Hab nun editor auf low quality eingestellt und den build A auch und Build B war dann auf ultra eingestellt. Sehe da.. editor und build a sind gleich schnell und build B ist verlangsamt. Also ist da wohl eine Grafikeinstellung der etwas verlangsamt oder irgendwas. Muss mal rumfummeln. Wenn ich das finde schreibe hier nachträglich. EDIT2: So es liegt eindeutig an VSYNC. Hab nämlich VSync ausgeschaltet (im Editor und auch für Builds) und auf 60 Frames gelockt und siehe da.. alle bewegen sich nun gleichzeitig. Bei VSync aber ist da ne übelste Verzögerung. Nun muss ich das noch mit 2018 abgleichen
  6. Hallo kurz erklärt. Hab ein Multiplayer Spiel, wo ich mit einem Client die Position an Server sende und der Server sendet an andere Clients weiter. Nun hab ich gemerkt, dass der EDITOR viel FRÜHER sich bewegt, als die anderen Clients. Als würde dieser Editor die Zukunft kennen und wissen welche Position nun der Client haben wird und bewegt sich schon. Das passiert nur beim Editor. Beim Build ist alles ok. Ist schwer zu erklären und hab deswegen ein Video dazu gemacht: https://streamable.com/nhrfc Und hab noch Video mit 2018.3er version und da funktioniert ist wunderbar. https://streamable.com/z67ej Wisst ihr woran das liegen kann?
  7. Hallo ich hab ein Problem mit der 180 Grad Rotation, wenn ich etwas mit Quaternion berechnen lasse. Und zwar hab ich ein Script wo man sein Charakter relativ zur Kamera in 8 Richtungen bewegen kann und sich dahin auch dreht. Wenn man W drückt dreht man sich in die Richtung wo Kamera guckt. Drückt man D dann dreht man sich nach rechts. Wenn man nun die Kamera bewegt.. dreht sich logischerweise der Charakter mit (solange man die Bewegungstasten drückt). Wie die typischen Third Person Spiele mit Orbit Kamera (meist mmorpgs). Dabei passiert folgendes. Drücke ich W und Kamera ist 100 Grad bei Y dann dreht sich der Charakter auch auch in die Richtung 100 Grad. Ich hab nun gemerkt, wenn bei der Kamera Y-Axe 180,-180 oder auch bei 0, 360 steht, dann wird aber beim Charakter (wenn ich W drücke oder S) nicht Y 180 vergeben, sondern xyz ist dann (0, 180, 180) und ich weiß nicht wieso. Also Rotatation Y Axe 180 bedeutet, dass man beider Z Axe in die Gegenrichtung guckt (also quasi forward = 0,0,-1) und bei 0 oder 360 wäre es Richtung Z (also forward = 0,0,1). Nun wenn ich W und A drücke, dann ist man bei (0,135,0) und bei W UND D (0, 225, 0). Die Werte sind korrekt. Verstehe nicht warum bei 180 sowas passiert. Wie kann man das denn lösen. var camForward = Camera.main.transform.forward; camForward.y = 0; var lookRot = Quaternion.FromToRotation(new Vector3(-h, 0, v), camForward); // h = horizontal, v = vertical inputs lookRot.eulerAngles.DebugValue("lookRot Euler", false); character.movement.SetRotation( Quaternion.RotateTowards(character.movement.transform.rotation, lookRot, smoothSensivityCharacterTurn * Time.deltaTime) ); EDIT: Sehe auch bei 0 Grad hat es bei auch bei Rotation (-180,0,0) angezeigt. Voll komisch EDIT2: Hab fürs erste mal einfach den eulerAngles.y von lookRot genommen und somit funktioniert mein Script zwar, aber mich wundert es trotzdem warum es so berechnet wird. character.movement.SetRotation( Quaternion.RotateTowards(character.movement.transform.rotation, Quaternion.Euler(new Vector3(0, lookRot.eulerAngles.y,0)), smoothSensivityCharacterTurn * Time.deltaTime) );
  8. Profiler anschmeißen und anschauen warum dein FPS runter geht.
  9. 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?
  10. 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).
  11. 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.
  12. 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).
  13. 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.
  14. 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?
  15. 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.
×
×
  • Create New...