Loading scene with a DontDestroyOnLoad
In my game, I have a gameManager which is responsible for managing stats such as the player's health, the current time left to complete a level and conditions for the level.
I'm currently attempting to implement lives into my game, but unfortunately, I've been running into problems when reloading a scene.
The first was the duplication of my gameManager, but I know about making static instances for objects. However, when I use this code and try having the scene reload after the player dies, the newly created gameManager lacks all of the values that the original had, the player's health, level conditions are all set to 0.
The code for my gameManager object is as follows:
public class DontDestroyOnLoad : MonoBehaviour
{
[SerializeField]
//Sets up player properties, level conditions, etc.
public float playerHP;
//Conditions for levels
public int relicPieces;
public int relicRequirements;
public int livesNum;
//Max Player HP is used to set starting HP
public float playerMaxHP;
public float timeRemaining;
public float startTime;
//Used to create a timer for the player
public TextMeshProUGUI timeText;
public TextMeshProUGUI relicText;
public TextMeshProUGUI livesText;
private basicPlayer PlayerChar;
private Image HealthBarImage;
public HealthBar PlayerHPBar;
private static DontDestroyOnLoad _GMInstance;
private void Start()
{
}
public void ChangeHealth(float damage) {
//Player Health is reduced by the damage received from object
playerHP -= damage;
//Updates the HP Bar on the UI
if (PlayerHPBar)
{
PlayerHPBar.updateHealth();
}
}
public void HealPlayer(float healthIncrease) {
playerHP += healthIncrease;
if (playerHP > playerMaxHP) {
playerHP = playerMaxHP;
}
if (PlayerHPBar) {
PlayerHPBar.updateHealth();
}
}
private void Awake()
{
PlayerChar = FindObjectOfType<basicPlayer>();
//Sets player HP to match max HP
playerHP = playerMaxHP;
timeRemaining = startTime;
DontDestroyOnLoad(this);
if (_GMInstance == null)
{
_GMInstance = this;
}
else {
Object.Destroy(gameObject);
}
}
// Update is called once per frame
void Update()
{
timeRemaining -= Time.deltaTime;
relicText.text = "" + relicPieces + " / " + relicRequirements;
timeText.text = "" + Mathf.Round(timeRemaining);
}
}
Is there something that I'm missing here? I was under the impression that this would work, but I just run into this issue every time I run the game.
Your answer
Follow this Question
Related Questions
save variable from previous scene 2 Answers
How can I separate my Code efficiently ? 0 Answers
Code editors not recognizing the Unity libraries 0 Answers
Projectile with direction 0 Answers
Help with player movement. 0 Answers