Can't find GameObject in new scene in DontDestroyOnLoad












0















I have a GameController in Scene1 and I made it DontDestroyOnLoad.



When I loaded Scene2, I'm trying to find a GameObject in Scene2 and the thing is obj2 is null but obj1 is not.



Why?



How could I find the GameObjectInScene2?





public class GameController: MonoBehaviour
{
private void Awake()
{
DontDestroyOnLoad(this);
}

private void Start()
{
SceneManager.LoadScene("Scene2");
GameObject obj1 = GameObject.Find("GameObjectInScene1");
GameObject obj2 = GameObject.Find("GameObjectInScene2");
}
}









share|improve this question





























    0















    I have a GameController in Scene1 and I made it DontDestroyOnLoad.



    When I loaded Scene2, I'm trying to find a GameObject in Scene2 and the thing is obj2 is null but obj1 is not.



    Why?



    How could I find the GameObjectInScene2?





    public class GameController: MonoBehaviour
    {
    private void Awake()
    {
    DontDestroyOnLoad(this);
    }

    private void Start()
    {
    SceneManager.LoadScene("Scene2");
    GameObject obj1 = GameObject.Find("GameObjectInScene1");
    GameObject obj2 = GameObject.Find("GameObjectInScene2");
    }
    }









    share|improve this question



























      0












      0








      0








      I have a GameController in Scene1 and I made it DontDestroyOnLoad.



      When I loaded Scene2, I'm trying to find a GameObject in Scene2 and the thing is obj2 is null but obj1 is not.



      Why?



      How could I find the GameObjectInScene2?





      public class GameController: MonoBehaviour
      {
      private void Awake()
      {
      DontDestroyOnLoad(this);
      }

      private void Start()
      {
      SceneManager.LoadScene("Scene2");
      GameObject obj1 = GameObject.Find("GameObjectInScene1");
      GameObject obj2 = GameObject.Find("GameObjectInScene2");
      }
      }









      share|improve this question
















      I have a GameController in Scene1 and I made it DontDestroyOnLoad.



      When I loaded Scene2, I'm trying to find a GameObject in Scene2 and the thing is obj2 is null but obj1 is not.



      Why?



      How could I find the GameObjectInScene2?





      public class GameController: MonoBehaviour
      {
      private void Awake()
      {
      DontDestroyOnLoad(this);
      }

      private void Start()
      {
      SceneManager.LoadScene("Scene2");
      GameObject obj1 = GameObject.Find("GameObjectInScene1");
      GameObject obj2 = GameObject.Find("GameObjectInScene2");
      }
      }






      unity3d






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 2 at 10:19









      derHugo

      8,79331535




      8,79331535










      asked Jan 2 at 9:44









      C1oneC1one

      31




      31
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Start is not called again since your component already ran it in Scene1



          You can register to SceneManager.sceneLoaded and do the find in the callback instead.



          I would also store the references global like





          private GameObject obj1;
          private GameObject obj2;

          void Start()
          {
          // This first line just makes sure the listener isn't added twice
          SceneManager.sceneLoaded -= OnSceneLoaded;

          // Whenever a scene is loaded call OnSceneLoaded
          SceneManager.sceneLoaded += OnSceneLoaded;

          obj1 = GameObject.Find("GameObjectInScene1");

          SceneManager.LoadScene("Scene2");
          }

          void OnDestroy ()
          {
          // Allways clean up listeners when not needed anymore!
          SceneManager.sceneLoaded -= OnSceneLoaded;
          }

          void OnSceneLoaded(Scene scene, LoadSceneMode mode)
          {
          if(scene.name == "Scene2")
          {
          obj2 = Find("GameObjectInScene2");
          }
          }





          share|improve this answer


























          • Thanks for replying and editing my post! You save my day! So even I called LoadScene("Scene2") before, GameObject.Find will still trying to find the GameObject in Scene1, am I right?

            – C1one
            Jan 2 at 10:27













          • It depends how you load your Scenes (single or additive).. by default it is single so Find will search in the active Scene. From the docu :Note: If the game is running with multiple scenes then Find will search in all of them.

            – derHugo
            Jan 2 at 11:12













          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54004114%2fcant-find-gameobject-in-new-scene-in-dontdestroyonload%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          Start is not called again since your component already ran it in Scene1



          You can register to SceneManager.sceneLoaded and do the find in the callback instead.



          I would also store the references global like





          private GameObject obj1;
          private GameObject obj2;

          void Start()
          {
          // This first line just makes sure the listener isn't added twice
          SceneManager.sceneLoaded -= OnSceneLoaded;

          // Whenever a scene is loaded call OnSceneLoaded
          SceneManager.sceneLoaded += OnSceneLoaded;

          obj1 = GameObject.Find("GameObjectInScene1");

          SceneManager.LoadScene("Scene2");
          }

          void OnDestroy ()
          {
          // Allways clean up listeners when not needed anymore!
          SceneManager.sceneLoaded -= OnSceneLoaded;
          }

          void OnSceneLoaded(Scene scene, LoadSceneMode mode)
          {
          if(scene.name == "Scene2")
          {
          obj2 = Find("GameObjectInScene2");
          }
          }





          share|improve this answer


























          • Thanks for replying and editing my post! You save my day! So even I called LoadScene("Scene2") before, GameObject.Find will still trying to find the GameObject in Scene1, am I right?

            – C1one
            Jan 2 at 10:27













          • It depends how you load your Scenes (single or additive).. by default it is single so Find will search in the active Scene. From the docu :Note: If the game is running with multiple scenes then Find will search in all of them.

            – derHugo
            Jan 2 at 11:12


















          0














          Start is not called again since your component already ran it in Scene1



          You can register to SceneManager.sceneLoaded and do the find in the callback instead.



          I would also store the references global like





          private GameObject obj1;
          private GameObject obj2;

          void Start()
          {
          // This first line just makes sure the listener isn't added twice
          SceneManager.sceneLoaded -= OnSceneLoaded;

          // Whenever a scene is loaded call OnSceneLoaded
          SceneManager.sceneLoaded += OnSceneLoaded;

          obj1 = GameObject.Find("GameObjectInScene1");

          SceneManager.LoadScene("Scene2");
          }

          void OnDestroy ()
          {
          // Allways clean up listeners when not needed anymore!
          SceneManager.sceneLoaded -= OnSceneLoaded;
          }

          void OnSceneLoaded(Scene scene, LoadSceneMode mode)
          {
          if(scene.name == "Scene2")
          {
          obj2 = Find("GameObjectInScene2");
          }
          }





          share|improve this answer


























          • Thanks for replying and editing my post! You save my day! So even I called LoadScene("Scene2") before, GameObject.Find will still trying to find the GameObject in Scene1, am I right?

            – C1one
            Jan 2 at 10:27













          • It depends how you load your Scenes (single or additive).. by default it is single so Find will search in the active Scene. From the docu :Note: If the game is running with multiple scenes then Find will search in all of them.

            – derHugo
            Jan 2 at 11:12
















          0












          0








          0







          Start is not called again since your component already ran it in Scene1



          You can register to SceneManager.sceneLoaded and do the find in the callback instead.



          I would also store the references global like





          private GameObject obj1;
          private GameObject obj2;

          void Start()
          {
          // This first line just makes sure the listener isn't added twice
          SceneManager.sceneLoaded -= OnSceneLoaded;

          // Whenever a scene is loaded call OnSceneLoaded
          SceneManager.sceneLoaded += OnSceneLoaded;

          obj1 = GameObject.Find("GameObjectInScene1");

          SceneManager.LoadScene("Scene2");
          }

          void OnDestroy ()
          {
          // Allways clean up listeners when not needed anymore!
          SceneManager.sceneLoaded -= OnSceneLoaded;
          }

          void OnSceneLoaded(Scene scene, LoadSceneMode mode)
          {
          if(scene.name == "Scene2")
          {
          obj2 = Find("GameObjectInScene2");
          }
          }





          share|improve this answer















          Start is not called again since your component already ran it in Scene1



          You can register to SceneManager.sceneLoaded and do the find in the callback instead.



          I would also store the references global like





          private GameObject obj1;
          private GameObject obj2;

          void Start()
          {
          // This first line just makes sure the listener isn't added twice
          SceneManager.sceneLoaded -= OnSceneLoaded;

          // Whenever a scene is loaded call OnSceneLoaded
          SceneManager.sceneLoaded += OnSceneLoaded;

          obj1 = GameObject.Find("GameObjectInScene1");

          SceneManager.LoadScene("Scene2");
          }

          void OnDestroy ()
          {
          // Allways clean up listeners when not needed anymore!
          SceneManager.sceneLoaded -= OnSceneLoaded;
          }

          void OnSceneLoaded(Scene scene, LoadSceneMode mode)
          {
          if(scene.name == "Scene2")
          {
          obj2 = Find("GameObjectInScene2");
          }
          }






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 2 at 10:17

























          answered Jan 2 at 10:12









          derHugoderHugo

          8,79331535




          8,79331535













          • Thanks for replying and editing my post! You save my day! So even I called LoadScene("Scene2") before, GameObject.Find will still trying to find the GameObject in Scene1, am I right?

            – C1one
            Jan 2 at 10:27













          • It depends how you load your Scenes (single or additive).. by default it is single so Find will search in the active Scene. From the docu :Note: If the game is running with multiple scenes then Find will search in all of them.

            – derHugo
            Jan 2 at 11:12





















          • Thanks for replying and editing my post! You save my day! So even I called LoadScene("Scene2") before, GameObject.Find will still trying to find the GameObject in Scene1, am I right?

            – C1one
            Jan 2 at 10:27













          • It depends how you load your Scenes (single or additive).. by default it is single so Find will search in the active Scene. From the docu :Note: If the game is running with multiple scenes then Find will search in all of them.

            – derHugo
            Jan 2 at 11:12



















          Thanks for replying and editing my post! You save my day! So even I called LoadScene("Scene2") before, GameObject.Find will still trying to find the GameObject in Scene1, am I right?

          – C1one
          Jan 2 at 10:27







          Thanks for replying and editing my post! You save my day! So even I called LoadScene("Scene2") before, GameObject.Find will still trying to find the GameObject in Scene1, am I right?

          – C1one
          Jan 2 at 10:27















          It depends how you load your Scenes (single or additive).. by default it is single so Find will search in the active Scene. From the docu :Note: If the game is running with multiple scenes then Find will search in all of them.

          – derHugo
          Jan 2 at 11:12







          It depends how you load your Scenes (single or additive).. by default it is single so Find will search in the active Scene. From the docu :Note: If the game is running with multiple scenes then Find will search in all of them.

          – derHugo
          Jan 2 at 11:12






















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54004114%2fcant-find-gameobject-in-new-scene-in-dontdestroyonload%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          MongoDB - Not Authorized To Execute Command

          How to fix TextFormField cause rebuild widget in Flutter

          in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith