- Home /
Does transform get copied before or after Start() called inside Instantiate()
I've got a networked situation where a projectile is being spawned on a server, then the client is told to spawn it as well. The server spawns it with the correct orientation, but on the client it spawns with a bad rotation.
I think this is due to the projectile's Start() method being called before the transform data being passed into Instantiate() is copied to the projectile. (the network code path kicks off during a Start() call on a component of the projectile, so the uninitialized transform would be coming across potentially).
I can't seem to find any information on order of operation within Instantiate, does anyone know when the transform (rotation more specifically) is copied to the new data object vs. when Start is called?
If you want to be sure about this, add an yield delay inside Start - but use a boolean flag to hold periodic functions like Update:
var delay = true; // nobody moves while delay is on!
function Start(){ yield; // wait for one frame... yield WaitForSeconds(0.5); // or wait for 0.5 seconds // your Start code goes here delay = false; // delay finished }
function Update(){ if (delay) return; // do nothing until delay finished // Update code goes here }
I would say it is better to find out than to defend against the unknown.
Answer by Waz · Sep 02, 2011 at 09:30 PM
Start is called much later. OnEnabled and Awake are called inside Instantiate. You can add Debugs to see the order.
Your answer
Follow this Question
Related Questions
I'm attempting to instantiate a prefab GameObject, but it just won't show up!! 1 Answer
Checking if object intersects? 1 Answer
Race conditions using Instantiate 1 Answer
MonoBehavior.Start() called infinite times? 1 Answer
How do I reference a GameObject after finding its collider with Physics.OverlapSphere()? 1 Answer