在Unity中的FileChange之后找到Gameobject并进行更改

时间:2018-03-01 09:25:49

标签: c# file unity3d

我有一个Unity程序,在初始化时会在场景中加载多个Gameobjects。从文件加载的对象。

我创建了一个FileWatcher,可以在文件发生变化时通知。现在我想用更新文件的内容更新我的游戏对象

public class ProductFolderWatcher : MonoBehaviour {

// Use this for initialization
void Start () {

    var fileSystemWatcher = new FileSystemWatcher();
    fileSystemWatcher.Path = "C:/Users/Bram Sikkens/Desktop/SealifeBestanden/ProductBestanden/";


    fileSystemWatcher.Changed += FileSystemWatcher_Changed;
    fileSystemWatcher.EnableRaisingEvents = true;

}


private static void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
    string filename = e.Name;
    Debug.Log(filename + "has changed");
    GameObject coldBeveragesProductContainer = GameObject.Find("ColdBeveragesProductContainer");


}

当我执行以下代码时,我收到错误

  

“查找只能在主线程中执行”

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你的FileSystemWatcher是否在另一个线程上运行操作?

看起来它正在从另一个线程发送它的事件,在这种情况下,查找无法正常工作。

然而,静态FileSystemWatcher_Changed可能是非静态的。尝试删除它,看看它是否有所改善。

否则,如果你的FileSystemWatcher在另一个线程上运行,一个简单的解决方法就是从FileSystemWatcher_Changed方法中移除静态(无论如何都可能修复它),并使filename变量成为类级别变量,即private _filename,并移动将GameObject.Find代码放入更新例程中,在您执行的操作后将文件名为空。

如果您从单一行程更新例程开始操作,那么您就可以在主线程上进行操作了 - 这就是您想要的位置。