Unit scripts calling Start function before other scripts

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...
    }