Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
1
Question by toddwong · Dec 22, 2021 at 07:45 AM · callback

Start and LateUpdate gets called but not Update

 public class Foo : MonoBehaviour
 {
     public bool needCreateBar = false;
 
     void Update()
     {
         if (needCreateBar)
         {
             var gameObject = new GameObject("Bar");
             Debug.LogFormat("Creating {0}", Time.time);
             gameObject.AddComponent<Bar>();
             Debug.LogFormat("Created {0}", Time.time);
             needCreateBar = false;
         }
     }
 }
 
 public class Bar : MonoBehaviour
 {
     private bool firstUpdate = true;
     private bool firstLateUpdate = true;
 
     private void Awake()
     {
         Debug.LogFormat("Bar Awake {0}", Time.time);
     }
 
     void Start()
     {
         Debug.LogFormat("Bar Start {0}", Time.time);
     }
 
     void Update()
     {
         if (firstUpdate)
         {
             Debug.LogFormat("Bar Update {0}", Time.time);
             firstUpdate = false;
         }
     }
 
     private void LateUpdate()
     {
         if (firstLateUpdate)
         {
             Debug.LogFormat("Bar LateUpdate {0}", Time.time);
             firstLateUpdate = false;
         }
     }
 }
 

The output is:

 Creating 6.733649
 Bar Awake 6.733649
 Created 6.733649
 Bar Start 6.733649
 Bar LateUpdate 6.733649
 Bar Update 6.747721

The Update function was called one frame later then Start and LateUpdate. Because the gameobject was rendered once without Update, it often causes flickering.

I can overcome this by calling Update in Start, but it looks a little weired and I have to comment the code to avoid confusing others.

I'm using 2020.3.24f1

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by endasil_unity · Dec 27, 2021 at 08:19 PM

This is a really fascinating problem, I had no idea Update was skipped if you instantiate an object from Update in another script and I don't have a good solution. Just noting down some experimentations and thoughts that could perhaps help in the search for a good solution.

My first thought was that it had to do with creating a new GameObject and then adding a component, but using Instantiate() and a prefab with a bar script on it did not result in any difference.

Next idea was that perhaps if we delayed the instantiation to the end of the frame and it would run everything correctly when instantiated the next frame. This may not be the most elegant solution but it makes the object run start -> update -> lateupdate the next frame and perhaps can be of some help.

 public class Foo : MonoBehaviour
 {
      public bool needCreateBar = false;
  
      void Update()
      {
          if (needCreateBar)
          {
             StartCoroutine("SpawnStuff");    
          }
      }
 
     IEnumerator SpawnStuff()
     {
              yield return new WaitForEndOfFrame(); 
              var gameObject = new GameObject("Bar");
              Debug.LogFormat("Creating {0}", Time.time);
              gameObject.AddComponent<Bar>();
              Debug.LogFormat("Created {0}", Time.time);
              needCreateBar = false;
  }
 }








Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

132 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

AsyncCallback using UdpClient crashes windows build 1 Answer

C# How to wait on callback, should I use threading? 1 Answer

Displaying a device's installed apps in Unity project. 0 Answers

Dragwindow can only be called within a window callback 1 Answer

Steamworks SetLobbyMemberData not triggering LobbyDataUpdate_t 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges