Jump to content
Unity Insider Forum
GaRv3

Mehrdimensionales NativeArray?

Recommended Posts

Hallo zusammen,

ich arbeite mich gerade in das neue C# Jobsystem der aktuellen Beta ein und möchte es u.a. für Performanceoptimierungen von Voxelsystemen nutzen.

Naturgemäß nutze ich ein dreidimensionales Array, welches die Informationen der einzelnen Voxel enthält. Das Jobsystem erlaubt aber nicht die nutzung von Arrays, da das Array ein Referenztyp ist und im Jobsystem nur Werttypen erlaubt sind. Macht ja auch irgendwie Sinn, da man sonst wieder in Race Conditions laufen könnte.

Meine Frage ist, wie ich ein dreidimensionales Array (Block[,,]) in ein dreidimensionales NativeArray<Block> umwandeln kann. Irgendwie fällt mir dazu nichts ein.

Vielen Dank und beste Grüße
garv3

Share this post


Link to post
Share on other sites

Warum muss das denn ein dreidimensionales NativeArray sein?
Du könntest dein Array auch linearisieren also du läufst über dein komplettes dreidimensionales Array Block[,,] drüber und schreibst das in dein NativeArray

   Multidimensionales Array
   { 0 , 1 , 2 }
   { 3 , 4 , 5 } 

   Linearisiert
   { 0 , 1 , 2 , 3 , 4 , 5 }

Da gibts viele verschiedene Möglichkeiten, die vielleicht am performantesten wäre Z-curve bzw. Morton Order aber simple for-schleifen sollten auch nach Rom führen.

Ich frage mich allerdings warum du überhaupt in Race Conditions laufen könntest? Du würdest doch dein Block Array nicht von mehreren Jobs bearbeiten lassen oder? Falls ja würde ich das vielleicht ein bisschen anders designen und zum Beispiel jedem Chunk/Block Array einen Job zur Verfügung stellen, der das bearbeitet, dann sind das abgetrennte Bereiche und es kann per Design her schon zu keinen Race Conditions kommen. 

Share this post


Link to post
Share on other sites

Danke für deine Antwort.

Habe es inzwischen genau so gelöst. Allerdings habe ich aktuell erst mal direkt selbst Threads implementiert. Mit dem Jobsystem werde ich mich in den kommenden Tagen beschäftigen.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×