Я пытаюсь сделать следующий уровень доступным, когда стакан заполнен. Пока что следующий уровень будет разблокирован только тогда, когда вы нажмете кнопку «следующий уровень», и если вы повторите уровень, следующий уровень не будет разблокирован.
вот фотографии для справки:

Это скрипт заблокированных уровней:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
[ExecuteInEditMode]
public class LockedLevels : MonoBehaviour {
void Awake()
{
transform.GetChild(1).localScale = Vector3.one;
PlayerPrefs.SetInt("1", 1);
for (int i = 0; i < transform.GetChild(1).childCount; i++)
{
transform.GetChild(1).GetChild(i).gameObject.SetActive(false);
}
UnLockLevels();
}
void Update()
{
transform.GetChild(0).gameObject.GetComponent<Text>().text = transform.name;
transform.GetChild(0).gameObject.GetComponent<Text>().fontSize = 75;
if (Input.GetKeyDown(KeyCode.Delete))
{
PlayerPrefs.DeleteAll();
}
}
public void UnLockLevels()
{
if (PlayerPrefs.GetInt(gameObject.name) == 1)
{
transform.GetChild(0).gameObject.GetComponent<Text>().color = new Color(1,1,1,1) ;
GetComponent<Button>().interactable = true;
if (PlayerPrefs.GetInt("Star" + gameObject.name) == 3)
{
for (int i = 0; i < transform.GetChild(1).childCount; i++)
{
transform.GetChild(1).GetChild(i).gameObject.SetActive(true);
}
}
else if (PlayerPrefs.GetInt("Star" + gameObject.name) == 2)
{
for (int i = 0; i < transform.GetChild(1).childCount-1; i++)
{
transform.GetChild(1).GetChild(i).gameObject.SetActive(true);
}
}
else if (PlayerPrefs.GetInt("Star" + gameObject.name) == 1)
{
transform.GetChild(1).GetChild(0).gameObject.SetActive(true);
}
else if (PlayerPrefs.GetInt("Star" + gameObject.name) == 0)
{
for (int i = 0; i < transform.GetChild(1).childCount; i++)
{
transform.GetChild(1).GetChild(i).gameObject.SetActive(false);
}
}
}
else
{
GetComponent<Button>().interactable = false;
transform.GetChild(0).gameObject.GetComponent<Text>().color = new Color(1, 1, 1, .5f);
}
}
public void LevelMenu()
{
SceneManager.LoadScene(transform.name);
}
}
А это скрипт GlassFill:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GlassFill : MonoBehaviour {
int trigCont;
GameManager gm;
int Star;
// Use this for initialization
void Start () {
gm = FindObjectOfType<GameManager>();
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.tag == "DynamicParticle")
{
if (trigCont == 0)
{
transform.parent.GetChild(0).GetComponent<SpriteRenderer>().sprite = gm.SurpriseGlass;
}
col.gameObject.tag = "InGlassWater";
col.gameObject.GetComponent<Rigidbody2D>().gravityScale = .3f;
col.gameObject.GetComponent<Rigidbody2D>().velocity = col.gameObject.GetComponent<Rigidbody2D>().velocity /4;
trigCont++;
if (trigCont > 50)
{
if (trigCont == 51)
{
if (Mathf.FloorToInt(gm.PenCapacity.value * 100) > 75)
{
Star = 3;
}
else if (Mathf.FloorToInt(gm.PenCapacity.value * 100) > 50)
{
Star = 2;
}
else if (Mathf.FloorToInt(gm.PenCapacity.value * 100) > 25)
{
Star = 1;
}
print(Star + "star");
transform.parent.GetChild(0).GetComponent<SpriteRenderer>().sprite = gm.HappyGlass;
Camera.main.GetComponent<AudioSource>().Play();
Invoke("nextScene", 2);
CancelInvoke("Check");
for (int i = 0; i < Camera.main.transform.childCount; i++)
{
if (Camera.main.transform.GetChild(i).GetComponent<ParticleSystem>() != null)
{
Camera.main.transform.GetChild(i).GetComponent<ParticleSystem>().Play();
}
}
}
}
else
{
CancelInvoke("Check");
Invoke("Check",5);
}
if (trigCont > 60)
{ //You can write a function over here if you want to give a star according to glass fill
print("two star");
}
if (trigCont > 70)
{
print("three star");
}
}
}
void Check()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
void nextScene()
{
PlayerPrefs.SetInt((SceneManager.GetActiveScene().buildIndex).ToString(), 1);
PlayerPrefs.SetInt("Star" + SceneManager.GetActiveScene().name, Star);
gm.LevComp.SetActive(true);
if (Star > 2)
{
gm.LevComp.transform.GetChild(0).gameObject.SetActive(true);
gm.LevComp.transform.GetChild(1).gameObject.SetActive(true);
gm.LevComp.transform.GetChild(2).gameObject.SetActive(true);
}
else if (Star > 1)
{
gm.LevComp.transform.GetChild(0).gameObject.SetActive(true);
gm.LevComp.transform.GetChild(1).gameObject.SetActive(true);
}
else if (Star>0)
{
gm.LevComp.transform.GetChild(0).gameObject.SetActive(true);
}
}
}