我有一个用计分器制作的小型2D游戏。在重新开始/游戏结束时,我希望分数计数器回到0,但是我不确定该怎么做。这是针对Unity上的游戏的,我也调用播放器上的计数器。我在下面附加了我的代码,希望对您有所帮助!
<div style="text-align: center">
<?php
$n = 8;
if($n === 1){ die("input must be greater than 1"); }
$nn = ($n * 2);
$m = (ceil($nn / 2) + 1);
$temp = 0;
for($x = 1; $x <= $nn; $x++){
$temp = (($x < $m) ? ($temp + 1) : ($temp - 1));
$total = ($temp > 1 ? ((2 * $temp) - 1) : $temp);
echo nl2br(str_repeat('* ', $total) . "\r\n");
}
?>
重新启动按钮上的代码:
public class CounterScript : MonoBehaviour
{
public int scoreValue = 0;
Text score;
void Start()
{
score = GetComponent<Text>();
scoreValue = 0;
}
void Update()
{
score.text = "" + scoreValue;
}
}
我的播放器上的代码:
public class RestartButtonL1 : MonoBehaviour
{
public CounterScript counter;
public void restartScene()
{
counter.scoreValue = 0;
SceneManager.LoadScene("GameSceneA");
}
}
答案 0 :(得分:2)
通过将scoreValue
设置为static
的值,不会受到加载另一个(或相同)场景的影响。
一种快速修复方法是在加载场景之前将其重置
public void restartScene()
{
CounterScript.scoreValue = 0;
SceneManager.LoadScene("GameSceneA");
}
或(我不知道本教程的工作原理,但是如果没有DontDestroyOnLoad
在玩),只需始终在Start
的{{1}}中设置值即可(这仅适用于本课程)如果没有其他切换场景和其他CounterScript
实例)
CounterScript
在这种情况下,可能没问题,但通常您应该避免制作东西void Start()
{
score = GetComponent<Text> ();
scoreValue = 0;
}
只是为了“更轻松地”访问它……相反,您应该拥有
static
,然后引用public int scoreValue;
的实际实例,例如
CounterScript
这只是一个示例,说明如何访问实例化值,例如无论您增加多少。因为实际上通过使其变为非静态,它将通过(无论如何)重新加载场景来重置;)
另请参阅Controlling GameObjects using components
边注:您始终应该删除空的public class RestartButtonL1 : MonoBehaviour
{
// reference the CounterScript here by drag and drop
// the acording GameObject from the scene into this field
public CounterScript counter;
public void restartScene()
{
counter.scorevalue = 0;
SceneManager.LoadScene("GameSceneA");
}
}
,Start
和其他MonoBehaviour事件调用。如果您不这样做,Unity无论如何都会调用它们,从而导致不必要的开销。