2d MemoryGame NextScene bug anyone help pls

Hello,

I hope this message finds you well,

I’m trying to make a memory game, but I have a problem. I designed the first 3 scenes. The game starts smoothly but when I tested what Ive done I noticed that when the 1st level is done the second levels grid has only 1 out of 28 png files, but when I do pause & continue, it returns to normal, however, some of the existing png files do not respong when pressing, I dont believe that the script is wrong because it works out properly on the first level but whenever I copy paste it for the upcoming levels it gives the previous cases, I would be more than grateful if you can help me fix this situation. kindly view the attached script the I wrote.

Yours Sincerely

Bahadır Özbey

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

public class OyunKontrolScript : MonoBehaviour
{
    //------------------
    GameObject secilenButon;
    GameObject butonunKendisi;

    //--------------------
    public Sprite defaultSprite;
    public GameObject[] Butonlar;
    public TextMeshProUGUI sayac;
    public GameObject[] OyunSonuPaneller;
    public AudioSource Kutuacma;
    public AudioSource YanlisKutu;
    public Slider ZamanSlider;
    public GameObject SettingsButton;
    //Random Obje ayarları

    public GameObject Grid;
    public GameObject Havuz;
    bool olusturmadurumu;
    int olusturmasayisi;
    int toplamElemanSayisi;
    public int olusturulcakobje;
    //public AudioSource kaybetmeses;
    //-- SAYAÇ--------------
    bool zamanlayici;
    public float ToplamZaman;
    float dakika;
    float saniye;
    float gecenzaman;  //slider
    //-------------------------------
    public int hedefbasari;
    int anlikbasari;
    int ilksecim;
   
    //-----------------------------
    void Start()
    {
        ilksecim = 0;
        zamanlayici = true;
        gecenzaman = 0;
        ZamanSlider.value = gecenzaman;
        ZamanSlider.maxValue = ToplamZaman;
        SettingsButton.SetActive(true);
        olusturmadurumu = true;
        olusturmasayisi = 0;
        toplamElemanSayisi = Havuz.transform.childCount;
       


        StartCoroutine(olustur());


        int rastgelesayi = Random.Range(0, Havuz.transform.childCount - 1); // indis numarası +1 olduğu için çocuk obje sayisini buradan alıyoruz rastgelesayi ya havuzdan random ataması bu şekilde yapılıyor

        Havuz.transform.GetChild(rastgelesayi).transform.SetParent(Grid.transform); // havuzdan chield alınan obje grid tarafına transform ediliyor burası önemli !

        Debug.Log(Havuz.transform.GetChild(rastgelesayi).name);
    }
    private void Update()
    {
        if (zamanlayici && gecenzaman != ToplamZaman)

        {
            gecenzaman += Time.deltaTime;
            ZamanSlider.value = gecenzaman;
            if (ZamanSlider.value == ZamanSlider.maxValue)
            {
                zamanlayici = false;
                GameOver();

            }

            /*ToplamZaman -= Time.deltaTime;
            dakika = Mathf.FloorToInt(ToplamZaman / 60); // 60 altına düştüğünde dakika 0 a düşecek işlem yapmayacak
            saniye = Mathf.FloorToInt(ToplamZaman % 60); // 60 katları kalanı ve 60 altı - saniye
            /*sayac.text = Mathf.FloorToInt( ToplamZaman).ToString();*/

            // sayac.text = string.Format("{0:00}:{1:00}", dakika, saniye);
        }



    }


    IEnumerator olustur()   // while döngüsü ile atamayı sürekli hale getiriyoruz fakat dikkat edilmesi gereken konu kaç eleman olduğu ve ne zaman duracağı while döngüsü stoplamazsa oyun patlar .
    {

        yield return new WaitForSeconds(.1f);

        while (olusturmadurumu)
        {
            int rastgelesayi = Random.Range(0, Havuz.transform.childCount - 1);
            if (Havuz.transform.GetChild(rastgelesayi).gameObject != null)
            {
                Havuz.transform.GetChild(rastgelesayi).transform.SetParent(Grid.transform);
                olusturmasayisi++;

                if (olusturmasayisi == olusturulcakobje)
                {
                    olusturmadurumu = false;
                }

            }

        }

    }

    void GameOver()
    {
        OyunSonuPaneller[0].SetActive(true);
        SettingsButton.SetActive(false);
     

        //kaybetmeses.Play();
    }

    public void Mute()
    {
        AudioListener.pause = !AudioListener.pause;
    }

    public void devamke()
    {
        OyunSonuPaneller[2].SetActive(false);
        zamandevam();
    }
    void Win()
    {
        zamandurdur();
        SettingsButton.SetActive(false);
        OyunSonuPaneller[3].SetActive(false);
        OyunSonuPaneller[1].SetActive(true);


    }

    public void zamandurdur()
    {
        Time.timeScale = 0;
    }
    public void zamandevam()
    {
        Time.timeScale = 1;
    }


    public void settings()
    {
        OyunSonuPaneller[2].SetActive(true);
        zamandurdur();
    }

   

    public void AnaMenu()
    {
        SceneManager.LoadScene("AnaMenu");
    }

    public void GameOverNO(string Cevap)
    {

        if (Cevap == "Yes")
        {

            SceneManager.LoadScene("AnaMenu");

        }


    }

    public void TekrarOyna()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

    }
    public void objever(GameObject objem)
    {

        butonunKendisi = objem;
        butonunKendisi.GetComponent<Image>().sprite = butonunKendisi.GetComponentInChildren<SpriteRenderer>().sprite;
        butonunKendisi.GetComponent<Image>().raycastTarget = false;

    }

    void Butonlarindurumu(bool durum)
    {
        foreach (var item in Butonlar)
        {
            if (item != null)
            {
                item.GetComponent<Image>().raycastTarget = durum;
            }

        }

    }
    public void ButonTikladi(int deger)
    {
        kontrol(deger);
    }
    void kontrol(int gelendeger)
    {



        if (ilksecim == 0)
        {
            ilksecim = gelendeger;
            secilenButon = butonunKendisi;
        }

        else
        {
            StartCoroutine(kontroletbakalim(gelendeger));
        }
    }

    IEnumerator kontroletbakalim(int gelendeger)
    {
        Butonlarindurumu(false);

        yield return new WaitForSeconds(.3f);

        if (ilksecim == gelendeger)
        {

            anlikbasari++;
            Kutuacma.Play();// sesler[1].Play();

            secilenButon.GetComponent<Image>().enabled = false;
            secilenButon.GetComponent<Button>().enabled = false;
            butonunKendisi.GetComponent<Image>().enabled = false;
            butonunKendisi.GetComponent<Button>().enabled = false;


            /*Destroy(secilenButon.gameObject);
            Destroy(butonunKendisi.gameObject);*/
            ilksecim = 0;
            secilenButon = null;
            Butonlarindurumu(true);

            if (hedefbasari == anlikbasari)
            {
                Win();
            }




        }

        else

        {
            {
                YanlisKutu.Play();// yanlış bulma ses gelecek
                secilenButon.GetComponent<Image>().sprite = defaultSprite;
                butonunKendisi.GetComponent<Image>().sprite = defaultSprite;
                ilksecim = 0;
                secilenButon = null;
                Butonlarindurumu(true);

            }
        }




    }
}

Can you clarify where in your script you are accessing these 28 images? You call GetComponent() in a lot of places in your script.

[LIST=1]
[*] public GameObject Grid;   //its grid
[*]    public GameObject Havuz;  //for all png  i put all items in one game object
[*]    bool olusturmadurumu;      //for spawn ok or no
[*]    int olusturmasayisi;          // for png pieces
[*]    int toplamElemanSayisi;  // total png pieces
[*]    public int olusturulcakobje; // spawn gameobject
[/LIST]
int rastgelesayi = Random.Range(0, Havuz.transform.childCount - 1);
        Havuz.transform.GetChild(rastgelesayi).transform.SetParent(Grid.transform); //Havuz (gameobject in all png )
        Debug.Log(Havuz.transform.GetChild(rastgelesayi).name);

   IEnumerator olustur()   // after then i use enumarator & while for the all items havuz.getchild to grid get parent
    {
        yield return new WaitForSeconds(.1f);
        while (olusturmadurumu)
        {
            int rastgelesayi = Random.Range(0, Havuz.transform.childCount - 1);
            if (Havuz.transform.GetChild(rastgelesayi).gameObject != null)
            {
                Havuz.transform.GetChild(rastgelesayi).transform.SetParent(Grid.transform);
                olusturmasayisi++;
                if (olusturmasayisi == olusturulcakobje)
                {
                    olusturmadurumu = false;
                }

like this i add info to code for you