Dynamically render GameObject in Unity C#












0















I am working on a AR project, where the virtual objects will be shown/hide in the scene based on information found in a text file. The text files will be updated from an external service. So I need to read the file on a frequent interval and update the scene. As a result I only have the Camera object and I am rendering the scene in OnPreCull() method.



The text files contain many objects but not all the objects are within the scene at any instance of time. I was looking for a way to render only those objects that are within the scene.



Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?










share|improve this question



























    0















    I am working on a AR project, where the virtual objects will be shown/hide in the scene based on information found in a text file. The text files will be updated from an external service. So I need to read the file on a frequent interval and update the scene. As a result I only have the Camera object and I am rendering the scene in OnPreCull() method.



    The text files contain many objects but not all the objects are within the scene at any instance of time. I was looking for a way to render only those objects that are within the scene.



    Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?










    share|improve this question

























      0












      0








      0








      I am working on a AR project, where the virtual objects will be shown/hide in the scene based on information found in a text file. The text files will be updated from an external service. So I need to read the file on a frequent interval and update the scene. As a result I only have the Camera object and I am rendering the scene in OnPreCull() method.



      The text files contain many objects but not all the objects are within the scene at any instance of time. I was looking for a way to render only those objects that are within the scene.



      Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?










      share|improve this question














      I am working on a AR project, where the virtual objects will be shown/hide in the scene based on information found in a text file. The text files will be updated from an external service. So I need to read the file on a frequent interval and update the scene. As a result I only have the Camera object and I am rendering the scene in OnPreCull() method.



      The text files contain many objects but not all the objects are within the scene at any instance of time. I was looking for a way to render only those objects that are within the scene.



      Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?







      c# unity3d augmented-reality gameobject culling






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 2 at 1:11









      Md Monjur Ul HasanMd Monjur Ul Hasan

      1,129721




      1,129721
























          2 Answers
          2






          active

          oldest

          votes


















          1















          Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?




          Yes absolutely ... so would it if you do it in Update or any other repeatedly called method.



          Instead you should rather Instantiate objects in Awake and only activate or deactivate them.



          Let's say you have 3 objects A, B and C than I would make a kind of controller class that looks like



          public class ObjectsController : MonoBehaviour
          {
          // Define in which intervals the file should be read/ the scene should be updated
          public float updateInterval;

          // Prefabs or simply objects that are already in the Scene
          public GameObject A;
          public GameObject B;
          public GameObject C;
          /* Etc ... */

          // Here you map the names from your textile to according object in the scene
          private Dictionary<string, GameObject> gameObjects = new Dictionary<string, gameObjects>();

          private void Awake ()
          {
          // if you use Prefabs than instantiate your objects here; otherwise you can skip this step
          var a = Instantiate(A);
          /* Etc... */

          // Fill the dictionary
          gameObjects.Add(nameOfAInFile, a);

          // OR if you use already instantiated references instead
          gameObjects.Add(nameOfAInFile, A);
          }
          }

          private void Start()
          {
          // Start the file reader
          StartCoroutine (ReadFileRepeatedly());
          }

          // Read file in intervals
          private IEnumerator ReadFileRepeatedly ()
          {
          while(true)
          {
          //ToDo Here read the file

          //Maybe even asynchronous?
          // while(!xy.done) yield return null;

          // Now it depends how your textile works but you can run through
          // the dictionary and decide for each object if you want to show or hide it
          foreach(var kvp in gameObjects)
          {
          bool active = someConditionDependingOnTheFile;

          kvp.value.SetActive(active);

          // And e.g. position it only if active
          if (active)
          {
          kvp.value.transform.position = positionFromFile;
          }
          }

          // Wait for updateInterval and repeat
          yield return new WaitForSeconds (updateInterval);
          }
          }




          If you have multiple instances of the same prefab you also should have a look at Object Pooling






          share|improve this answer
























          • Thank you. This is really comprehensive answer.

            – Md Monjur Ul Hasan
            Jan 2 at 15:06



















          0














          I'd recommend adding each of the game objects to a registry and the switching them on or off (dis/enable SetActive) via the registry class's Update() cycle.



          One Update() process to retrieve and handle the server file, another Update() process to dis/enable objects. Might sound oversimplified however it's the fastest way I think of getting the result.



          Good Luck!






          share|improve this answer























            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%2f54000202%2fdynamically-render-gameobject-in-unity-c-sharp%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1















            Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?




            Yes absolutely ... so would it if you do it in Update or any other repeatedly called method.



            Instead you should rather Instantiate objects in Awake and only activate or deactivate them.



            Let's say you have 3 objects A, B and C than I would make a kind of controller class that looks like



            public class ObjectsController : MonoBehaviour
            {
            // Define in which intervals the file should be read/ the scene should be updated
            public float updateInterval;

            // Prefabs or simply objects that are already in the Scene
            public GameObject A;
            public GameObject B;
            public GameObject C;
            /* Etc ... */

            // Here you map the names from your textile to according object in the scene
            private Dictionary<string, GameObject> gameObjects = new Dictionary<string, gameObjects>();

            private void Awake ()
            {
            // if you use Prefabs than instantiate your objects here; otherwise you can skip this step
            var a = Instantiate(A);
            /* Etc... */

            // Fill the dictionary
            gameObjects.Add(nameOfAInFile, a);

            // OR if you use already instantiated references instead
            gameObjects.Add(nameOfAInFile, A);
            }
            }

            private void Start()
            {
            // Start the file reader
            StartCoroutine (ReadFileRepeatedly());
            }

            // Read file in intervals
            private IEnumerator ReadFileRepeatedly ()
            {
            while(true)
            {
            //ToDo Here read the file

            //Maybe even asynchronous?
            // while(!xy.done) yield return null;

            // Now it depends how your textile works but you can run through
            // the dictionary and decide for each object if you want to show or hide it
            foreach(var kvp in gameObjects)
            {
            bool active = someConditionDependingOnTheFile;

            kvp.value.SetActive(active);

            // And e.g. position it only if active
            if (active)
            {
            kvp.value.transform.position = positionFromFile;
            }
            }

            // Wait for updateInterval and repeat
            yield return new WaitForSeconds (updateInterval);
            }
            }




            If you have multiple instances of the same prefab you also should have a look at Object Pooling






            share|improve this answer
























            • Thank you. This is really comprehensive answer.

              – Md Monjur Ul Hasan
              Jan 2 at 15:06
















            1















            Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?




            Yes absolutely ... so would it if you do it in Update or any other repeatedly called method.



            Instead you should rather Instantiate objects in Awake and only activate or deactivate them.



            Let's say you have 3 objects A, B and C than I would make a kind of controller class that looks like



            public class ObjectsController : MonoBehaviour
            {
            // Define in which intervals the file should be read/ the scene should be updated
            public float updateInterval;

            // Prefabs or simply objects that are already in the Scene
            public GameObject A;
            public GameObject B;
            public GameObject C;
            /* Etc ... */

            // Here you map the names from your textile to according object in the scene
            private Dictionary<string, GameObject> gameObjects = new Dictionary<string, gameObjects>();

            private void Awake ()
            {
            // if you use Prefabs than instantiate your objects here; otherwise you can skip this step
            var a = Instantiate(A);
            /* Etc... */

            // Fill the dictionary
            gameObjects.Add(nameOfAInFile, a);

            // OR if you use already instantiated references instead
            gameObjects.Add(nameOfAInFile, A);
            }
            }

            private void Start()
            {
            // Start the file reader
            StartCoroutine (ReadFileRepeatedly());
            }

            // Read file in intervals
            private IEnumerator ReadFileRepeatedly ()
            {
            while(true)
            {
            //ToDo Here read the file

            //Maybe even asynchronous?
            // while(!xy.done) yield return null;

            // Now it depends how your textile works but you can run through
            // the dictionary and decide for each object if you want to show or hide it
            foreach(var kvp in gameObjects)
            {
            bool active = someConditionDependingOnTheFile;

            kvp.value.SetActive(active);

            // And e.g. position it only if active
            if (active)
            {
            kvp.value.transform.position = positionFromFile;
            }
            }

            // Wait for updateInterval and repeat
            yield return new WaitForSeconds (updateInterval);
            }
            }




            If you have multiple instances of the same prefab you also should have a look at Object Pooling






            share|improve this answer
























            • Thank you. This is really comprehensive answer.

              – Md Monjur Ul Hasan
              Jan 2 at 15:06














            1












            1








            1








            Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?




            Yes absolutely ... so would it if you do it in Update or any other repeatedly called method.



            Instead you should rather Instantiate objects in Awake and only activate or deactivate them.



            Let's say you have 3 objects A, B and C than I would make a kind of controller class that looks like



            public class ObjectsController : MonoBehaviour
            {
            // Define in which intervals the file should be read/ the scene should be updated
            public float updateInterval;

            // Prefabs or simply objects that are already in the Scene
            public GameObject A;
            public GameObject B;
            public GameObject C;
            /* Etc ... */

            // Here you map the names from your textile to according object in the scene
            private Dictionary<string, GameObject> gameObjects = new Dictionary<string, gameObjects>();

            private void Awake ()
            {
            // if you use Prefabs than instantiate your objects here; otherwise you can skip this step
            var a = Instantiate(A);
            /* Etc... */

            // Fill the dictionary
            gameObjects.Add(nameOfAInFile, a);

            // OR if you use already instantiated references instead
            gameObjects.Add(nameOfAInFile, A);
            }
            }

            private void Start()
            {
            // Start the file reader
            StartCoroutine (ReadFileRepeatedly());
            }

            // Read file in intervals
            private IEnumerator ReadFileRepeatedly ()
            {
            while(true)
            {
            //ToDo Here read the file

            //Maybe even asynchronous?
            // while(!xy.done) yield return null;

            // Now it depends how your textile works but you can run through
            // the dictionary and decide for each object if you want to show or hide it
            foreach(var kvp in gameObjects)
            {
            bool active = someConditionDependingOnTheFile;

            kvp.value.SetActive(active);

            // And e.g. position it only if active
            if (active)
            {
            kvp.value.transform.position = positionFromFile;
            }
            }

            // Wait for updateInterval and repeat
            yield return new WaitForSeconds (updateInterval);
            }
            }




            If you have multiple instances of the same prefab you also should have a look at Object Pooling






            share|improve this answer














            Will creating and placing the gameobjects in the OnPreCull() method crate any performance issue?




            Yes absolutely ... so would it if you do it in Update or any other repeatedly called method.



            Instead you should rather Instantiate objects in Awake and only activate or deactivate them.



            Let's say you have 3 objects A, B and C than I would make a kind of controller class that looks like



            public class ObjectsController : MonoBehaviour
            {
            // Define in which intervals the file should be read/ the scene should be updated
            public float updateInterval;

            // Prefabs or simply objects that are already in the Scene
            public GameObject A;
            public GameObject B;
            public GameObject C;
            /* Etc ... */

            // Here you map the names from your textile to according object in the scene
            private Dictionary<string, GameObject> gameObjects = new Dictionary<string, gameObjects>();

            private void Awake ()
            {
            // if you use Prefabs than instantiate your objects here; otherwise you can skip this step
            var a = Instantiate(A);
            /* Etc... */

            // Fill the dictionary
            gameObjects.Add(nameOfAInFile, a);

            // OR if you use already instantiated references instead
            gameObjects.Add(nameOfAInFile, A);
            }
            }

            private void Start()
            {
            // Start the file reader
            StartCoroutine (ReadFileRepeatedly());
            }

            // Read file in intervals
            private IEnumerator ReadFileRepeatedly ()
            {
            while(true)
            {
            //ToDo Here read the file

            //Maybe even asynchronous?
            // while(!xy.done) yield return null;

            // Now it depends how your textile works but you can run through
            // the dictionary and decide for each object if you want to show or hide it
            foreach(var kvp in gameObjects)
            {
            bool active = someConditionDependingOnTheFile;

            kvp.value.SetActive(active);

            // And e.g. position it only if active
            if (active)
            {
            kvp.value.transform.position = positionFromFile;
            }
            }

            // Wait for updateInterval and repeat
            yield return new WaitForSeconds (updateInterval);
            }
            }




            If you have multiple instances of the same prefab you also should have a look at Object Pooling







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Jan 2 at 6:21









            derHugoderHugo

            7,88231433




            7,88231433













            • Thank you. This is really comprehensive answer.

              – Md Monjur Ul Hasan
              Jan 2 at 15:06



















            • Thank you. This is really comprehensive answer.

              – Md Monjur Ul Hasan
              Jan 2 at 15:06

















            Thank you. This is really comprehensive answer.

            – Md Monjur Ul Hasan
            Jan 2 at 15:06





            Thank you. This is really comprehensive answer.

            – Md Monjur Ul Hasan
            Jan 2 at 15:06













            0














            I'd recommend adding each of the game objects to a registry and the switching them on or off (dis/enable SetActive) via the registry class's Update() cycle.



            One Update() process to retrieve and handle the server file, another Update() process to dis/enable objects. Might sound oversimplified however it's the fastest way I think of getting the result.



            Good Luck!






            share|improve this answer




























              0














              I'd recommend adding each of the game objects to a registry and the switching them on or off (dis/enable SetActive) via the registry class's Update() cycle.



              One Update() process to retrieve and handle the server file, another Update() process to dis/enable objects. Might sound oversimplified however it's the fastest way I think of getting the result.



              Good Luck!






              share|improve this answer


























                0












                0








                0







                I'd recommend adding each of the game objects to a registry and the switching them on or off (dis/enable SetActive) via the registry class's Update() cycle.



                One Update() process to retrieve and handle the server file, another Update() process to dis/enable objects. Might sound oversimplified however it's the fastest way I think of getting the result.



                Good Luck!






                share|improve this answer













                I'd recommend adding each of the game objects to a registry and the switching them on or off (dis/enable SetActive) via the registry class's Update() cycle.



                One Update() process to retrieve and handle the server file, another Update() process to dis/enable objects. Might sound oversimplified however it's the fastest way I think of getting the result.



                Good Luck!







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 2 at 2:52









                MonzaMonza

                675410




                675410






























                    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%2f54000202%2fdynamically-render-gameobject-in-unity-c-sharp%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

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas