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

мне нужно заспавнить объект на другой сцене, как это можно реализовать?

Это как? Одновременно ж только одна сцена может быть загружена.

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

сохранить через PlayerPrefs?

Например да.

А как можно сохранить функции? Типа void

А для чего это?)

ну например я в магазине хочу купить союзного юнита и сохранить

void SpawnUnit()
{
     Instantiate(Unit, transform.position, target.position, Quaternion.identy)
}

чтоб при запуске спавнился юнит если он куплен

Так можно просто сохранить данные о юнитах, и потом спавнить используя их.
Список явно проще сохранить, чем функцию )
Только PlayerPrefs вряд ли удобно для такого, лучше в JSON и т.п. самому сохранять.
Проблема с сохраненим PlayerPrefs - #2 от пользователя AlexP
Дайте плиз код как сделать checkpoint в 2D игре на unity - #2 от пользователя AlexP

Префаб по имени можно заспавнить например либо как-то так с помощью ресурсов, либо просто кинуть все нужные префабы в поля спавняшего скрипта и создать Dictionary имя => префаб.

Я вроде слышал что JSON работает только для пк игр. Так ли это?

Нет, файлы везде сохранять можно.

Unity - Scripting API: Application.persistentDataPath

долго ломал голову но так и не понял как это сделать через словари, даже примерно не понял

Dictionary<string, GameObject> unitTypePrefabDict = new Dictionary<string, GameObject>
{
    {"Soldier", SoldierPrefab},
    {"Wizard", WizardPrefab}
};

Instantiate(unitTypePrefabDict["Soldier"], .........);

а что значит

{"Soldier", SoldierPrefab},
{"Wizard", WizardPrefab}

Ключи и значения, по ссылке ж был пример внизу.
В данном случае связь имени (типа) юнита с префабом, который нужно создать.
Ну то есть в файл записать одно из этих названий, и по нему определить какой префаб нужен.

Вместо таких названий может быть удобнее использовать что-нибудь типа unit.GetType().Name

то-есть SoliderPrefab это название префаба который мы создали в Unity?

Это поле/переменная, куда он кинут.

то-есть нужно создать переменную GameObject с названием SoliderPrefab и туда впихнуть префаб?

Да.

а через PlayerPrefs можно сохранить словарь?

и кстати нужна же ещё проверка на то куплен юнит или нет перед спавном