private IEnumerator LoadPlayerPositionCoroutine()
{
    // Wait one frame to ensure level generation (e.g., Entrance placement) is complete
    yield return null;

    int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
    string posXKey = "PlayerPosX_Scene" + currentSceneIndex;
    Vector3 targetPos;

    if (PlayerPrefs.HasKey(posXKey))
    {
        float x = PlayerPrefs.GetFloat(posXKey);
        float y = PlayerPrefs.GetFloat("PlayerPosY_Scene" + currentSceneIndex);
        float z = PlayerPrefs.GetFloat("PlayerPosZ_Scene" + currentSceneIndex);
        targetPos = new Vector3(x, y, z);
        Debug.Log($"Loaded saved position for scene {currentSceneIndex}: {targetPos}");
    }
    else
    {
        Debug.Log("No Saved Position—defaulting based on entry direction.");
        string defaultObjectName = GlobalStats.goingUp ? "Exit" : "Entrance";  // Use Exit if returning
        GameObject defaultSpawn = GameObject.Find(defaultObjectName);

        if (defaultSpawn != null)
        {
            targetPos = defaultSpawn.transform.position;
            Debug.Log($"Spawned at {defaultObjectName}: {targetPos}");
        }
        else
        {
            Debug.LogWarning($"{defaultObjectName} not found—using world origin (0,0,0) as fallback.");
            targetPos = Vector3.zero;  // Explicit fallback
        }
    }

    // Apply position with controller handling
    var controller = GetComponent<CharacterController>();
    if (controller != null)
    {
        controller.enabled = false;  // Disable to allow direct set without physics interference
    }
    if (fpController != null)
    {
        fpController.enabled = false;
    }

    transform.position = targetPos;

    // NEW: Force physics sync and wait an extra frame for any overrides
    Physics.SyncTransforms();
    yield return new WaitForEndOfFrame();  // Wait for end of frame to apply changes

    if (controller != null)
    {
        controller.enabled = true;  // Re-enable
    }
    if (fpController != null)
    {
        fpController.enabled = true;
    }

    yield return null;  // Wait another frame
    Debug.Log($"Final player position after set: {transform.position} (if different, check for overrides)");
}