当尝试像这样从定时器中访问gameobject的位置:
public static void Start()
{
if(!timerStarted)
{
timerStarted = true;
timer = new Timer();
timer.Interval = 1000;
timer.Elapsed += CheckEarnings;
timer.AutoReset = true;
timer.Enabled = true;
}
}
private static void CheckEarnings(object sender, ElapsedEventArgs e)
{
foreach (BuildingData building in BuildingRegistry.registeredBuildings)
{
MonoBehaviour.print(building.attachedGameObject.transform.position);
}
}
(如果这是一个静态类会有所不同)
…会抛出以下错误:
get_transform只能从主线程调用。构造函数和字段初始化器将在加载场景时从加载线程执行。请勿在构造函数或字段初始化器中使用此函数,而是将初始化代码移动到Awake或Start函数中。UnityEngine.GameObject:get_transform() PlayerManagement:CheckEarnings(Object, ElapsedEventArgs)(位于Assets/Scripts/PlayerManagement.cs:53) System.Timers.Timer:Callback(Object)
在我看来,似乎为计时器创建了另一个线程,该线程无法访问主线程。如何解决这个问题?
System.Timers
来实现。请参考重复链接中的内容,了解如何从另一个线程调用 Unity 函数。 - Programmer