using UnityEngine;using System.Collections;using System.Timers;public class NewBehaviourScript : MonoBehaviour { // Use this for initialization void Start () { Timer t = new Timer(100); t.Elapsed += T_Elapsed_Handle; t.Start(); } private void T_Elapsed_Handle(object sender, ElapsedEventArgs e) { Debug.Log("T_Elapsed_Handle" + this.gameObject.name); }
输出:
get_gameObject can only be called from the main thread.
看来Coroutin的出现就是为了解决这个问题,方便大家使用,
当然往主线程里Enqeue消息也是可以的
百度了一下,找到了Loom这个插件。感觉真的很好用,错误不见了。
这里做下记录。
Loom插件就一个脚本导入到Unity中就行了。具体脚本内容如下
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;using System.Threading;using System.Linq; public class Loom :MonoBehaviour { public static int maxThreads = 8; static int numThreads; private static Loom _current; //private int _count; public static Loom Current { get { Initialize(); return _current; } } void Awake() { _current = this; initialized = true; } static bool initialized; public static void Initialize() { if (!initialized) { if (!Application.isPlaying) return; initialized = true; var g = new GameObject("Loom"); _current = g.AddComponent ();#if !ARTIST_BUILD UnityEngine.Object.DontDestroyOnLoad(g);#endif } } public struct NoDelayedQueueItem { public Action