Indeed. I like to use a lot of additively-loaded scenes, so I tend to code my individual item controllers (including the player controller) so that they are happy to wait around if other stuff isn’t ready yet.
You can make Start() into a coroutine, which is a super-easy way to get this kind of lazy-sloppy startup that is extremely tolerant of late loading and uneven loading.
// typical base framework for all entities
bool ready;
IEnumerator Start ()
{
// don't proceed until the hex tilemap is ready
while( MyHexTileMap.Instance == null)
{
yield return null;
}
transform.position = MyHexTileMap.Instance.GetSpawnPoint();
ready = true;
}
void Update ()
{
if (!ready) return;
// everything else here...
}
void FixedUpdate ()
{
if (!ready) return;
// everything else here...
}