Heim > Backend-Entwicklung > C++ > Wie kann ich die API-Funktionen von Unity-Funktionen aus Nicht-Main-Threads sicher aufrufen?

Wie kann ich die API-Funktionen von Unity-Funktionen aus Nicht-Main-Threads sicher aufrufen?

Mary-Kate Olsen
Freigeben: 2025-01-31 12:01:09
Original
235 Leute haben es durchsucht

How to Safely Call Unity API Functions from Non-Main Threads?

Verwenden Sie die Einheit -API aus anderen Threads oder aufrufen Funktionen im Haupt -Thread

Frage

In einem separaten Thread kann die Verwendung der Socket -API von Unity zu Fehlern führen, insbesondere wenn das UI -Element aus dem Sub -Thread aktualisiert wird. Aufgrund von Sicherheitsproblemen von Threads wird die von Nicht -Main -Threads durchgeführten Unity -API -Aufrufen von Abnormalitäten ausgelöst.

Lösung

rufen Sie die Einheit -API

auf Implementieren Sie die folgenden Schritte:

Erstellen Sie eine statische

namens
    , um den Vorgang zu speichern, der im Hauptfaden ausgeführt werden muss.
  1. actionQueuesUpdateFunc kopieren Sie in die lokale Liste (List<Action>) und führen Sie diese Vorgänge aus.
  2. Erstellen Sie einen Verlust -verlorenen Booleschen Wert (actionQueuesUpdateFunc), um anzugeben, wann die Funktion ausgeführt wird, wenn die Funktion betrieben wird. actionCopiedQueueUpdateFunc
  3. Rufen Sie die Haupt -Thread -Funktion noActionQueueToExecuteUpdateFunc Update auf
  4. Die Funktion zum Aufrufen der Funktion von einem separaten Thread:

oder übergeben Sie die Funktion als Parameter:

Betriebskonporation im Haupt -Thread

UnityThread.executeInUpdate(() =>
{
    // 在主线程中执行的代码
});
Nach dem Login kopieren

für die Coroutine: <对于>

Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 函数代码
}
Nach dem Login kopieren
wie man <使用> verwendet

Initialisieren in <初> :

UnityThread.executeCoroutine(myCoroutine());

IEnumerator myCoroutine()
{
    // 协程代码
}
Nach dem Login kopieren

Führen Sie den Code in <执>:

aus
  1. Awake() UnityThread in <执>:
  2. durchführen
UnityThread.initUnityThread();
Nach dem Login kopieren
  1. Führen Sie den Code in <执>: Update aus
UnityThread.executeInUpdate(() =>
{
    // Update 代码
});
Nach dem Login kopieren
    Führen Sie den Code in <执>:
  1. aus Update
Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 方法代码
}
Nach dem Login kopieren
Starten Sie die Coroutine:
  1. LateUpdate
  2. Zusätzliche Beschreibung <附>
UnityThread.executeInLateUpdate(() =>
{
    // LateUpdate 代码
});
Nach dem Login kopieren
Um die Leistung zu verbessern, falls dies nicht erforderlich ist, kommentieren Sie bitte
    und
  1. . FixedUpdate
  2. Diese Lösung verwendet eine einzelne
Instanz für alle Skripte.
UnityThread.executeInFixedUpdate(() =>
{
    // FixedUpdate 代码
});
Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonWie kann ich die API-Funktionen von Unity-Funktionen aus Nicht-Main-Threads sicher aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Neueste Artikel des Autors
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage