1 设定场景是否可选
制作好star 预制体,拖到SceneObject下。
2 显示锁头和解锁星星数
3 显示所获得星星的总数
4 显示每场获得的星星数
UI是显示在场景选择界面的,数据在选择界面弹出时读取一遍,决定场景是否能玩,进入游戏可以显示所有的持有金币,也可以从0显示,游戏结束时统计星星和金币,并savedate储存数据。
首先还是让星星显示出来吧
在场景GameManager脚本下添加ShowStar()方法,让星星一颗一颗的显示出来
//显示星星
public void ShowStars()
{
StartCoroutine(Show());
}
//携程显示星星
IEnumerator Show()
{
//计算完成的任务获得的星星
for (; starsNum < missionFinish; starsNum++)
{
yield return new WaitForSeconds(0.3f);
stars[starsNum].SetActive(true);
}
for (; starsNum < missionFinish; starsNum++)
{
yield return new WaitForSeconds(0.3f);
stars[starsNum].SetActive(true);
}
SaveData();
Time.timeScale = 0;
}
控制场景选择的SceneObject脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Manoeuvre
{
[RequireComponent(typeof(Button))]
public class SceneObject : MonoBehaviour
{
public Image SceneImage;
public Text SceneNameText;
public Text SceneCountText;
//是否可选
public bool isSelect;
public GameObject Lock;
public GameObject AllStar;
public GameObject[] Star;
public Text NeedStar;
string SceneToLoad;
private void Start()
{
//如果是第一个关卡就设为可选
if (SceneCountText.text == 1.ToString())
{
//isSelect = true;
}
print(PlayerPrefs.GetInt("totalNum"));
//如果总星星大于所需星星数
if (PlayerPrefs.GetInt("totalNum") >= int.Parse( NeedStar.text))
{
isSelect = true;
}
}
private void Update()
{
//如果可选就隐藏锁头,显示星星
if (isSelect)
{
Lock.SetActive(false);
AllStar.SetActive(true);
}
}
public void Initialize(Sprite _img, string displayName, string sceneName, int Count)
{
SceneToLoad = sceneName;
//set UI
SceneImage.sprite = _img;
SceneNameText.text = displayName;
SceneCountText.text = (Count + 1).ToString();
//解锁需要的星星
NeedStar.text = (Count + 2).ToString();
//add on click listener
GetComponent<Button>().onClick.AddListener(OnSceneObjectClick);
}
void OnSceneObjectClick()
{
//储存关卡数据名
PlayerPrefs.SetString("nowLevel", SceneCountText.text);
print(PlayerPrefs.GetString("nowLevel", SceneCountText.text));
//delete the saved key
PlayerPrefs.DeleteKey("LastSavedKey");
if (MainMenuFader.Instance)
StartCoroutine(MainMenuFader.Instance.FadeToScene(1f, SceneToLoad));
//play click sound
if (MainMenuAudioManager.Instance)
MainMenuAudioManager.Instance.PlayAudioClip(FindObjectOfType<MainMenuSceneSelection>().ButtonClickSFX);
//stop Audio Manager
if (FindObjectOfType<MainMenuAudioManager>())
FindObjectOfType<MainMenuAudioManager>().DestroyAudioManager();
}
public void OnSceneObjectHover()
{
//play hover sound
if (MainMenuAudioManager.Instance)
MainMenuAudioManager.Instance.PlayAudioClip(FindObjectOfType<MainMenuSceneSelection>().ButtonHoverSFX);
}
}
}