我正在尝试使用C#语言在Unity3D中制作一个进度条。
我有一个名为(task)ProgressCompleted的Action类型变量,我将在特定函数的结尾处调用它。
您可以在下面的示例代码中看到:
我尝试声明为静态或非静态。什么都没改变。
public class GooglePlayManager : MonoBehaviour {
//singleton stuff.
public static Action initializationProgressCompleted;
public static Action signInProgressCompleted;
public void Initialize() {
//do some stuff.
initializationProgressCompleted?.Invoke();
}
}
public class GameManager : MonoBehaviour {
public static Action initializationProgressCompleted;
//singleton stuff.
#endregion
private void Start() {
List<Action> tasks = new List<Action>();
tasks.Add(GooglePlayManager.initializationProgressCompleted);
LoadingManager.instance.SetCheckList(tasks);
GooglePlayManager.instance.Initialize();
}
}
public class LoadingManager {
//singleton stuff.
public void SetCheckList(List<Action> tasks) {
_checkList = new bool[tasks.Count];
for (int ii = 0; ii < tasks.Count; ii++) {
tasks[ii] += Progress;
}
}
public void Progress() {
for (int ii = 0; ii < _checkList.Length; ii++) {
if (_checkList[ii]) {
continue;
} else {
_checkList[ii] = true;
break;
}
}
UpdateUI();
}
}
我正在初始化作为参数发送给另一个函数的Action,但是它不起作用。当我尝试调用操作时,该操作似乎为空。
另一方面,我可以直接对其进行初始化,而无需将其作为参数发送。
工作代码为:
//ClassA
public static Action initializationProgressCompleted;
public void Initialize() {
//Complete some tasks.
initializationProgressCompleted?.Invoke();
}
//ClassB
private void Func() {
ClassA.initializationProgressCompleted += Test;
}
private void Test() {
//log message
}