Jump to content
Unity Insider Forum

Leaderboard


Popular Content

Showing content with the highest reputation since 08/20/2019 in Posts

  1. 4 points
    Moin, ich wollte hier mal kurz mein Spiel vorstellen an dem ich seit 1,5 Jahren arbeite. Das Spiel ist ein sogenanntes "Fast Pace" Racing Spiel im Weltraum. In dem Spiel gibt es aktuell 4 Planeten und eine Raumstation von der aus man startet. Diese Station ist die Basis für den Spieler. Dort kann man das Leaderboard ansehen, sein Schiff wählen, seine Statistik ansehen etc.. Es soll eigentlich alles ingame stattfinden ohne auf irgendeine Webseite gehen zu müssen. Das Spiel hat ein 6DoF physikbasiertes Flugmodel und ist Open World, so dass später auch neue Sonnensystem möglich sind. Am Anfang wollte ich die Rennstrecken in einzelne Szenen packen, konnte aber das Wechseln von einer Szene zur anderen nie ohne kleine Lags hinbekommen. Deshalb habe ich dann alles auf Open World umgebaut, was im Nachhinein eine gute Entscheidung war, denn jetzt gibt es keine Grenzen mehr in der Größe. 🙂 Desweiteren benutze ich ein für mein Spiel angepasstes floating origin system mit double precision. Das Sonnensystem hat aktuell einen Durchmesser von ca. 160000 Km mit Planeten die einen Durchmesser von 400 - 500Km haben. Die Rennstrecken befinden sich auf den Planeten oder im Weltraum, z.B. im Asteroidengürtel. Die Rennstrecken sind verschieden schwer und können auch mal auf der Nachtseite liegen. Außerdem muss man bevor man ein Schiff betritt auswählen welchen Controller man benutzt (Joystick, Maus / Tastatur oder Gamepad). Das Leaderboard ist dann nach Rennstrecke und Controller aufgeteilt. Das mache ich deshalb, weil ich aus anderen Spielen die ständigen Diskussionen kenne, das man diesem oder jenem Controller im Vorteil ist. Das Spiel ist als Single Player geplant mit einem Leaderboard in dem alle Spieler ihre Rennzeiten vergleichen können. Development Progress Unity Connect So genug gelabert, hier was zum gucken zeitlich geordnet. 🙂 Hier ein erstes Video wo ich die Machbarkeit getestet habe. Ein Video zur Autolanding Mechanik Character Test Video Trailer für ein Schiff Video zur Überarbeitung der Planeten
  2. 3 points
    100 Schiffe kämpfen ohne Network Culling. Das bedeutet alle bekommen Daten unabhängig davon wie weit sie weg von einander sind. Lasst euch nicht von dem Arrow gewackel nicht irritieren. Es laggt nicht sondern, es sucht den Mittelpunkt und durch den Particles versetzt sich das jedes mal (hab vergessen den Mode zu ändern). https://i.imgur.com/aEuVL7w.gifv
  3. 2 points
    So, die erste Testrennstrecke ist fertig und der RaceController funzt auch so weit ganz gut. Endlich wieder racen. 😎
  4. 2 points
    An sich ist die Update Methode ja genau dafür da, um in jedem Frame etwas zu machen oder wenigstens abzufragen. Natürlich summiert sich alles, was in all den Update Methoden gemacht wird. Genauso summiert sich auch alles was mit der Physik zu tun hat. Also z.B. auch die OnTrigger Events. Aber eine If Abfrage ob etwas nun eingetreten ist, oder nicht, kostet so gut wie gar nichts. Du solltest dir jetzt vielleicht überlegen, ob es gut ist, dass jedes interagierbare Objekt ständig überprüft ob der Player im Trigger ist und dann selber etwas ausführt. Oder ob es vielleicht besser ist, dass nur der Player triggert und erkennt, ob da ein Interagierbares Objekt ist. Wenn er das macht, dann kann er auch gleich die Tasten abfragen. Aber wie auch immer: Wenn jetzt das eine oder andere Objekt triggert und dann erkannt wird, dass der Player einem interagierbaren Objekt nahe ist, solltest du einfach eine entsprechende Variable auf true setzen. Und sobald sich der Player aus dem Trigger raus bewegt sollte diese Variable wieder auf false gehen. In der Update Funktion würde dann ein Abfrage auf die Trigger-Variable sein. Und nur wenn diese Variable true ist, würde auch ein Tastendruck der Taste E abgefragt werden. Ist die Variable nicht true, wird eben nichts weiter gemacht. Ganz einfach und kostet fast keine Leistung. Es gäbe auch die Möglichkeit innerhalb der OnTriggerStay Funktion die Taste E abzufragen. Aber das würde ich eigentlich nicht machen, weil diese TriggerEvents mit der FixedTime ausgeführt werden und das kann viel öfters sein, als es in der Update gemacht würde. (Je nachdem, was für ein Wert in der FixedTime steht und mit welcher Framerate dein Spiel läuft) Auf jeden Fall kannst du die Tastenabfrage nicht in der OnTriggerEnter machen, denn dann müsstest du E genau in dem Moment drücken, in dem dein Player in das Triggerobjekt eindringt. Das wirst du nur ganz selten mal schaffen.
  5. 2 points
    Ich instanziere in meinem Spiel um die 1.000 Objekte vor dem Laden und bewege mich da bei etwa 1-3 Sekunden.....+ Zuweisungen genauso wie du es benötigst. Beim Ladevorgang ist das nichts wofür dich ein Benutzer je anklagen wird
  6. 2 points
    Warum willst du überhaupt FixedUpdate für eine lineare Animation benutzen? Gibt's doch gar keinen Grund für. yield return null; rein und fertig. Nein. Standardmäßig (!) ist der Zielwert (!) 50 Mal pro Sekunde. Aber ein exaktes einhalten einer konstanten Frequenz ist gar nicht möglich. Lies dir am besten mal das hier durch: http://blog.13pixels.de/2019/what-exactly-is-fixedupdate/
  7. 2 points
    Auch ein Kommentar ein Node. Wenn du XmlReader Verwendest: XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.IgnoreComments = true; using (XmlReader reader = XmlReader.Create("input.xml", readerSettings)) { XmlDocument myData = new XmlDocument(); myData.Load(reader); // etc... }
  8. 2 points
    Hi. Anfang des Jahres habe ich mal ein physikalisches Roulette begonnen. Ich wollte glaube bloß prüfen, ob es machbar ist. Es funktioniert eigentlich ganz gut. Zusätzlich hatte ich es im Juni noch in die Unreal portiert, um auch die Engine mal bissl besser kennenzulernen. Lief auch super und hat Spaß gemacht. Den Post dazu kann man im Unreal-Forum nachlesen. Optisch ist es natürlich noch nicht vollendet, aber es funktioniert erstmal. Ich habe es öfters mal "automatisiert" spielen lassen. Die geworfenen Zahlen waren bei 1000+ Spielen gut gleichverteilt. Das hat mir gut gefallen. Aktuell habe ich wieder ein wenig Zeit dafür und werde es denke mal fertigstellen. Veröffentlichen wäre sogar auch möglich, aber nur mit der Hauptbedingung, dass man kein Echtgeld einsetzten kann und auch keins gewinnen kann. Was auch nicht mein Ziel ist und auch von Gesetzes wegen eh unmöglich ist. Glücksspiele sind auch eigentlich nicht so meins. Gerne würde ich noch ein Croupier/-in ins Spiel bringen, aber das wird wohl dann eher ein Roboter, oder sowas. Mal schauen. Fragen beantworte ich gerne.
  9. 1 point
    Eben und mit der Idee kann ich auch das Problem des speicherns von Wetterdaten und Uhrzeit umgehen, wenn er schlafen geht kann sich alles verändern. Uhrzeit und Wetter werden dann beim Spielstart per Zufall generiert. Die Idee is denke ich sehr passend und spart an vielen Punkten sehr viel Arbeit. 😀
  10. 1 point
    Die Idee finde ich gut. Oder dein Charakter geht in eine Höhle, Schlafplatz oder was auch immer. So wie viele andere Spiele das auch machen. Damit verhinderst du auch ohne viel Denken, dass in deinem Charakter irgendwas dummes spawned.
  11. 1 point
    Du kannst Areale für Tiere machen, aus denen diese nicht herausdürfen. Beim "hetzen" laufen sie an der Grenze dann eben wieder zurück oder schon vorher in eine andere Richtung. Und dann kannst du die Entfernung vom Spieler zum Areal-Spawner messen oder so. Wozu ist es denn zwingend nötig, die Tierpositionen zu speichern? Du kannst ja auch einfach sowas wie "Menge an getöteten Tieren" pro Spawner speichern. Ist es für das Gameplay nötig, jedes Tier im Detail persistent zu speichern? Genau. Und da gibt es viele Ansätze. Aber um eine Art level of detail für die Messung wirst du wahrscheinlich nicht herumkommen. Du kannst aber die Abfragen der Messung in eine Queue packen und diese werden dann jeden Frame abwechselnd abgefragt. Also Update Frame 1 = Tier 1 - Tier 10 misst, Update Frame 2 = Tier 11 - 20 misst. Oder so in der Art.
  12. 1 point
    Nur ein paar Anregungen: Tiere kannst du mMn problemlos despawnen, wenn der Spieler z.B. weiter als x Meter entfernt ist und das vielleicht noch über eine Dauer von x Minuten Für das spawnen von Tieren und prüfen, ob diese schon oder noch da sind bzw. leben, brauchst du keinen Collider. Du packst dir einfach Referenzen in eine Liste oder so und kannst jederzeit abfragen, ob dein Tier schon oder noch lebt. Hierfür bekommt jedes Tier eine Eigenschaft Health. Wenn diese 0 ist, ist das Tier tot. Prozentualen Kram kannst du mit https://docs.unity3d.com/ScriptReference/Random.html machen Das mit der Entfernung messen kann komplexer werden. Aber grundsätzlich kannst du das Distanz messen für Spawner auf verschiedenen Frames ausführen und/oder erst pro Areal (1km² z.B.) prüfen, ob der Spieler darin ist und dann nur darin alle Prüfungen pro Spawner machen oder oder oder, nicht ganz trivial.
  13. 1 point
    Du hast lediglich dein Array mit einer Größe von 5 Feldern erstellt. In diesen 5 Feldern sind aber überall NULL-Verweise, weil hinter dem jeweiligen Feld kein Spieler-Objekt existiert. Du musst also für alle Felder einen Spieler instanzieren. Ist Spieler eine normale Klasse, oder erbt diese von MonoBehaviour? Davon hängt ab, wie du die Felder initialisierst. Wenn die Klasse nicht von MonoBehaviour erbt, geht das z.B. so for(int i=0; i<spielerListe.Length; i++) { spielerListe[i] = new Spieler(); }
  14. 1 point
    Wenn ich jetzt gerade mal so in meine magische Glaskugel schau, dann sehe ich, dass du einen Fehler gemacht hast! Denn wenn nicht, würde es genauso funktionieren, wie bei dem Tutor aus dem Video. Hilft dir das? Nö? Schade, aber ich (wir) kann (können) dir nicht helfen, wenn du uns lediglich erzählst was passiert und dann ein Bild zeigst, wie deine Szene aussieht. Stell dir mal vor, ich würde dir erzählen, dass bei mein Auto immer eine Warnleuchte im Armaturenbrett leuchtet. Und dann zeige ich dir zusätzlich ein hübschen Foto, wie mein Auto auf einem Parkplatz steht. Jetzt müsstest du mir doch eigentlich sagen können, was mit meinem Auto los ist! Nein? Ist doof, oder? Aber so ist das nunmal wenn man nur irrelevante Infos bekommt. Also geh mal in dich und überlege dir, was wir uns anschauen sollten um dir helfen zu können. Kleiner Tipp: Ein Screenshot von der Szene ist es nicht!
  15. 1 point
    Klar, geht alles. Musst halt nur schauen, wie viel Aufwand das ist. Wenn du statt RBG HSV nimmst, kannst du mit dem H-Wert den Farbton bestimmten, S steht für Sättigung und V sozusagen für die Helligkeit. Du baust also einen Farbwert mit einem H-Wert zwischen Gelb und Braun. Du kannst auch den S-Wert vom H-Wert abhängig machen, um da eine Linie mit einem anderen Winkel durch das Farbspektrum durchzuziehen. Am Ende generierst du den Farbwert dann mit Color.HSVToRGB.
  16. 1 point
    Zum einen gibt's natürlich den stinknormalen Test, dass du das Spiel laufen lässt und schaust, wie gut das geht. Dann gibt's aber noch Unitys Profiler, mit dem man Frame für Frame schausn kann, was wieviel gekostet hat. Und zuletzt kannst du noch die Performance von zwei Dingen, die dasselbe auf unterschiedliche Art tun, mit einem Benchmark testen. Dafür hab ich mal eine kleine Klasse geschrieben, die man dafür benutzen kann. Und weil ich vergessen habe, den Post auch abzusenden, war malzbie jetzt schneller
  17. 1 point
    Es gibt den Profiler, der dir richtig viele Informationen bieten kann. https://docs.unity3d.com/Manual/Profiler.html Schau dir das und die die nachfolgenden Kapiten einfach mal an.
  18. 1 point
    Das hier ist kein Whatsapp, du darfst gerne beliebig lange mit deinen Beiträgen brauchen xD
  19. 1 point
    Wir reden hier von zehn mal "ein paar", sagen wir nochmal 10 Statements, mal 60 pro Sekunde. Mach von mir aus 144 draus. Das wären 14.400 Statements. Weißt du, wie viele Milliarden heutige Durchschnittsprozessoren davon pro Sekunde raushauen können? Mach dir mal keinen Stress. Faustregel ist: Performance ist erst dann dein Problem, wenn es überhaupt ein Problem ist. Wenn du performante Dinge schreibst ist das nicht schlecht, aber wenn du die Dinge erstmal zum Laufen kriegst ist das eben auch nicht schlechter. Bin mir nicht sicher, ob ich dich richtig verstehe, aber ja. Objekte sollten sich so viel es geht um sich selbst kümmern. Objekte, die andere Objekte so richtig vollständig kontrollieren, sind keine gute Idee.
  20. 1 point
    Ja, da ist Pooling super.
  21. 1 point
    Kleine Ankündigung: Soda gibt's jetzt stark reduziert im Bundle mit Odin, aber nur für Schüler und Studenten! https://assetstore.unity.com/bundles/back-to-school-2019?&utm_content=190909-A%24-bts19-em (Und ja, mein Design stinkt ein wenig ab gegen die anderen... dafür ist der Code gut )
  22. 1 point
    Nicht wirklich. Warum skalierst du nicht einfach die Strecke auf 100%, und lässt die Autos, wie sie sind? Ist dieser Track Editor von dir oder hast du da keinen Einfluss drauf? Warum spuckt dieses Programm überhaupt Modelle mit zufälliger Skalierung aus?
  23. 1 point
    Instantiate gibt dir die Referenz auf die neu erstellte Prefab-Instanz zurück. var rocket = Instantiate(rocketPrefab);
  24. 1 point
  25. 1 point
  26. 1 point
    Du hast aber schon UI Elemente, auf denen dieser Code liegt, oder?
  27. 1 point
    Die Idee, dass jedes Objekt seine Daten hält, finde ich gut. Hierzu benötigt natürlich jedes Objekt seine eigene Guid oder ID oder was auch immer für die Zuweisung. Beim Speichern gäbe es verschiedene Wege. Du könntest alle Objekte mit https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html suchen (diese müssen zu der Zeit aktiv sein). Du könntest aber auch die Objekte bei dem Speicher-Manager registrieren und beim Request die Daten liefern (gibt aber eine bestimmte Abhängigkeit). //deine datenstruktur [Serializable] public class PlayerData { public int id; public posX, posY, posZ; } //deine mono behaviour public PlayerData playerData = new PlayerData(); //speicher manager var arr = FindObjectsOfType<DeineMonoBehaviourType>(); var savegameList = new List<PlayerData>(); foreach(var x in arr) { savegameList.Add(x.playerData); } //save Sowas in der Art.
  28. 1 point
    Man sieht beim zweiten Bild schlecht, aber da ist ein gelber Rechteck, wo man bestimmt, wie weit der Text gehen darf. Den hab ich bei mir angepasst. Der gelbe Rechteck gibt es standardmäßig bei TM
  29. 1 point
    OK, also ich bin eine ganze Ecke weiter gekommen, speichern funktioniert soweit: IEnumerator RecordSavegamePicture() { yield return new WaitForEndOfFrame(); texture2D = ScreenCapture.CaptureScreenshotAsTexture(); yield return new WaitForEndOfFrame(); EditPicture(); } private void EditPicture() { texture2D = ScalePictureTexture(texture2D, savegamePictureTargetWidth, savegamePictureTargetHight); SavePicture(); } private Texture2D ScalePictureTexture(Texture2D source, int targetWidth, int targetHight) { Texture2D result = new Texture2D(targetWidth, targetHight, source.format, false); Color[] rpixels = result.GetPixels(0); float incX = (1.0f / (float)targetWidth); float incY = (1.0f / (float)targetHight); for (int px = 0; px < rpixels.Length; px++) { rpixels[px] = source.GetPixelBilinear(incX * ((float)px % targetWidth), incY * ((float)Mathf.Floor(px / targetHight))); } result.SetPixels(rpixels, 0); result.Apply(); return result; } private void SavePicture() { // Textur in JPG und schreibbares Byte-Array Umwandeln byte[] byteTextureArray = texture2D.EncodeToJPG(85); // Dateinamen festlegen file = path + "/SavePicture_" + selectedSavegame + ".jpg"; // Speichern FileStream fileStream = File.Open(file, FileMode.OpenOrCreate); fileStream.Write(byteTextureArray, 0, byteTextureArray.Length); fileStream.Close(); } Nur beim Laden harkts noch, ich kann zwar den Bytestream wieder lesen und in ein Image bringen und dann als Sprite zuweisen, aber dann ... Bekomme nur ein schwarzes Bild. private void LoadPicturesTest() { for (int i = 0; i < savegamePictureSpriteArray.Length; i++) { file = path + "/SavePicture_1.jpg"; if (File.Exists(file)) { // Filestream öffnen und Daten in Byte-Array schreiben FileStream fileStream = File.Open(file, FileMode.Open); byte[] byteTextureArray = new byte[fileStream.Length]; fileStream.Read(byteTextureArray, 0, (int)fileStream.Length); fileStream.Close(); // Textur aus dem Byte-Array erzeugen Texture2D texture2D = new Texture2D(savegamePictureTargetWidth, savegamePictureTargetHight); texture2D.LoadImage(byteTextureArray); texture2D.Apply(); // Aus der Textur das Sprite erzeugen savegamePictureSpriteArray[0] = Sprite.Create(texture2D, new Rect(0, 0, savegamePictureTargetWidth, savegamePictureTargetHight), Vector2.zero); savegamePictureImage.sprite = savegamePictureSpriteArray[0]; Debug.Log("Erledigt!"); } } } EDIT: Sehe gerade, nen Bug meldet er auch: Assertion failed: Invalid AABB inAABB UnityEngine.Canvas:SendWillRenderCanvases() EDIT 2: Super Fehler! Beim testen vergessen Länge und Breite des Bildes anzugeben, Code funktioniert wunderbar:
  30. 1 point
    Macht z.B. dann Sinn, wenn Du in einem Build für Android keine Funktionen von iOS einbinden willst bzw. kannst, weil der Compiler dann schreit, dass Bibliotheken fehlen. Dann musst Du nicht manuell andere Klassen einbinden oder multiple Projekte pflegen, sondern kannst das so automatisch "auskommentieren".
  31. 1 point
    https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-if PPS2 steht für Post-processing Stack v2. das using wird nur compiliert, wenn es installiert ist. I2LOC ist ein asset aus dem Asset store, und die Methode wird nur compiliert wenn das asset installiert ist.
  32. 1 point
    Das mit der Hierachie funktioniert einwandfrei. Garantiert auch bei dir. Alles was innerhalb einens Canvas ist, wird von hinten nach vorne gezeichnet. Also ist das oberte Element im Hierachiebaum ganz hinten, und das nächste eine Ebene drüber, usw....
  33. 1 point
    Wenn ich die Beschreibung von Resize richtig verstehe, skaliert die Methode nicht den Inhalt der Textur, sondern setzt einfach die neue Auflösung ohne Farbdaten. https://answers.unity.com/questions/556913/scaling-resizing-an-image-texture2d.html
  34. 1 point
    An sich ist das alles schon sehr gut gemacht. Aber für mich ist das alles viel zu dunkel. Dein Schiff nimmt kaum oder gar keine Beleuchtung von den Lichtquellen auf. Gerade wenn es auf der Station landen, die selbst super ausgeleuchtet ist, kann man das sehen. Klar, das Schiff ist schwarz! Trotzdem sollte eine Sonne oder Lampe ganz klare Glanzkanten erzeugen. Auch in der Station wirken sich die Lichter viel zu gering auf den Piloten und das Schiff aus. Ich weiß nicht ob das so gut ist, wenn man ein "Racing" Game macht. Also ich würde schon gerne meine Gegner sehen können. Schau dir mal Bilder von Elite Dangerous an. Dort ist es auch dunkel, aber trotzdem haben Sonnen und Stationslichter einen viel größeren impact auf ein Schiff oder Asteroiden, als es bei dir der Fall ist. Dann ist mir aufgefallen, dass dein Pilot, wenn er außen über die Station läuft, weiche Schatten wirft (bzw. zu helle Schatten wirft). Weiche schatten gibt es nur wenn Licht gestreut wird und der Hauptteil der Streuung kommt von der Atmosphäre, wie du am Tage sehen kannst, selbst wenn die Sonne verdeckt ist. Da es draußen im All keine Atmosphere gibt und auch kaum was Anderes da sit, was Licht reflektieren würde, gibt's auch keine weichen Schatten. Das ist natürlich kritik auf ganz hohem Niveau. Aber du möchtest ja sicherlich auch mal hören, was Andere so meinen. Die Modelle sind super und die Planeten, Sonne , Stationen auch. Richtig klasse fand ich den Gaseffekt von den Triebwerken und die Atmospheren deiner Planeten. Das war alles sehr glaubhaft. Ich bin jedenfalls gespannt, wie's weiter geht.
  35. 1 point
    Ok hat lange gedauert, aber man muss mit serializeObject arbeiten. Man muss also in meinem fall das hier machen SerializedObject scenenObjectSO = new SerializedObject(scenenObjects); var scenenNetId = scenenObjectSO.FindProperty("scenenNetId"); scenenNetId.intValue = i; scenenObjectSO.ApplyModifiedProperties(); SerializedObject netObjectSO = new SerializedObject(netObject); var netIdProp = netObjectSO.FindProperty("netId"); netIdProp.intValue = i; netObjectSO.ApplyModifiedProperties();
  36. 1 point
    Ich nutze für mein Spiel die Musik von Eric Matyas https://soundimage.org/ Hier gibt es auch Loops.
  37. 1 point
    Ich würde mir da jetzt keinen großen Kopf machen. So wie es der Kerle da im Video gesagt hat, erzeugt jeder Animator eine Grundlast, egal ob gerade auch wirklich ein UI Element animiert wird oder nicht. Diese Grundlast ist meiner Erfahrung nach nicht besonders hoch, summiert sich aber natürlich, wenn viele UI Elemente einen Animator haben. Ein Mainmenu ist in der Regel eine eigene Szene, wo die ganzen vielen Elemente drin sind. Dort ist es meiner Meinung nach total egal, ob da eine hohe Grundlast auftritt, denn da passiert ja sonst nichts! Innerhalb des Spiels könnte es schon sein, das ein oder zwei Frames für die UI drauf gehen, "wenn" da viele Dinge animiert werden, die vielleicht besser ins Game investiert wären. Joah... kann man natürlich optimieren. Ich sehe da aber trotzdem keinen Grund, sich die dollsten Coroutinen oder Tween zu bauen, wenn ich das mit ner Animation in kurzer Zeit lösen kann. Außerdem kann man ohne Weiteres auch mehrere Elemente mit einem einzigen Animator steuern, wenn sieh in der Hierachie unter dem Objekt mit dem Animator sind. Just my two cents!
  38. 1 point
    Hier sind ein paar gelistet: https://de.wikipedia.org/wiki/Kürzester_Pfad Der üblichste Algorithmus für dein Problem ist der Dijkstra-Algorithmus. Der ist auch vergleichweise noch recht einfach zu implementieren.
  39. 1 point
    Nehmen wir mal an, deine Wegpunkte sind GameObjects mit je einer "Waypoint"-Komponente dran. Dann kannst du der Klasse eine Array-Feld geben, in dem alle Wegpunkte drinstehen, zu dem der Character von dort aus kann: public Waypoint[] connectedWaypoints; Da kannst du dann andere Wegpunkte einfach im Inspektor reinziehen. Dann kannst du noch eine hübsche OnDrawGizmos-Methode basteln, die dir visualisiert, wie die Punkte verbunden sind: private void OnDrawGizmos() { // Nur sicherheitshalber... if (connectedWaypoints == null) return; Gizmos.color = Color.blue; foreach (var waypoint in connectedWaypoints) { Gizmos.DrawLine(transform.position, waypoint.transform.position); } } Und jetzt kannst du einen beliebigen Pathfinding-Algorithmus über alle deine Waypoints drüberlaufen lassen und brauchst nie wieder deinen Code erweitern, egal wie groß das Netz wird.
  40. 1 point
    Das klingt irgendwie, als würdest du für jedes neue Objekt zusätzlichen Code schreiben? Wenn ja: Das ist auf jeden Fall nicht richtig so. Wie definierst du denn aktuell deine Punkte und deren Verbindungen?
  41. 1 point
    Deine Idee gefällt mir Wattsefakk! Bin gespannt ob noch jemand mit einer unerwartete Möglichkeit aufwartet.
  42. 1 point
    private Playerstate _enum; public Playerstate Enum { get{ return _enum; } set{ _enum = value; // Hier jetzt eine Funktion ausführen die dein Code den du bei Änderung ausführen willst } } So würde ich das ja jetzt machen gibt aber vllt noch andere möglichkeiten
  43. 1 point
    Alter Schwede! Aber echt geile Flieger!
  44. 1 point
    Das meiste was ich zu zeigen habe hat leider nicht viel mit Unity ansich zutun da das meiste gameplay noch nicht vorzeigbar ist, alles was ich habe sind ein paar neue screenshots ^^ https://sketchfab.com/3d-models/star-wars-a-wing-deda3f0e827347aea42d0bb340e53ed3 https://sketchfab.com/3d-models/star-wars-a-a5-heavy-speeder-truck-a04c9541663044eb97ce648a385e612c https://sketchfab.com/3d-models/star-wars-y-wing-bomber-f260b89a362b4564a5ced176905a8878 https://sketchfab.com/3d-models/star-wars-tie-bomber-3a953f309c584e269eda1a40955c04bc https://sketchfab.com/3d-models/star-wars-tie-interceptor-27af6a0dbbec45fc8c497aa691f3042a https://sketchfab.com/3d-models/star-wars-rebel-soldier-3229acc2be1b477a9b264c7cd36428c5 https://cdn.discordapp.com/attachments/406619157124087808/575409414345981953/Tank1.mp4 https://skfb.ly/6KoEy https://sketchfab.com/3d-models/tx-130-saber-class-fighter-tank-a4a9c952131b486797a0545740b89110 https://sketchfab.com/3d-models/star-wars-thermal-detonator-798cbdf75a684885b7b9ab72945b856d https://sketchfab.com/3d-models/star-wars-x-wing-823b1268a17f4979a2c4639fa144e42a https://cdn.discordapp.com/attachments/406619157124087808/522139383827136538/Walker2.mp4 https://cdn.discordapp.com/attachments/406619157124087808/522135084506021899/Walker.mp4 https://cdn.discordapp.com/attachments/406619157124087808/518769320743010339/Inventory.mp4 https://skfb.ly/6DDxA https://sketchfab.com/models/91d920eea2f845f1b874b3b462c22e32 https://skfb.ly/6ARqZ Also das nenne ich mal Spam ! Sorry dafür 😅
  45. 1 point
    Ja doch, dann sind wir da auf einem Nenner
  46. 1 point
    Mach dir mal ein paar Zeilen davor, mit Debug.Log. Damit kannst du testen, welche der Variablen jetzt den Wert null hat. Kandidaten sind: TrainerStamm TrainerStamm TrainerStamm.Attributes TrainerStamm.Attributes.GetNamedItem("x") TrainerStamm.Attributes.GetNamedItem("y") Je nachdem, ob es sich hier um Objekte oder Struct-Werte handelt, kann jede dieser Variablen als Wert null haben und deshalb die Exception auslösen.
  47. 1 point
    Zu meinem Network System zeige ich hierwie ein ServerLogic bei meinem Networksystem, mit einem Chatserver Beispiel, funktioniert:
  48. 1 point
    Na, dann will ich auch mal wieder was hier rein Posten. Hab's eben fertig gemalt. Das Crypt wird das Hauptelement in meinem neuen Flipper werden der Ghouls heißen wird. Natürlich habe ich es so low poly wie möglich gebaut. Aber gute 2000 Polys sind es dann doch geworden. Die Textur ist 2048x2048 groß und komplett handgemalt. Das hat ein wenig gedauert, war aber ne gute Übung.
  49. 1 point
    Moinsen Finde es gut das du dir die mühe gemacht hast eins zuschreiben ^^ Aber Unity hat dies doch schon seit Jahren als Standard Asset integriert ^^ unter Standard Assets/Utility/FPSCounter.cs Jetzt ist nur die Frage ob deins Effizienter ist da es auch Kompakter ist ^^ Hab deins mal auf das Minimum gekürzt was grad auf die schnelle ging. weil using System.Collections; using System.Collections.Generic; brauchste in dem Script sowieso nicht ^^ using UnityEngine; using UnityEngine.UI; public class FPSC : MonoBehaviour { //Vars #region public string formatedString = "{value} FPS"; public Text txtFps; public float updateRateSeconds = 4.0F; int frameCount = 0;float dt = 0.0F;float fps = 0.0F; #endregion void Update(){ frameCount++; dt += Time.unscaledDeltaTime; if (dt > 1.0 / updateRateSeconds){fps = frameCount / dt; frameCount = 0; dt -= 1.0F / updateRateSeconds;} txtFps.text = formatedString.Replace("{value}", System.Math.Round(fps, 1).ToString("0.0"));}} Da man das Script sowieso nicht mehr nachbearbeiten muss kann man es ja so lassen ^^ und später einfach via setactive an oder ausschalten wenn mans mal braucht ^^
  50. 0 points
    Nein. Schau mal, da sind so Überschriften. Package Manager Editor Player Unter jeder dieser Überschriften ist eine Tabelle, die die Pfade auflistet, unter denen du beim jeweiligen Betriebssystem die Log File findest. Du bist mit Windows unterwegs. Also schaust du bei "Player" in der Tabelle unter "Windows".

Announcements

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...