Как манипулировать с объектами другой сцены через скрипт?

Так я предлагал сохранять список купленных.

Словарь не для сохранения, а для определения нужного префаба при чтении сохраненного списка.

так и как добавлять в список купленные если они изначально не куплены то список пуст и как их туда добавить?

и по алгоритму я должен сделать что когда я нажимаю купить то в словарь добавляется новый префаб и спавнится , но для словаря нужен новый скрипт, верно?

Дык при покупке сохранять всех купленных юнитов в файл.
Потом читать из файла этот список и спавнить.

Словарь это просто замена кучи ифов при чтении элементов списка из файла и спавне

Instantiate(unitTypePrefabDict[name], .........);

вместо

GameObject prefab = null;
if (name == "Soldier")
{
    prefab = SoldierPrefab;
}
else if (name == "Wizard")
{
    prefab = WizardPrefab;
}

Instantiate(prefab, .........);

не понял что значит.

при покупке сохранять всех купленных юнитов в файл.

и не понял как их сохранить в файл.

Любым удобным способом, гугл знает много их )

По ссылке в этой теме сверху есть классы с атрибутом [Serializable]
https://gitlab.com/AlexP11223/FirstPersonPlatformer/-/blob/master/Assets/FirstPersonPlatformer/Scripts/Serialization/SaveData.cs#L63

Создаются объекты этих классв с данными врагов на сцене (позиция, …)
https://gitlab.com/AlexP11223/FirstPersonPlatformer/-/blob/master/Assets/FirstPersonPlatformer/Scripts/Serialization/Level1SaveHandler.cs#L31

И потом они сохраняются в файл
https://gitlab.com/AlexP11223/FirstPersonPlatformer/-/blob/master/Assets/FirstPersonPlatformer/Scripts/GameManager.cs#L50
https://gitlab.com/AlexP11223/FirstPersonPlatformer/-/blob/master/Assets/FirstPersonPlatformer/Scripts/Serialization/SaveData.cs#L19

С помощью File.WriteAllText и библиотеки Newtonsoft.Json https://github.com/jilleJr/Newtonsoft.Json-for-Unity

В данном случае данные юнитов видимо надо не со сцены брать, а просто при покупке добавлять объект в список и сохранять список в файл. Список изначально (при загрузке игры/сцены) пустой, либо прочитан из файла если там уже что-то есть.

|Ошибка|CS0103|Имя unitTypePrefabDict не существует в текущем контексте.

    void Start()
    {
        Dictionary<string, GameObject> unitTypePrefabDict = new Dictionary<string, GameObject>
        {
            {"Units", FirstUnit }
        };
    }

    private void Update()
    {
        Instantiate(unitTypePrefabDict["Units"], transform.position);
    }
}

C# и .NET | Область видимости и контекст переменных

а понял, спасибо