- Home /
Why my code seems skipped after singleton pattern ?
Hi, I've got some code on Awake -right after my singleton pattern- that is responsable for checking if we're running a gameplay scene or a menu scene. This code goes fine in the first scene but if I'm going from a menu to a gameplay scene the Check doesn't seem to run at all !
void Awake()
{
if (Instance == null)
{
DontDestroyOnLoad(gameObject);
Instance = this;
}
else if (Instance != this)
{
Destroy(gameObject);
}
isGameplayScene = true;
if (FindObjectOfType<NoGameplayScene>() != null){ // check if the scene is gameplay or menu || loading
isGameplayScene = false;
} else{
isGameplayScene=true;
Do More Stuff
}
}
my isMenu bool stays true and isGameplayScene stays false... What am I doing wrong ?? ^^'
Answer by _dns_ · Apr 18, 2018 at 02:26 PM
Hi, line 10, when you destroy the object that is a "duplicated" singleton, the code continues to execute just after the Destroy() instruction, and I think that is where the bug is. Add a "return" just after the Destroy()! I would also use DestroyImmediate() here because you really want this object out of the scene right now. The reason is that Destroy() is delayed until the end of the frame so using DestroyImmediate() you make sure the object is not here for the rest of the current frame.
EDIT: Also, Awake() won't be called a second time on the original singleton instance when you change scene because the original singleton instance is marked as "DontDestroyOnLoad". So now I'm not sure that you didn't mean to continue executing the code after calling Destroy() on a second instance. In that case, you need to set "Instance.isGameplayScene" instead of just "isGameplayScene" so you modify the singleton's variable and not the soon-to-be-destroyed object's one!
The [EDIT] you made was right on target man !
I feel stupid but I think I would have struggle so long if you wouldn't have pointed that out ! Thanks :)
Your answer
Follow this Question
Related Questions
OnEnable not called after all Awake and not all OnDisable before OnDestroy? 1 Answer
Detecting and setting resolutions correctly 1 Answer
Awake Method Called Twice 1 Answer
C# property keeps getting overwritten 2 Answers
'Awake' not called first after scripts are recompiled during execution 1 Answer