Значение scoreValue
static
не влияет на загрузку другой (или той же) сцены.
Быстрым решением было бы просто сбросить его перед загрузкой сцены
public void restartScene()
{
CounterScript.scoreValue = 0;
SceneManager.LoadScene("GameSceneA");
}
или (я не знаю, как работает учебник, но если в игре нет DontDestroyOnLoad
), просто всегда устанавливайте значение в Start
из CounterScript
(это работает, конечно, если дальнейшее переключение не происходит) сцены и другие CounterScript
экземпляры)
void Start()
{
score = GetComponent<Text> ();
scoreValue = 0;
}
В этом случае все может быть в порядке, но в целом вы должны стараться избегать создания вещи static
, просто чтобы получить к ней более "легкий доступ" ... вместо этого вы должны иметь
public int scoreValue;
, а затем ссылку на фактический экземпляр CounterScript
, например,
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");
}
}
Это всего лишь пример того, как получить доступ к экземпляру значения, например, куда бы вы ни увеличили это. Потому что на самом деле, сделав его нестатичным, он будет сброшен путем (пере) загрузки сцены в любом случае;)
см. Также Управление объектами GameObject с использованием компонентов
Sidenote: Вы всегда должны удалять пустые Start
, Update
и другие вызовы событий MonoBehaviour. Если вы этого не сделаете, Unity все равно вызывает их, вызывая ненужные накладные расходы.