Unity引擎C#:按钮不起任何作用

Unity引擎C#:按钮不起任何作用,c#,user-interface,unity3d,C#,User Interface,Unity3d,我遇到了一个问题,我的Unity GUI.Buttons在这个脚本中单击时没有运行代码(它们在另一个脚本中以类似的方式工作),我想知道为什么。我可以看出,即使是声音播放,也没有发生任何事情,更不用说场景转换了 为了提供一点背景,我想有一个计时器,它会停止并显示玩家完成关卡所花费的时间,尽管这个计时器看起来不错。然后他们可以用3个按钮决定下一步该做什么:下一级、菜单或退出 下面是整个Unity C#脚本: 使用UnityEngine; 使用UnityEngine.SceneManagement;

我遇到了一个问题,我的Unity GUI.Buttons在这个脚本中单击时没有运行代码(它们在另一个脚本中以类似的方式工作),我想知道为什么。我可以看出,即使是声音播放,也没有发生任何事情,更不用说场景转换了

为了提供一点背景,我想有一个计时器,它会停止并显示玩家完成关卡所花费的时间,尽管这个计时器看起来不错。然后他们可以用3个按钮决定下一步该做什么:下一级、菜单或退出

下面是整个Unity C#脚本:

使用UnityEngine;
使用UnityEngine.SceneManagement;
公共类finishScript:MonoBehavior{
公众皮肤;
公共bool finished=false;
专用浮点计时器=0.0f;
音频源a;
公共音频剪辑点击声音;
无效开始()
{
a=GetComponent();
}
无效更新()
{
如果(!finished){timer+=Time.deltaTime;}
}
void OnGUI()
{
GUI.skin=皮肤;
如果(!完成)
{
Box(新的Rect(2,2,Screen.width/8,Screen.height/16),“Time:+Mathf.Round(timer.ToString());
}
如果(完成)
{
GUI.Box(新的Rect(Screen.width/4,Screen.height/4,Screen.width/2,Screen.height/4),
“恭喜!\n\n您在:\n”+Mathf.Round(timer.ToString())中完成了该级别;
if(GUI.按钮(新矩形(Screen.width/4,Screen.height/2,Screen.width/8,Screen.height/8),“主菜单”))
{
a、 PlayOneShot(点击声音,3f);
加载场景(“主菜单”);
}
if(GUI.按钮(新矩形(3*Screen.width/8,Screen.height/2,Screen.width/8,Screen.height/8,“下一级”))
{
a、 PlayOneShot(点击声音,3f);
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex+1);
}
如果(GUI.按钮(新矩形(3*Screen.width/4,Screen.height/2,Screen.width/8,Screen.height/8),“退出”))
{
a、 PlayOneShot(点击声音,3f);
Application.Quit();
}
}
}
}


所以我只想知道这到底有什么问题,为什么,谢谢

您现在不能在Unity中使用非常旧的gui系统。只需使用普通的UI系统。这简直太容易了。(1) 单击“添加画布”(2)单击“添加按钮”。你完了。只需将您希望通过按钮运行的任何函数拖动到按钮检查器。这真是太容易了。嗨,Matthew,Unity真是太棒了,专业版每年要花5000美元,所以我们希望它会很好。但是文档真的很糟糕。有很多事情他们“只是不提”。无论如何,请享受,希望更多的问题,从你在这里!我建议你点击“Unity3D”标签(在你的右边)。。阅读之前的QA是非常有趣的。我同意@JoeBlow的观点:坚持旧的onGUI方法没有什么好处。我认为Unity应该反对它(希望他们尽快这样做)。UI系统现在很简单-你可以在屏幕上看到你在做什么,它使用更少的CPU,你可以用旧的和更多的东西做任何你能做的事情。亲爱的@andeart如果你看到这条消息,请单击并重新加载,我只为你编辑了答案:)它节省了你的打字。。复制并粘贴。亲爱的@MatthewBolitho如果您看到此消息,请单击stackoverflow.com/questions/34699761/…然后重新加载,我只为您编辑了答案:)这样您就不用打字了。。复制和粘贴:)您现在不能在Unity中使用非常旧的gui系统。只需使用普通的UI系统。这简直太容易了。(1) 单击“添加画布”(2)单击“添加按钮”。你完了。只需将您希望通过按钮运行的任何函数拖动到按钮检查器。这真是太容易了。嗨,Matthew,Unity真是太棒了,专业版每年要花5000美元,所以我们希望它会很好。但是文档真的很糟糕。有很多事情他们“只是不提”。无论如何,请享受,希望更多的问题,从你在这里!我建议你点击“Unity3D”标签(在你的右边)。。阅读之前的QA是非常有趣的。我同意@JoeBlow的观点:坚持旧的onGUI方法没有什么好处。我认为Unity应该反对它(希望他们尽快这样做)。UI系统现在很简单-你可以在屏幕上看到你在做什么,它使用更少的CPU,你可以用旧的和更多的东西做任何你能做的事情。亲爱的@andeart如果你看到这条消息,请单击并重新加载,我只为你编辑了答案:)它节省了你的打字。。复制并粘贴。亲爱的@MatthewBolitho如果您看到此消息,请单击stackoverflow.com/questions/34699761/…然后重新加载,我只为您编辑了答案:)这样您就不用打字了。。复制和粘贴:)
using UnityEngine;
using UnityEngine.SceneManagement;


public class finishScript : MonoBehaviour {

public GUISkin skin;

public bool finished = false;

private float timer = 0.0f;

AudioSource a;
public AudioClip clickSound;

void Start ()
{
    a = GetComponent<AudioSource>();
}

void Update ()
{
    if (!finished) { timer += Time.deltaTime; } 
}

void OnGUI()
{
    GUI.skin = skin;

    if (!finished)
    {
        GUI.Box(new Rect(2, 2, Screen.width / 8, Screen.height / 16), "Time: " + Mathf.Round(timer).ToString());
    }

    if (finished)
    {
        GUI.Box(new Rect(Screen.width/4, Screen.height/4, Screen.width/2, Screen.height/4), 
            "Congratulations!\n\nYou finished the level in:\n" + Mathf.Round(timer).ToString());

        if (GUI.Button(new Rect(Screen.width/4, Screen.height/2, Screen.width/8, Screen.height/8), "Main Manu"))
        {
            a.PlayOneShot(clickSound, 3f);
            SceneManager.LoadScene("main_menu");
        }

        if (GUI.Button(new Rect(3*Screen.width / 8, Screen.height / 2, Screen.width / 8, Screen.height / 8), "Next Level"))
        {
            a.PlayOneShot(clickSound, 3f);
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
        }

        if (GUI.Button(new Rect( 3 * Screen.width / 4, Screen.height / 2, Screen.width / 8, Screen.height / 8), "Quit"))
        {
            a.PlayOneShot(clickSound, 3f);
            Application.Quit();
        }
    }
}