C # / Unity - Ошибка вызова метода Unity из асинхронного метода

Проверьте вход, чтобы узнать, ожидает ли ваша программа. Если это не так, предупредите пользователя о том, что введенный им ввод является неприемлемым.

1
задан Venelin Vasilev 15 January 2019 в 21:25
поделиться

1 ответ

Попробуйте это: / * Прикрепите это к любому объекту в вашей сцене, чтобы он работал * /

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MainThread : MonoBehaviour {

   class CallInfo
   {
     public Function func;
     public object parameter;
     public CallInfo(Function Func, object Parameter)
     {
       func = Func;
       parameter = Parameter;
     }
     public void Execute()
     {
       func(parameter);
     }
   }

   public delegate void Function(object parameter);
   public delegate void Func();

   static List<CallInfo> calls = new List<CallInfo>();
   static List<Func> functions = new List<Func>();

   static Object callsLock = new Object();
   static Object functionsLock = new Object();

   void Start()
   {
     calls = new List<CallInfo>();
     functions = new List<Func>();

     StartCoroutine(Executer());
   }

   public static void Call(Function Func, object Parameter)
   {
     lock(callsLock)
     {
       calls.Add(new CallInfo(Func, Parameter));
     }
   }
   public static void Call(Func func)
   {
     lock(functionsLock)
     {
       functions.Add(func);
     }
   }

   IEnumerator Executer()
   {
     while(true)
     {
       yield return new WaitForSeconds(0.01f);

       while(calls.Count > 0)
       {
         calls[0].Execute();
         lock(callsLock)
         {
           calls.RemoveAt(0);
         }
       }

       while(functions.Count > 0)
       {
         functions[0]();
         lock(functionsLock)
         {
           functions.RemoveAt(0);
         }
       }
     }
   }
}

Вызовите это

MainThread.Call(YourFunction);
MainThread.Call(YourFunction, parameters);

Я думаю, что ваша проблема в том, что вы вызываете метод Unity из другого потока, который не разрешен

0
ответ дан phantasm 15 January 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: