EASY Manoeuvre FPS使用 (九)设定场景是否可选,以及显示锁头和星星

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);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值