-
Gesamte Inhalte
696 -
Benutzer seit
-
Letzter Besuch
-
Tagessiege
17
Inhaltstyp
Profile
Forum
Kalender
Blogs
Alle erstellten Inhalte von Life Is Good
-
Ich hab mal ein wenig Code auf mein GitHub profil hochgeladen.
Simple, leichte und (relativ ) saubere Implementationen von A* und Flow Fields pathfinding (bei A* fehlt noch ein kleines Video oder so...)
Mir ist aufgefallen, dass gerade zu A* ziemlich verwurstelte Code Beispiele bei Google rauskommen
Wen sowas interessiert, der kann ja mal reinschauen. Vielleicht schreib ich auch mal 'ne Tutorial oder so dazu.
A* https://github.com/GoGreenOrDieTryin/Unity-A-Star
Flow Fields https://github.com/GoGreenOrDieTryin/Unity-Flow-Fields-
Darf man Kritik äußern xD? Warum übergibst du den Start/Ende/Grid im Konstruktor. Jetzt musst du jedesmal ein neues A* Objekt erzeugen wenn du ne neue Suche machen willst...
Ansonsten wenn du mehr Performance haben willst nutz nen Heap. Der sorgt dafür das du nicht immer durch die ganze Liste iterierst wenn du den besten Knoten haben willst.
Aber ansonsten ne schön einfach zu verstehende A* Implementierung. Aber weil ich angeben will hier ist meine https://github.com/Djeurissen/SmartAI/blob/master/SmartAI/Search/AStarSearch.cs
-
- 1
- Meldung
-
Klar ! Es kann nie sauber genug sein
Dabei hab ich mir ehrlich gesagt nichts besonderes gedacht, einfach so simple wie möglich gehalten.
Eigentlich hätte ich start & ende auch einfach public machen können, um die dann über den Inspector zu zuweisen.Zum Speicher:
Absolut. Ich halt meistens bloß so viel wie möglich lokal. Wenn man daraus was größeres machen würde, könnte man allein dadurch noch gut was an Performance rausholen.Dein Code gefällt mir übrigens auch gut.
-
Muss ich doch Glatt mal Testen, Suche schon lange was gescheites^^ Meine versuche Schlugen leider fehl und ergaben das die KI 6754374 meter neben den Pfad rumm eierte^^
-
-
Ich bin mal ein wenig durch meinen Code gesprungen. An einer Stelle muss ich sehr häufig über eine kleine Anzahl an Elementen iterieren
Foo target; for (int i = 0; i < 4; i++) if (collection[i].flags == fooFlag) target = collection[i];
Ein ganz simples Stück Code also.
Linq sieht aber natürlich sehr viel hübscher aus, also hab ich statt des Oberen Schnipsels zu erst so was hier gemacht
var target = collection.First(e => e.flags == fooFlag);
Was ich beobachtet habe: Das 2. ist halb so schnell. Das sind 20ms, statt 10ms (wird jeden Frame aufgerufen, d.h. zweiteres erfüllt schonmal gar nicht mehr die 60hz Anforderung, was ja heute ziemlich standard ist.... Macht also viel aus !)
- Vorherige Kommentare anzeigen %s mehr
-
Ohh, bist du auf der aktuellsten Version ? Ich hab gehört dass das NavMesh mit der neuen Version ein wenig kaputt gegangen sein soll. Ich hab's das letzte mal vor nem Jahr oder so verwendet und da ging sowas noch.
-
Na, das Problem existiert zumindest seit Version 5.4.1. Ich muss es mal in Unity 2017 nochmal testen, aber glaube nicht, daß an der Ecke was passiert ist:
https://feedback.unity3d.com/suggestions/navmesh-agent-local-avoidance-recalculate-navmesh-path-when-another-agent-get-in-the-way
Wenn man mit einer handvoll Agenten hantiert, merkt man das Problem noch nicht unbedingt, da die local avoidance auf sehr kurzen "Ausweichpfaden" noch funktioniert (also wenn nur 2 Agenten aneinander vorbeilaufen sollen).
Ein typischer Testfall ist, du lässt 20 Agenten zu einen Ziel laufen (z.b. Spieler). Beim Unitynavmesh klumpen die Agents dann an einer Stelle vor dem Spieler (aus Laufrichtung) zusammen (und stapeln sich teilweise hintereinander auf). Eigentlich sollten aber die Agents den Spieler einkreisen. Gibt auch noch andere Probleme an engen Stellen auf dem Navmesh, wenn sich die Agents "treffen". -
Ich hab's bloß mit einer handvoll Agenten getestet also
¯\_(ツ)_/¯
-
Ich bin gerade dabei meinen Path Tracer auf die GPU zu porten, dabei ist mir was interessantes aufgefallen.
Ich hab den selben Code 2 mal mit bloß einem Unterschied:
Der eine ist rekursiv, der andere iterativ (da Recursion ja nicht so doll für GPUs ist )
Ansonsten hab ich nichts verändert !
Die Ergebnisse sind identisch.
Und jetzt kommts:
Der rekursive hat 10min und 11sek gebraucht, der iterative bloß 157sek.
Das ist ein Performance boost von etwa 390% !!
Skaliert wohl mit längeren Berechnungen noch mehr. -
Nach 3h debuggen den Fehler meines kleinen Path Tracers gefunden. Ich hab vergessen meine Vektoren im Default Constructor mit 0, 0, 0 zu initialisieren. Ich komm mir gerade verdammt blöd vor
- Vorherige Kommentare anzeigen %s mehr
-
Joa ich hab auch schon mal einen Abend und den halben nächsten Tag damit verbracht einen Bug zu suchen, weil ich eine Component am falschen GameObjekt angehängt hab.. Da kommt man sich echt dämlich vor ^^
-
Ist doch nice. Ist zwar erst einmal bicht so toll, aber aus solchen Fehlern lernt man am besten. Mir geht's zumindest so.
-
Jup, ist bloß etwas frustrierend, wenn man seinen Code wieder durchgeht und den Fehler nicht findet. Normalerweise hab ich so grob 'ne Ahnung was der Fehler ist
-
Mail von Unity "I hope you are doing well! My name is Morgan, I’m a Product Manager at Unity Technologies. As a special thank you for being one of our most active Unity Personal developers, we’d like to offer you the opportunity to sign up for Unity Plus at 25% off." Nette Aktion von UT
- Vorherige Kommentare anzeigen %s mehr
-
habs auch bekommen und zugeschlagen :-)
-
Ich will trotzdem das Dark UI für die Personal Edition :/
-
@Sascha: Danke! Stimmt ja, hatte ich vergessen, weil ich mich nicht einlogge.
-
https://forum.unity3d.com/threads/upgraded-mono-net-in-editor-on-5-5-0b4.433541/ Endlich tut sich da mal was !
- Vorherige Kommentare anzeigen %s mehr
-
Jo, d.h. Unity kriegt endlich C# 6 Support, dann können wir z.B. C#'s dynamic nutzen.
Ich meine damit stünde auch offen das Unity endlich den alten GC fallen lässt, aber da bin ich mir auch nicht so sicher
-
das hört sich gut an.. bin auch absoluter noob, was sowas betrifft, aber ich nehme mal an, dass das auch performance mäßig ein bisschen was ändern dürfte.. gibts da irgendwelche Zahlen? ^
-
C# 6 ist ein Standard, welche Features die Sprache hat. Das hat erst mal nichts mit runtime performance zu tun.
Was dagegen ein Update wäre, wäre ein Mono Runtime und/oder GC update. Größter vorteil an einem neuen GC ist, dass man dann foreach wieder ohne Bedenken benutzen kann. Soll mit der finalen Version von 5.5 auch kommen.
-
Der komplette Kurzfilm 'Adam' von Unity ist jetzt online !
- Vorherige Kommentare anzeigen %s mehr
-
Techdemos sind im Prinzip ja Werbung, was möglich ist. Somit verschwendet man nichts, sondern investiert. Und wenn Unity dadurch Gewinn generiert, ist Unity zufrieden.
-
Naja da werden immer so krasse Welten gezeigt bzw auch interessante Stories erzählt was man sich dann sehr sehr gerne in einem Spiel wünscht. Das meinte ich damit.
-
Das "übertriebene" Motionblur ist mir nicht negativ aufgefallen. Finde die Demo auch mal richtig richtig fett. Richtig fett