目录
1.处理关卡界面星星个数的显示
在LevelSelect中添加下面的代码
public GameObject[] stars;
private void Start()
{
if(transform.parent.GetChild(0).name == gameObject.name)
{
isSelect = true;
}
if (isSelect)
{
image.overrideSprite = levelBG;
transform.Find("Num").gameObject.SetActive(true);
//获取现在关卡对应的名字,然后获得对应的星星个数
int count = PlayerPrefs.GetInt("level" + gameObject.name);
if(count > 0)
{
for(int i = 0; i < count; i++)
{
stars[i].SetActive(true);
}
}
}
}
运行程序,结果如下
但是存在BUG,它只会显示上次的结果。
2.关卡之间的切换
在LevelSelect的Start方法中添加下面的代码
else//判断当前关卡是否可以选择
{
int beforeNum = int.Parse(gameObject.name) - 1;
if (PlayerPrefs.GetInt("level" + beforeNum.ToString()) > 0)
{
isSelect = true;
}
}
运行程序,结果如下:
3.地图切换,制作多个关卡
在GameManager中添加如下代码
private int totalNum = 10;//关卡总数
public void SaveData()
{
if (starsNum > PlayerPrefs.GetInt(PlayerPrefs.GetString("nowLevel")))
{
PlayerPrefs.SetInt(PlayerPrefs.GetString("nowLevel"), starsNum);
}
int sum = 0;
for(int i = 1; i <= totalNum; i++)
{
sum += PlayerPrefs.GetInt("level" + i.ToString());
}
PlayerPrefs.SetInt("totalNum", sum);
}
运行程序,结果如下:
4.snap settings使用介绍
5.地图面板信息显示
在MapSelect中添加下面的代码来统计星星个数
public Text starsText;
public int startnum = 1;
public int endnum = 3;
private void Start()
{
if (PlayerPrefs.GetInt("totalNum", 0) >= starsNum)
{
isSelect = true;
}
if (isSelect)
{
locks.SetActive(false);
stars.SetActive(true);
//TODO:text显示
int count = 0;
for(int i = startnum; i < endnum;i++)
{
count += PlayerPrefs.GetInt("level" + i.ToString(), 0);
}
starsText.text = count.ToString() + "/9";
}
}
运行程序,结果如下
6.异步加载场景
在相机添加新的脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LoadLevelAsync : MonoBehaviour {
private void Start()
{
Invoke("Load", 2f);
}
void Load()
{
SceneManager.LoadSceneAsync(1);
}
}
7.发布游戏