- Home /
How is the new Scene object meant to be used?
Since "Scene" is not nullable, I cannot do this:
public static Scene GetSceneWithTaggedObject(string tag)
{
for (int i = 0; i < SceneManager.sceneCount; i++)
{
Scene scene = SceneManager.GetSceneAt(i);
foreach(GameObject go in scene.GetRootGameObjects()){
if(go.tag == tag){
return scene;
}
}
}
Debug.LogError("Could not find the global scene.");
return null; // Cannot do this with Unity.
}
My question is simply: what am I supposed to return when I have a non-nullable type, such as the Scene, but still want to return something that pretty much represents "null" or "didn't find"?
Scene
http://docs.unity3d.com/ScriptReference/SceneManagement.Scene.html
SceneManager http://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html
Answer by LazyElephant · Dec 24, 2015 at 04:57 AM
In C# you can make non-nullable types nullable by declaring them with a ? after the type, for example Scene? theScene
By changing the method definition to
public static Scene? GetSceneWithTaggedObject(string tag){...}
you will be able to return null. Just make sure the variable you're catching the returned value with is also declared as Scene?
Thanks. I don't know why I didn't think of that. ^^ I've been using the ?-operatorthingie before, but didn't think about it for some reason.
Follow up question: is there any reason to why the Scene class is non-nullable?
Your answer
Follow this Question
Related Questions
Is there a callback for when a scene gets unloaded in the Editor? 1 Answer
My Scene won't load in, and is stuck in "WaitForPlayEnter" 0 Answers
Load and run scene in background 1 Answer
Can I know if the current scene has been loaded from bundle? 0 Answers
Using UI.Button to Load Another Scene? (using outdated tutorial video) 1 Answer