当 If 语句失败时我可以调用一个函数吗

Can i call a function when If statement fails

void Update()
{
    bool playerInView = false;

    foreach (RaycastHit hit in eyes.hits)
    {
        if (hit.transform && hit.transform.tag == "Player")
        {
            playerInView = true;
        }
    }

    if (playerInView)
    {
        print ("Detected");
    }
    else
    {
        void OnGUI () {
            GUI.Box (new Rect (10, 10, 100, 90), "Loader Menu");
        }
    }
}

}

当我在 Unity 中 运行 时,它说 void 不能在此上下文中使用 但是当我删除函数并调用打印时它就可以工作了

部分

else
{
    void OnGUI () {
        GUI.Box (new Rect (10, 10, 100, 90), "Loader Menu");
    }
}

不是有效的 C# 语法;不能以这种方式在本地定义函数。也许你的意思是

else
{
    GUI.Box(new Rect (10, 10, 100, 90), "Loader Menu");
}

尝试:

if (playerInView)
{
    print ("Detected");
}
else
{
    GUI.Box (new Rect (10, 10, 100, 90), "Loader Menu");
}

首先,尝试在可以理解的上下文中写下您的问题。 无论如何,你应该这样写,

void Update()
    {
        bool playerInView = false;

        foreach (RaycastHit hit in eyes.hits)
        {
            if (hit.transform && hit.transform.tag == "Player")
            {
                playerInView = true;
            }
        }

        if (playerInView)
        {
            print("Detected");
        }
        else
        {
            OnGUI();
        }
    }
    void OnGUI()
    {
        GUI.Box(new Rect(10, 10, 100, 90), "Loader Menu");
    }

这样做:

bool playerInView = false;

void Update()
{
    playerInView = false;
    foreach (RaycastHit hit in eyes.hits)
    {
        if (hit.transform && hit.transform.tag == "Player")
        {
            playerInView = true;
        }
    }

    if (playerInView)
    {
        print ("Detected");
    }
}




void OnGUI()
{
    if (!playerInView)
    {
        GUI.Box (new Rect (10, 10, 100, 90), "Loader Menu");
    }
    ...
}