【问题标题】:Score reset on Reload重新加载时重置分数
【发布时间】:2021-01-04 17:32:42
【问题描述】:

我知道有很多类似的问题,但似乎没有一个与我的完全一样。每当一个对象被破坏时,我的分数就会增加一,并且工作正常,但我想在重新加载场景时将其重置为 0...由于某种原因,它不会重置,其他一切正常。

变量:

public Text Score;
public static int counter;
public Transform obstacle;
public GameObject Obstacle;

对象被销毁时递增的代码:

 void Update()
{
    if (Obstacle.transform.position.z <= -5)
    {
        DestroyObstacle(Obstacle);
    }
   
    Score.text = (counter / 3).ToString();

}
void DestroyObstacle(GameObject Obstacle)
{
    Destroy(Obstacle);
    counter++;
}

}

下面的代码会停止一切并弹出一个按钮。单击该按钮时,它会重新加载您所看到的关卡,但分数不会重置:

 public void OnCollisionEnter(Collision collision)
{
    if (collision.collider.tag == "Obstacle")
    {
        movement.enabled = false;
        Spawner.enabled = false;
        
        PlayButton.enabled = true;
        PlayText.enabled = true;

        PlayButton.onClick.AddListener(TaskOnClick);
        
    }
}
void TaskOnClick()
{

    Score.text = 0.ToString();
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

}

我知道这可能很简单,但我非常感谢您的帮助。 还!由于某种原因,如果我的计数器不是静态 int,分数不会增加吗?这就是为什么它是静态的。

【问题讨论】:

  • 开始功能中的counter = 0 有帮助吗?
  • 不,它没有

标签: c# unity3d


【解决方案1】:

因为计数器是静态的,所以它不会重置。 如果不是因为增加值的对象被销毁,它不会增加。

您需要另一个脚本,该脚本将具有 counter 变量,并在对象被销毁时将其递增。

换行

counter++;

通过

Camera.main.GetComponent<ScoreCounter>().Increase();

再做一堂课(类似的)并在你的相机上添加脚本:

public class ScoreCounter : MonoBehaviour
{
    public int counter;
    public Text Score;

    public void Increase()
    {
        counter++;
        Score.text = (counter / 3).ToString();
    }

}

【讨论】:

  • 这很好用!!非常感谢,我知道我们不应该感谢 cmets 的人,但这真的让我很烦恼。所以谢谢你!
【解决方案2】:

这是因为计数器是静态的,因此它属于类而不是对象。除非硬重启,否则它不会重置。添加 counter = 0 作为 TaskOnClick 的第一行就可以了,或者将 counter 更改为不是静态的并且是对象的成员。

【讨论】:

  • 这样就成功了!!但现在我得到一个 nullreferenceerror: NullReferenceException: Object reference not set to an instance of an object Destroy.OnCollisionEnter (UnityEngine.Collision collision) (at Assets/Destroy.cs:36)
  • 是第 36 行“movement.enabled = false;”线?如果不是太大,只发布整个课程可能会有所帮助。
  • 不,它是“PlayButton.onClick.AddListener(TaskOnClick);”线太大了,抱歉。有没有可能有帮助的部分?
  • 我会在出现错误的行上放置一个断点,附加到统一并查看 nullref 处的空值。然后,您可以使用该信息编写代码来防御它(如果 foo != null{})或彻底修复新错误。
  • PlayButton 为空,为什么不用Unity On Click() 事件来代替?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
相关资源
最近更新 更多