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
Mary-Kate OlsenOriginal
2025-01-31 12:01:09218Durchsuche

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

<code class="language-csharp">UnityThread.executeInUpdate(() =>
{
    // 在主线程中执行的代码
});</code>

für die Coroutine:

<code class="language-csharp">Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 函数代码
}</code>
wie man verwendet

Initialisieren in :

<code class="language-csharp">UnityThread.executeCoroutine(myCoroutine());

IEnumerator myCoroutine()
{
    // 协程代码
}</code>

Führen Sie den Code in :

aus
  1. Awake() UnityThread in :
  2. durchführen
<code class="language-csharp">UnityThread.initUnityThread();</code>
  1. Führen Sie den Code in : Update aus
<code class="language-csharp">UnityThread.executeInUpdate(() =>
{
    // Update 代码
});</code>
    Führen Sie den Code in :
  1. aus Update
<code class="language-csharp">Action rot = Rotate;
UnityThread.executeInUpdate(rot);

void Rotate()
{
    // 方法代码
}</code>
Starten Sie die Coroutine:
  1. LateUpdate
  2. Zusätzliche Beschreibung
<code class="language-csharp">UnityThread.executeInLateUpdate(() =>
{
    // LateUpdate 代码
});</code>
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.
<code class="language-csharp">UnityThread.executeInFixedUpdate(() =>
{
    // FixedUpdate 代码
});</code>

    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!

    Stellungnahme:
    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