第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#/Unity - 無法從異步方法調(diào)用 Unity 方法

C#/Unity - 無法從異步方法調(diào)用 Unity 方法

C#
喵喵時光機 2022-07-23 17:01:41
我正在使用 Unity3D。這是我的異步方法:private void Receive(IAsyncResult ar){    try    {        IPEndPoint ipEndPoint = null;        byte[] data = udpClient.EndReceive(ar, ref ipEndPoint);        string receivedMessage = Encoding.UTF8.GetString(data);        JsonData json = JsonConvert.DeserializeObject<JsonData>(receivedMessage);        string prefix = json.header.Substring(0, 2);        Debug.Log("UDP World: " + receivedMessage);        if (prefix != "3x")        {            Debug.Log("Unknown packet: " + receivedMessage + "\n");        }        else        {            string header = json.header.Substring(2);            int conId = json.connectionId;            switch (header)            {                default:                    Debug.Log("Unknown packet: " + receivedMessage + "\n");                    break;                case "001":                    Debug.Log("Data received: " + receivedMessage + "\n");                    break;                case "002":                    CharacterPosition position = new CharacterPosition();                    position.x = float.Parse(json.data["position.x"].ToString());                    position.y = float.Parse(json.data["position.y"].ToString());            }        }    } 我在 Unity 控制臺中看到的只是以下輸出:Debug.Log("Position 2: X: " + position.x + " Y: " + position.y + " Z: " + position.z + " Character: " + characterId + " CnnID: " + cnnId);使用上面顯示的 Debug.Log,我可以看到我擁有所需的所有信息。Debug.Log 中的所有內(nèi)容都在那里。下一行:Debug.Log("GameObject FIND: " + GameObject.Find("CharactersOnline").name);似乎是一切剎車的地方。我沒有從該行收到任何輸出,也沒有任何錯誤。它看起來就像它留在那里沒有給出任何輸出或錯誤。當updateCharacterPosition從另一個非異步方法調(diào)用時,內(nèi)部的所有內(nèi)容都updateCharacterPosition按縮進方式工作。知道為什么會發(fā)生這種奇怪的行為。我該如何解決這個問題,以便我可以調(diào)用updateCharacterPosition哪個ReceiveAsync 函數(shù)?
查看完整描述

1 回答

?
茅侃侃

TA貢獻1842條經(jīng)驗 獲得超21個贊

試試這個:/* 將它附加到場景中的任何對象上,以使其工作 */


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);

我認為您的問題是您正在從另一個不允許的線程調(diào)用 Unity 方法


查看完整回答
反對 回復(fù) 2022-07-23
  • 1 回答
  • 0 關(guān)注
  • 236 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號