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);
}
}
}
}