Я пытаюсь создать индикатор прогресса в Unity3D с использованием языка C #.
У меня есть переменная типа Action с именем (task) ProgressCompleted, которую я собираюсь вызвать в конце конкретной функции.
Вы можете увидеть в примере кода ниже:
Я пытался объявить как статический или нестатический. Ничего не изменилось.
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();
}
}
Я инициализирую это действие, отправленное в качестве параметра другой функции, но оно не работает. Когда я пытался вызвать действие, действие кажется нулевым.
С другой стороны, я могу инициализировать его напрямую, без отправки в качестве параметра.
Рабочий код:
//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
}