Best way to ensure parameters are set by first update

Hi, I know there are a few questions and answers about setting parameters when creating new GameObjects using the Instantiate method, but none of them seems to indicate if there is any guarantee whether or not these parameters will all be set by the first update.

At the moment I am instantiating a new object called GridManager from GameController and then I am storing the result in a variable called gm and then getting the script component and then setting the variables from there. Let’s say in this case things like width and height using either set methods or public variables. Normally if I did this same thing with a normal constructor, I could have a guarantee that by the time the first update or collision trigger is called, I’d have all those variables setup and not have to worry about if they have the correct values.

I’ve tried the above method and it seems like all the variables are set correctly by the time an update or collision trigger is called. However, this was only with 1 or 2 method calls. What if I set several variables? If I understand correctly, as soon as a GameObject is instantiated, its Awake method is called and when that is done it goes to Start and then Update loop. This runs in parallel to the GameController’s variables setting code. So if I only set a few variables then by the time the GridController reaches Update all the variables are set, but there is no guarantee of them being set, especially if I were to have a lot of variables to pass. Am I correct in this regard?

If so, would it be best to do something like instantiate, then disabled the object, then set variables and then enable the object? Or wrap all the update code in a condition that checks if a boolean ready is set to true and only set that to true from the Controller as the last passed parameter?

Everything in Awake() runs before everything in Start() before everything in Update(). It makes no difference whether you set one variable or a thousand.