2012-03-24 19 views
3

Ich habe versucht, Multithread-Skriptausführung in Unity3d zu implementieren, aber es scheint, dass die Unity-Bibliotheken keine Möglichkeit bieten und wir System.Threading von Mono verwenden müssen. Aber sie haben erwähnt, dass Unity Scripting nicht Thread-sicher ist.Multithreaded Skriptaufruf in Unity3d

Kann ich Multithreading in Unity3D mit System.threading oder einer anderen plattformunabhängigen API sicher und effizient implementieren? Wie kann ich sicherstellen, dass die Skripte parallel laufen?

Ein Beispiel oder ein Link würde sehr geschätzt werden.

Grüße

+0

Ups, ich benutze Coroutines selten und dachte die ganze Zeit sie waren wie Threads in anderen Sprachen - etwas gelernt :-). Ich habe meine Antwort gelöscht. Es ist also wahrscheinlicher, dass Sie Antworten von anderen Personen erhalten. – Kay

+0

Richtig, Korotinen haben absolut keine Verbindung zum Gewindeschneiden. – Fattie

Antwort

5

ich für eine iOS-Anwendung benötigt Einfädeln, leider finde ich nie einen Weg, so zu tun, in der Einheit. Aber Sie können ein Plugin schreiben, das Threading verwendet. In meiner Anwendung brauchte ich Threading für das Timing einer Musik-Anwendung, also schrieb ich eine Audio-Plug-in-Bibliothek, die Core-Audio in xcode verwendet, und Sie können dort alle gewünschten Threads machen. Die Verwaltung der Synchronisierung zwischen Unity und dem Plugin ist jedoch ziemlich schmerzhaft.

+0

Ja, ich denke, ich muss vielleicht ein Plugin dafür schreiben: S Aber um plattformunabhängig zu machen, muss ich es durch irgendeinen Prozess erledigen lassen, damit es für alle Plattformen stabil ist. – Orochi

1

Im Allgemeinen können Sie Multithreading frei verwenden. Aber es gibt einen wichtigen Vorbehalt: Alle Aufrufe der Unity-API müssen über den Hauptthread erfolgen. Also, fühlen Sie sich frei, Threads für AI, Pfadfindung, was auch immer zu verwenden. Am Ende müssen Sie die Berechnungsergebnisse zurück zum Hauptthread kommunizieren.

Unity bietet eine Alternative zu Threads, die manchmal nützlich ist: coroutines. Sie ermöglichen es Ihnen, Ihre Funktion in Fragmenten auszuführen (yield und resume), und alles geschieht über den Hauptthread, sodass Sie die Unity-API nutzen können. Beachten Sie jedoch, dass sie für schwere Berechnungen nicht geeignet sind.