erixx Geschrieben 9. März 2017 Melden Share Geschrieben 9. März 2017 Guten Tag. Wie kann man ein bestimmtes Objekt an einer WorldPosition (Vector3) finden, ohne Physics oder 3 dimensionale Arrays zu verwenden? Es handelt sich um haeufige Abfragen sehr vieler Objekte/Positionen. Mein Gedanke war, jedem Objekt seine Position als Namen zu geben, und dann nur das Objekt mit der gewuenschten Position als Name zu suchen. Gibt es da noch performance schonendere Vorgehensweisen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Thariel Geschrieben 9. März 2017 Melden Share Geschrieben 9. März 2017 Hi Es wäre hilfreich, wenn du etwas genauer beschreiben würdest, was du machen willst. Falls du sowas wie ein "Schachbrett" meinst und wissen willst, welche Objekte auf dem Feld X,Y sind, dann würde ich veranlassen, dass sich die Objekte selbst in die passende Liste ein- und wieder austragen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
erixx Geschrieben 9. März 2017 Autor Melden Share Geschrieben 9. März 2017 Hi Thariel. Also es geht um ein 3d Pathfinding in einer Voxel Welt. Es gibt sehr viele Wuerfel die per code generiert und angeordnet werden, aber diese koennen sich auch zum Teil schnell veraendern. Also ihre Positionen, Rotationen und Zustaende, wie zB "begehbar", "abbaubar", usw sind dynamisch. Nun soll beim Pathfinding zB der Zustand des Wuerfels, der die NPC Position - (3,2,8) hat, überprüft werden. Das mit dem Schachbrett kommt schon hin, nur eben mit 3 Dimensionen, und die Form und Hoehe des Schachbrettes waeren dynamisch veraendrebar. Das alles aber haengt im 3d Raster, und nur ganze Zahlen spielen eine Rolle.Okay, dann werd ich das kombinieren. Die Wuerfel nach ihren Positionen benennen, eine Liste aller Wuerfel erstellen, und dann per IndexOf(positionToString) darauf zugreifen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 10. März 2017 Melden Share Geschrieben 10. März 2017 Wenn du kein Array nehmen möchtest, dann nimm doch ein Dictionary: Dictionary<Vector3, GameObject> cubes = new Dictionary<Vector3, GameObject>(); IndexOf(positionToString) ist von der Performance her nicht zu empfehlen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 11. März 2017 Melden Share Geschrieben 11. März 2017 Also ich mach das so, dass ich die Welt in Chunks unterteile und die Chunks dann in einem Dictionary speichere, wie Zer0Cool schon gesagt hat Dictionary<Vector3, Chunk> Chunks = .. Die Chunks haben dann einen Octree in dem die Voxel organisiert werden D.h. wenn ich eine Position im Raum hab kann ich den entsprechenden Chunk finden und in dem dann das Voxel. Zum finden des Chunks benutze ich übrigens immer Dictionary.TryGetValue(), das ist afaik die schnellste Methode ein Dict-Item zu kriegen, es kann aber auch null sein das muss man dann nochmal überprüfen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
erixx Geschrieben 11. März 2017 Autor Melden Share Geschrieben 11. März 2017 Das klappt prima. Danke euch. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.