在这里插入代码片
```using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test1 : MonoBehaviour
{
//是否解锁关卡
[SerializeField] private bool unlocked;
Button[] levelBtns;//关卡按钮
Transform checkpointPanel, ScorePanel, EasyPanel, GridPanel;//关卡面板
public List<GameObject> LevelTest = new List<GameObject>();//关卡
public GameObject selectGrid;
public Button easyBtn, normalBtn, hardBtn;//难度选择按钮+返回按钮
public GameObject[] stars;
public Sprite yellowStar;
public GameObject muQiu, shitouQiu, tieQiu;
bool hasGeneratedObject = false;
private void Start()
{
//PlayerPrefs.DeleteAll();//重置
levelBtns = new Button[selectGrid.transform.GetChild(0).GetChild(0).childCount];
ScorePanel = GameObject.Find("UICanvas").transform.GetChild(0);
checkpointPanel = GameObject.Find("checkpointPanel").transform;
EasyPanel = GameObject.Find("checkpointPanel").transform.GetChild(3).transform;
GridPanel = GameObject.Find("checkpointPanel").transform.GetChild(0).transform;
//添加关卡
for (int i = 0; i < GameObject.Find("NewLevel").transform.childCount; i++)
{
LevelTest.Add(GameObject.Find("NewLevel").transform.GetChild(i).gameObject);
}
for (int i = 0; i < levelBtns.Length; i++)
{
//赋值关卡数字
selectGrid.transform.GetChild(0).GetChild(0).GetChild(i).GetChild(0).GetComponent<Text>().text = (i + 1).ToString();
levelBtns[i] = selectGrid.transform.GetChild(0).GetChild(0).transform.GetChild(i).GetComponent<Button>();
}
}
private void Update()
{
UpdateLevelImage();
UpdateLevelStatus();
PressSelection();
}
private void UpdateLevelImage()
{
if (!unlocked)//代表关卡还是锁着的状态
{
gameObject.GetComponent<Button>().interactable = false;
transform.GetChild(0).gameObject.SetActive(false);
transform.GetChild(4).gameObject.SetActive(true);
}
else
{
gameObject.GetComponent<Button>().interactable = true;
transform.GetChild(0).gameObject.SetActive(true);
transform.GetChild(4).gameObject.SetActive(false);
//已经读取的最高数据
for (int i = 0; i < PlayerPrefs.GetInt("Lv" + levelBtns[i].transform.GetChild(0).GetComponent<Text>().text); i++)
{
Text num = transform.GetChild(0).GetComponent<Text>();
int levelNum = int.Parse(num.text);
if (PlayerPrefs.GetInt("Lv" + levelNum) == 1)
{
stars[0].gameObject.GetComponent<Image>().sprite = yellowStar;
}
if (PlayerPrefs.GetInt("Lv" + levelNum) == 2)
{
stars[0].gameObject.GetComponent<Image>().sprite = yellowStar;
stars[1].gameObject.GetComponent<Image>().sprite = yellowStar;
}
if (PlayerPrefs.GetInt("Lv" + levelNum) == 3)
{
stars[0].gameObject.GetComponent<Image>().sprite = yellowStar;
stars[1].gameObject.GetComponent<Image>().sprite = yellowStar;
stars[2].gameObject.GetComponent<Image>().sprite = yellowStar;
}
}
}
}
public void PressSelection()
{
foreach (var levelBtn in levelBtns)
{
if (unlocked)
{
//移除旧的监听器
levelBtn.onClick.RemoveAllListeners();
//添加事件
levelBtn.onClick.AddListener(delegate ()
{
//获取点击按钮上的数字,这个数字就是第几关
Text text = levelBtn.gameObject.GetComponentInChildren<Text>();
GridPanel.gameObject.SetActive(false);
EasyPanel.gameObject.SetActive(true);
for (int i = 0; i < LevelTest.Count; i++)
{
if (LevelTest[i] != null)
{
easyBtn.onClick.AddListener(() =>
{
if (!hasGeneratedObject)
{
GameObject qiu = Instantiate(muQiu, LevelTest[int.Parse(text.text) - 1].transform.GetChild(0).position, Quaternion.identity);
qiu.transform.parent = LevelTest[int.Parse(text.text) - 1].transform;
qiu.transform.localScale = new Vector3(1.1f, 1.1f, 1.1f);
qiu.name = "PlayerBall";
//激活对应关卡
LevelTest[int.Parse(text.text) - 1].SetActive(true);
checkpointPanel.gameObject.SetActive(false);
ScorePanel.gameObject.SetActive(true);
hasGeneratedObject = true;
}
});
normalBtn.onClick.AddListener(() =>
{
if (!hasGeneratedObject)
{
GameObject qiu = Instantiate(shitouQiu, LevelTest[int.Parse(text.text) - 1].transform.GetChild(0).position, Quaternion.identity);
qiu.transform.parent = LevelTest[int.Parse(text.text) - 1].transform;
qiu.transform.localScale = new Vector3(1.1f, 1.1f, 1.1f);
qiu.name = "PlayerBall";
//激活对应关卡
LevelTest[int.Parse(text.text) - 1].SetActive(true);
checkpointPanel.gameObject.SetActive(false);
ScorePanel.gameObject.SetActive(true);
hasGeneratedObject = true;
}
});
hardBtn.onClick.AddListener(() =>
{
if (!hasGeneratedObject)
{
GameObject qiu = Instantiate(tieQiu, LevelTest[int.Parse(text.text) - 1].transform.GetChild(0).position, Quaternion.identity);
qiu.transform.parent = LevelTest[int.Parse(text.text) - 1].transform;
qiu.transform.localScale = new Vector3(1.1f, 1.1f, 1.1f);
qiu.name = "PlayerBall";
//激活对应关卡
LevelTest[int.Parse(text.text) - 1].SetActive(true);
checkpointPanel.gameObject.SetActive(false);
ScorePanel.gameObject.SetActive(true);
hasGeneratedObject = true;
}
});
return;
}
}
});
}
}
}
//激活下一关
public void UpdateLevelStatus()
{
Text num = transform.GetChild(0).GetComponent<Text>();
int previousLevelNum = int.Parse(num.text) - 1;//上一关
if (PlayerPrefs.GetInt("Lv" + previousLevelNum) > 0)
{
unlocked = true;
}
}
//这部分的代码挂在通关的某个物体上
public int Levelindex;//在外面给每一关挂上对应的索引
private int currentStarsNum = 0;//记录星星数量
//通关获得对应星星
public void PressStarsButton(int _starsNum)
{
PlayerPrefs.SetInt("Lv" + Levelindex, _starsNum);
currentStarsNum = _starsNum;
if (currentStarsNum > PlayerPrefs.GetInt("Lv" + Levelindex))
{
PlayerPrefs.SetInt("Lv" + Levelindex, _starsNum);
}
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
PressStarsButton(1);
}
if (other.CompareTag("Player"))
{
PressStarsButton(2);
}
if (other.CompareTag("Player"))
{
PressStarsButton(3);
}
}
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交