Jump to content
Unity Insider Forum

Psychros

Members
  • Content count

    57
  • Joined

  • Last visited

Community Reputation

9 Neutral

About Psychros

  • Rank
    Advanced Member
  1. Psychros

    Vector3.Distance anscheinen nicht richtig optimiert

    Ich habe nach langer Zeit gerade noch einmal an die Optimierung der Funktion gemacht und auch die alten Funktionen ein weiteres mal gemessen, da sich in der Zwischenzeit mein System verändert hat. public static double Distance(Vector3 a, Vector3 b) { return System.Math.Sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y) + (b.z - a.z) * (b.z - a.z)); } Die Funktion unterscheidet sich von der alten dadurch, dass keine neuen Variablen initialisiert werden und somit weniger Speicheraufrufe erfolgen. Ausprobiert habe ich auch noch, die Vektoren per ref zu übergeben, mit dem Gedanken, dass sie dann nicht kopiert werden müssen. Dies hat allerdings keinen messbaren Vorteil gebracht. Optimierungspotential besteht immer noch, indem man die Wurzelberechnung aus der Math.Sqrt Methode direkt in die Funktion Distance verlagert. Immerhin kostet jeder Funktionsaufruf Zeit. Die Zeiten wurden erneut für 1.000.000 Durchläufe mit Stopwatch berechnet. Vector3.Distance: 51-54ms Die alte eigene Methode aus einem früheren Beitrag oben: 28-30ms Die weiter optimierte Methode: 23-24ms Mich wundert immer noch, dass auch in den neuen Unityversionen dieser Flaschenhals nicht behoben wurde. Distanzen werden ja doch häufiger benutzt und der Zeitunterschied von 23 zu 51 ms ist beträchtlich. Wenn man übrigens die Distanz direkt in der aufrufenden Methode ausführt und keinen Methodenaufruf benutzt, braucht die Berechnung nur ca 13ms. Der Testcode sieht dann so aus: Vector3 a = Vector3.up; Vector3 b = Vector3.right; for (int i = 0; i < 10000000; i++) { System.Math.Sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y) + (b.z - a.z) * (b.z - a.z)); } Chunk.watch.Stop(); print(Chunk.watch.ElapsedMilliseconds / 10); Eine ähniche Optimierung erzielt man vermutlich auch durch weglassen von Math.Sqrt. Ich schätze die Zeit dann auf 3-7ms ein. Wenn man weiterhin eine Methode Distance aufrufen möchte, sind es vermutlich wieder 13-15ms.
  2. Hallo zusammen, ich möchte euch hiermit meine kürzlich veröffentlichte App Zombiehaus vorstellen. Ziel des Spiels ist es, seine SWAT-Einheit vor den hungrigen Zombies in einem Hochhaus zu beschützen. Auf dem Weg nach oben begegnen euch davon eine ganze Menge. Hierfür muss der Spieler auf Zombies und Türen schießen (Zombies kommen gerne aus Türen)! Mit den daraus gewonnenen Gehirnen lassen sich tolle Objekte freischalten, welche unter anderem das Haus verschönern. Das Spielprinzip ist hierbei bewusst simpel gehalten, kann aber trotzdem eine Menge Spaß machen. Falls jemand Lust hat es zu testen, ist hier der Link zum PlayStore - Eintrag: https://play.google.com/store/apps/details?id=com.Munkulus.Zombiehaus MfG Tobias
  3. Psychros

    Drone's Village

    Auch wenn ihr lange nichts mehr von mir gehört habt, habe ich weiter an dem Spiel gearbeitet. Inzwischen gibt es ein Rundensystem und einige neue Gebäude. Auch das gesamte Flug und Ziehverhalten der Drohnen wurde um einiges angepasst. Die Drohnen können sich jetzt in einer Runde nur noch eine begrenzte Anzahl an Feldern bewegen und auch das Fällen bzw. Bauen kostet Bewegungspunkte. Man kann aber natürlich auch einen Bewegungsbefehl außerhalb des Radius geben, sodass der Befehl dann über mehrere Runden hinweg ausgeführt wird. Insgesamt hat sich eine Menge getan, auch wenn man es vielleicht nur bedingt auf dem Bild sieht. Jedes der Gebäude hat eine Aufgabe, wobei die meisten irgendeine Ware produzieren. So muss man führ Beton eine Sandmine, eine Kalksteinmine, eine Tongrube, einen Brunnen, eine Zementfabrik und eine Betonfabrik bauen. Alle Änderungen aufzuzählen würde hier jetzt allerdings zu viel werden. Wer Interesse hat, kann sich die entsprechende GitHubseite anschauen: https://github.com/Psychros/Drone-s-Village
  4. Psychros

    ScreenShot Weekend! (ehemals ScreenShot Saturday)

    Ich bin schon gespannt auf deine Demo. Flipper war immer ein super Spiel
  5. Psychros

    Drone's Village

    Danke für die Antworten. Dann sollte ich mir wohl mal R.U.S.E anschauen. @Hrungdak Du hast natürlich Recht damit, dass ich mich erst um andere Sachen kümmern sollte. War gestern auch eine recht spontane Idee und ich wollte schonmal einen groben Eindruck von der Wirkung bekommen. Ich werde den Raum vermutlich im Spiel lassen, aber den Rest erst später designen.
  6. Psychros

    Drone's Village

    Ich habe mir jetzt überlegt, das ganze Spiel als eine Art Brettspiel zu gestalten. Am eigentlichen Spielprinzip wird sich dabei nichts ändern, ich musst mir allerdings etwas für den Hintergrund einfallen lassen. Jetzt steht das Spielfeld auf einem Tisch und man sieht im Hintergrund noch die Wand und den Boden des Raums So sieht das ganze jetzt aus: Vielleicht kann ja mal einer von euch schreiben, was er davon hält, ob ich das vielleicht sogar wieder rückgängig machen soll. Für ein Strategie-Aufbauspiel ist das ja doch recht gewagt. Neben den Tisch sollen noch Stühle kommen und vielleicht wird es in der Wand auch eine Tür geben. Ist jetzt erstmal nur der erste Entwurf.
  7. Psychros

    Drone's Village

    Jap Ich konnte leiderdie neuesten Änderungen nicht früher hier reinstellen, da mir auf meinem System die Grafikkarte abgeschmiert ist. Habe die Ursache erst nach ein paar Tagen gefunden, nachdem ich endlich das bestellte DVI-Kabel an das Mainboard anschließen konnte. Hier sind sie aber nun: - Ich habe 2 neue Icons für Waren. Einmal ein allgemeines Lagerkapazitätsicon und ein Holzicon. Wie auch bereits das Betonicon und alle anderen Modelle im Spiel wurden sie mit Blender erstellt. Das Holzicon werde ich allerdings evtl noch etwas aufhellen. Macht sich im Spiel etwas dunkler als erwartet. - Holz, welches man abbaut, landet jetzt auch im Lager und verschwindet nicht mehr einfach. Es gibt zwar noch kein Gebäude, welches automatisch Holz abbaut, dafür kann man aber immer noch mit der Drohne Bäume fällen. Vielleicht wird es auch dabei bleiben. - Es gibt nun endlich eine Möglichkeit, das Spiel ohne den TaskManager zu schließen: Ein Pausemenü wurde erschaffen Es gibt zwar noch keine Demoversion für euch zum Testen aber auch zum Debuggen war das recht nervig. Der ein oder andere wird das bestimmt kennen - Auch ist gerade ein Baumenü in Arbeit, eine wirkliche Funktion hat es aber noch nicht, da das Spiel erst ein Gebäude beinhaltet. Später soll man dort zwischen den Gebäuden wählen können und die Baukosten angezeigt bekommen. - Ein neues Chunksystem funktioniert nun. Auch wenn die Welten nicht besonders groß sind, kann ich vielleicht mit diesem Chunksystem die Performance verbessern. Aktuell sind die Welten 8x8 Chunks groß. Der nächste Schritt besteht jetzt darin, die einzelnen Hexagone innerhalb der Chunks zu einem Modell zusammenzufügen(Oder zumindest zu einem Modell pro Biomtyp). Ich bin mal gespannt, wie sich das auf die Performance auswirken wird. Vielleicht mache ich bald auch mal wieder ein Video zu den Neuerungen. Das wird dann spontan entschieden. Hier findet ihr auf jeden Fall fürs erste ein Bild zu den optischen Neuerungen :
  8. Psychros

    Welche Unity Version habt ihr? Und warum?

    Ich arbeite ebenfalls mit der Personal Version. Ist für Hobbyentwickler halt am besten.
  9. Psychros

    Drone's Village

    Heute ist ein erstes Inventarsystem fertig geworden. Die Ressourcenbox befindet sich oben links in der Ecke. Derzeit gibt es die beiden Ressourcen Geld(Euros) und Beton. Wenn die Zahlen größer als 999 sind, werden sie abgekürzt und es kommt die Endung K, M oder G. Um diese Werte zu erreichen müsste man allerdings neue Lagerhäuser bauen. Nur das Geld kann theoretisch in fast unendlicher Menge gelagert werden (Begrenzt durch maximalen Integerwert).
  10. Psychros

    Drone's Village

    Aufgrund eines Urlaubs ist es ein wenig her, dass ich daran weiterarbeiten konnte. Jetzt gibt es aber wieder ein par Neuerungen. Mit einer gewissen Wahrscheinlichkeit spawnen jetzt alternative Biome wie z.B. eine Löwenzahnwiese oder eine Muschel am Strand. Auch gibt es jetzt einen neuen Cursor. Wie das ganze jetzt aussehen kann könnt ihr auf dem Bild im Anhang sehen.
  11. Psychros

    Drone's Village

    Die letzten Tage habe ich viel mit der Optimierung des Projektes verbracht. Als ich dann heute fertig wurde, musste ich leider feststellen, dass das Spiel mit den ganzen Optimierungen um ca. 30% langsamer war als ohne Also wurden die Optimierungen schön wieder deaktiviert. Ich habe aber trotzdem noch ein paar Neuerungen vorzuweisen, auch wenn es aufgrund des Fiaskos nicht so viele sind. Als erstes haben die Ozeanberge ein neues Modell erhalten: Vorher wurde einfach nur ein normaler Berg dafür benutzt. Die zweite Neuerung betrifft die Kamerasteuerung. Da habe ich mich viellecht ein weng von Civilization beeinflussen machen, wobei das glaube ich auch in anderen Spielen angewandt wird. Wenn man diese Spiele spielt, nimmt man dies aber meistens nicht mal wahr, nur wenn es fehlt. Der Spieler kann jetzt die Kamera mit gedrückter linker Maustaste ziehen. Ich habe mir jetzt auch mal ein par Gedanken über das Befehlsmenü gemacht und wollte das als nächstes umsetzen. Dieses Menü soll aus mehreren runden Elementen bestehen, welche immer um die Maus herum positioniert sind. Mal sehen, was dabei herauskommt
  12. Psychros

    Unity 3D C#: Minecraft Klon Tutorial

    Liegen die 20ms im Editor oder in der exportierten Version vor?
  13. Psychros

    Vector3.Distance anscheinen nicht richtig optimiert

    Das stimmt wohl, aber selber testen kann nie schaden
  14. Psychros

    Vector3.Distance anscheinen nicht richtig optimiert

    Ich habe jetzt nochmal ein wenig herumexperimentiert und die Methode Vector3.Distance einfach mal kopiert und in einem eigenen Script benutzt. Das diese etwas langsamer als die Custom-Methode ist liegt tatsächlich daran, dass ein unnötiges Vector3-Objekt erstellt wird.
  15. Psychros

    Vector3.Distance anscheinen nicht richtig optimiert

    Ich habe die Methode jetzt nochmal ein wenig umstrukturiert: public static double distance(Vector3 a, Vector3 { float x = b.x - a.x; float y = b.y - a.y; float z = b.z - a.z; return System.Math.Sqrt(x * x + y * y + z * z); } Anstelle der Klasse Mathf benutze ich nun System.Math für die Wurzel. Dies habe ich gemacht, da Mathf von Unity stammt und demnach auch in der potentiellen dll liegt. Auch liefert die Methode jetzt anstelle des float einen double. Für 1.000.000 Durchläufe braucht sie jetzt anstatt 53-55ms nur noch ca. 43-47ms. Anscheinend liegt dieses Performanceproblem bei allen Unitymethoden vor. #Benni : Mit doubles anstelle der floats gibt es keine großen Performanceunterschiede. Hier kommt es dann hauptsächlich darauf an, ob man Mathf oder Mathias benutzt. Da Mathf nur floats akzeptiert, müsste man die doubles erst in floats konvertieren.
×