How to create script linked to scene?

Hi, i create a script “finish.cs”, it have 2 public values:

-maxScore

-next_level

that are changeable from inspecor. I want to make this script universal for each scene, but when i edit eg. maxScore in scene 1, this value is assigned aslo to maxScore from scene 2. How can i avoid this?
here is my code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;


public class finish : MonoBehaviour {

    public TextMesh textMesh;   //connect score display text
    public int maxScore = 3;    //max score on level
    public string next_level;   //next level name

    void Start()
    {
        
    }

    private void OnTriggerEnter(Collider collision)
    {
        if (collision.gameObject.name == "Sphere")
        {
            string wynik = textMesh.text;       //conversion of score
            int Iwynik;                         //to int and check if
            int.TryParse(wynik, out Iwynik);    //its equal to max score

            if (Iwynik == maxScore)
            {
                Debug.Log("level change");      //just debug
                textMesh.text = "0";                    //score reset
                SceneManager.LoadScene(next_level);     //load next scene
            }


            
        }
        Debug.Log(collision.gameObject.name);   //just debug

    }
}

When you hit run:

  • finish.class is created and maxScore
    is assigned to 3
  • When you switch scenes, finish.class
    is Destroyed
  • When you load another scene that
    requres finish.class, it is created
    again and maxScore is assigned to 3
    (once again)

If you want data to persist between scene changes you need to make those classes a “Singleton”.

A very convenient way to achieve this is to make a class with the following code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour {

    private static T instance;

    public static T Instance {
        get {
            T obj = FindObjectOfType<T>();

            if (instance == null) {
                instance = obj;
            } else if (instance != obj) {
                Destroy(obj);
            }
            obj.transform.SetParent(null);
            DontDestroyOnLoad(obj);
            return instance;
        }
    }
}

Now instead of finish.class extending MonoBehavior, make it extend the Singleton.

public class finish : Singleton<finish>{

Your variable will not be destroyed and replaced when you switch scenes.
Remember to only make classes a “Singleton” if they are unique.

Good singleton classes are GameManagers, PlayerInventory, SceneManagers, or stuff like Appendixes. All stuff that should be static.

okay first you must to build scenes and you know, then you can declare script in other scenes ,or another solve to create game object in scene 1 and add script to it ,and use (dont destroy on load) .