重新加载时重新设置分数



我知道有很多类似的问题,但似乎没有一个与我的问题完全相同。我有一个分数,每次对象被破坏时都会增加一,这很好,但我想在重新加载场景时将其重置为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++;

通过

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

然后做另一个类(类似的事情(,在你的相机上添加脚本:

public class ScoreCounter : MonoBehaviour
{
public int counter;
public Text Score;
public void Increase()
{
counter++;
Score.text = (counter / 3).ToString();
}
}

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

最新更新