How to save multiple scenes' data

I want to create small project (it’s basically project to test and learn how serialization and saving work). Project will have scenes for three battle arenas (they won’t be identical), shop, main hub, etc. and things like character progression through upgrade system and customization.
And I want to save that data as one file.
Battle arenas will save which enemies were killed and additional stuff like collected collectibles. Shop will store actuall items available to buy.
Can you explain this like to person who don’t program on daily basic and ain’t familiar with advanced C# concepts.

Assuming this is single player and you just want to save on the device you can use PlayerPrefs.
This will save data locally to the device, you can set data, then read it back later. Here is an example of a few things you could do.

Of course you have to put them in the right places. I might start with a script in your first scene that sets all the keys to the default values:

void Awake()
        if (!PlayerPrefs.HasKey("DefaultsSet")){

            //Player Specific Values

            //Shop Values (



Then in your shop, you can show Gun2 the store like this:

int gunCosts = [0,30,100];
int helmetCosts = [0,30,100];

void Start()
        if (PlayerPrefs.GetString("Shop:Purchased:Gun1") == "True"){
            //This gun is unlocked and equip-able, so you can change its sprite to the 'unlocked sprite'
            //You also can add a click-listener to go to the function EquipGun(1)
            //Which would do PlayerPrefs.SetInt("Player:EquippedGunId",1);
        } else if (PlayerPrefs.GetInt("Player:Coins") > gunCosts[1]) { 
           //This gun is not unlocked, but can be because you have over gun[1] coins
           //Here you could add change the sprite to make the button look 'unlock-able' or 'purchasable'
            //You also can add a click-listener to go to the function PurchaseGun(1)
        } else {
          //This gun is not unlocked and you do not even have enough money to do so
         // Here you can change the sprite of the button to be like a 'locked' button, and have
         // A Click listener that just tells the user they don't have the cash to buy it

void PurchaseItem(int gunId) {
       //Remove coins from player
       PlayerPrefs.SetInt("Player:Coins", PlayerPrefs.GetInt("Player:Coins") - gunCosts[gunId] );
       //Unlock gun
       //Equip gun

That was my sloppy 10 min attempt. Hope there are no typos and that points you in the right direction!

I don’t know how to store data inside one class. One of my ideas is to create “SceneData” classes that holds important data and make “SaveData” class that hold SceneData like

    public class SaveData {
    	public ArenaSceneData[] arenaSceneDatas;
    	public ShopSceneData ShopSceneData;
    	public ProgressionData progressionData;
    	public CustomizationData customizationData;
    public class ArenaSceneData {
    	public GameObject killedEnemies;
    	public Collectibles collectedCollectibles;
    public class ShopSceneData {
    	public Item[] aviableItems;
    public class ProgressionData {
    	public int level;
    	public int exp;
    	public SkillTree acctualSkillTree;
    public class CustomizationData {
    	public string playerName;
    	public Color playerColor;

But this aproach isn’t quite good because every Arena will need to have index, and if project will get bigger this would be a mess