如何在不丢失C#

时间:2019-01-11 21:07:43

标签: c# unity3d action

我正在尝试使用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
}

0 个答案:

没有答案