C# 如何使按钮在游戏结束时出现?

C# 如何使按钮在游戏结束时出现?,c#,user-interface,unity3d,C#,User Interface,Unity3d,几天前,我开始学习Unity,并使用官方教程进行学习。我已经开始了第一场比赛,我开始喜欢编程了。我对这个很陌生,我认为如果我把这些教程游戏做得更好,它会对我有所帮助。一切都很顺利,但现在我被卡住了。我想要一个当我赢得比赛时出现的菜单。我制作了菜单,它有3个按钮(“重试”、“菜单”和“退出”)。这是一张照片:。按钮可以工作,但我唯一的问题是,它们在整个游戏中都会出现,而我只希望它们出现在最后。我尝试了很多次,但我似乎一直都遇到这个错误:当前上下文中不存在“重试”。 using UnityEngin

几天前,我开始学习Unity,并使用官方教程进行学习。我已经开始了第一场比赛,我开始喜欢编程了。我对这个很陌生,我认为如果我把这些教程游戏做得更好,它会对我有所帮助。一切都很顺利,但现在我被卡住了。我想要一个当我赢得比赛时出现的菜单。我制作了菜单,它有3个按钮(“重试”、“菜单”和“退出”)。这是一张照片:。按钮可以工作,但我唯一的问题是,它们在整个游戏中都会出现,而我只希望它们出现在最后。我尝试了很多次,但我似乎一直都遇到这个错误:当前上下文中不存在“重试”。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class PlayerController : MonoBehaviour {
    public float speed; 
    public Text countText;
    public Text winText;    
    private Rigidbody rb;
    private int count;

    void Start ()
    // The game starts here.
    {
        rb = GetComponent<Rigidbody>();
        count = 0;
        SetCountText ();
        winText.text = "";
        Retry.GameObject.SetActive(false);
        Menu.GameObject.SetActive(false);
        Exit.GameObject.SetActive(false);
   }

   void FixedUpdate ()
   // Movement.
   {
       float moveHorizontal = Input.GetAxis ("Horizontal");
       float moveVertical = Input.GetAxis ("Vertical");

       Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

       rb.AddForce (movement * speed);
   }
   void OnTriggerEnter(Collider other)
   // Picking things up and count score.
   {
       if (other.gameObject.CompareTag("Pick Up"))
       {
           other.gameObject.SetActive (false);
           count = count + 1;
           SetCountText ();
       }
   }

   void SetCountText ()
   {
       countText.text = "Count:" + count.ToString ();
       if (count >= 12)
       // End of the game, you won.
       {
            winText.text = "You win!";
            Retry.GameObject.SetActive(true);
            Menu.GameObject.SetActive(true);
            Exit.GameObject.SetActive(true);
       }
   }
}
使用UnityEngine;
使用UnityEngine.UI;
使用系统集合;
公共类玩家控制器:单行为{
公众浮标速度;
公共文本;
公共文本;
私人刚体;
私人整数计数;
无效开始()
//比赛从这里开始。
{
rb=GetComponent();
计数=0;
SetCountText();
winText.text=“”;
Retry.GameObject.SetActive(false);
Menu.GameObject.SetActive(false);
Exit.GameObject.SetActive(false);
}
无效固定更新()
//运动。
{
float moveHorizontal=Input.GetAxis(“水平”);
float moveVertical=Input.GetAxis(“垂直”);
Vector3移动=新Vector3(水平移动,0.0f,垂直移动);
rb.AddForce(移动*速度);
}
无效对撞机(对撞机其他)
//收拾东西,计算分数。
{
if(other.gameObject.CompareTag(“拾取”))
{
other.gameObject.SetActive(false);
计数=计数+1;
SetCountText();
}
}
void SetCountText()
{
countText.text=“Count:+Count.ToString();
如果(计数>=12)
//比赛结束了,你赢了。
{
winText.text=“你赢了!”;
Retry.GameObject.SetActive(true);
Menu.GameObject.SetActive(true);
Exit.GameObject.SetActive(true);
}
}
}
为什么他认不出我做的游戏机?(你在图片上看到的按钮)很抱歉我的英语不好,谢谢你花时间阅读这篇文章,如果可能的话,请回答


编辑:这些都是错误。但是,如果我删除顶部和底部的6条gameobjective(bool)行,效果会很好,但我始终打开菜单。

您缺少的是脚本中对按钮游戏对象的引用,以便您可以打开/关闭它们

如果添加到脚本中

public GameObject retryButton;
同样,对于其他按钮,然后在脚本检查器中的Unity中,将三个按钮游戏对象拖动到检查器中相应的“插槽”中

然后在代码中用
retryButton.SetActive()替换
Retry.GameObject.SetActive()

其他按钮也是如此


实际上,您似乎已经在为“countText”和“winText”这样做了

尝试将按钮放在游戏对象中,然后使用object
。SetActive(false)

这对我很有用。

也许这对你有帮助非常感谢你!我将使用这种方法:DI在Menu.cs脚本中执行此操作。所以基本上我需要在这个脚本中完成所有这些,然后删除Menu.cs脚本?但是,如果我想在我的Menu.cs中执行此操作,那么我不能说何时启用按钮,因为Menu.cs不知道何时有人赢得了比赛。或者如果我告诉他,他知道吗?那怎么办?你知道代表吗?将学员用于此目的,因为他们正用于相同的目的,即广播带有信息的活动,然后任何班级都可以收听。如果你愿意,那就告诉我