А у меня не получилось увидеть такую проблему.
Воссоздал примерно вашу задачу.
Есть две сцены.
Первая просто с меню, в котором три кнопки выбора id точки спавна и одна кнопка для загрузки уровня с персонажем.
Вторая сцена с персонажем, который начинает игру с указанной точки. Там же есть кнопка возврата обратно в меню, например, чтобы выбрать другую начальную позицию.
Я так же как и вы создал статический класс, который хранит id (int) нужной точки спавна. Так удобнее, чем хранить Vector3 для позиции. Это уже пусть сам уровень, который загрузится, разбирается с этим id как хочет. Значение -1 означает, что позиция не задана (условно).
Используется csharp
public static class GameValues
{
public static int POSITION_ID = -1;
}
А когда загружается уровень с персонажем, то на нём изначально есть какой нибудь скрипт, в котором уже заготовлен подходящий массив для точек спавна (Vector3). Остаётся только в старте найти ссылку на персонажа и установить ему положение и поворот такой точки. А id точки берём именно из статического класса.
Используется csharp
using UnityEngine;
public class SpawnPoints : MonoBehaviour
{
// здесь массив точек для спавна, он заполнялся в инспекторе
public Transform[] spawnPoints;
void Start()
{
CharacterController character = FindObjectOfType<CharacterController>();
if (GameValues.POSITION_ID != -1)
{
Transform randSpawn = spawnPoints[GameValues.POSITION_ID];
character.transform.position = randSpawn.position;
character.transform.rotation = randSpawn.rotation;
}
// можно удалить этот скрипт с объекта (хотя можно было и весь объект удалить, ведь он больше не нужен).
Destroy(this);
}
}
На всякий случай есть package с этой ситуацией
https://dropmefiles.com/L54ayЛучше его открыть в новом проекте, чтобы потом не чистить текущий. Так же нужно будет заполнить сцены в build settings.