Unity【入门】小项目坦克大战

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1、开始场景

1、场景装饰

RotateObj

using UnityEngine;

public class RotateObj : MonoBehaviour
{
   
   
    public float rotateSpeed = 15;
    void Update()
    {
   
   
        transform.Rotate(Vector3.up, rotateSpeed * Time.deltaTime);
    }
}

2、开始界面

BasePanel

using UnityEngine;

public class BasePanel<T> : MonoBehaviour where T:class
{
   
   
    //两个关键的静态成员
    //私有的静态成员变量(声明) 基础Mono不能new
    private static T instance;
    //公共的静态成员属性或方法(获取)
    //public static T Instance
    //{
   
   
    //    get
    //    {
   
   
    //        return instance;
    //    }
    //}
    public static T Instance => instance;
    //instance赋值,为确保挂载的唯一性,自己定义一个规范
    private void Awake()
    {
   
   
        instance = this as T;
    }
    public virtual void ShowMe()
    {
   
   
        this.gameObject.SetActive(true);
    }
    public virtual void HideMe()
    {
   
   
        this.gameObject.SetActive(false);
    }
}

BeginPanel

using UnityEngine;
using UnityEngine.SceneManagement;
/// <summary>
/// 通过类名快速得到脚本
/// </summary>
public class BeginPanel : BasePanel<BeginPanel>
{
   
   
    // 声明公共的成员变量来关联各个控件
    public CustomGUIButton btnBegin;
    public CustomGUIButton btnSetting;
    public CustomGUIButton btnQuit;
    public CustomGUIButton btnRank;
    void Start()
    {
   
   
        //锁定鼠标在窗口内
        //Cursor.lockState = CursorLockMode.Confined;
        //监听一次按钮点击过后的内容
        btnBegin.clickEvent += () => 
        {
   
   
            SceneManager.LoadScene("GameScene");
        };
        btnSetting.clickEvent += () =>
        {
   
   
            SettingPanel.Instance.ShowMe();
            HideMe();
        };
        btnQuit.clickEvent += () =>
        {
   
   
            Application.Quit();
        };
        btnRank.clickEvent += () =>
        {
   
   
            RankPanel.Instance.ShowMe();
            Instance.HideMe();
        };
    }
}

3、设置界面

GameDataMgr

/// <summary>
/// 游戏数据管理类,是一个单例模式对象
/// </summary>
public class GameDataMgr
{
   
   
    private static GameDataMgr instance = new GameDataMgr();
    public static GameDataMgr Instance {
   
    get => instance; }
    //设置信息对象
    public MusicData musicData;
    //排行榜数据对象
    public RankList rankData;
    private GameDataMgr()
    {
   
   
        //初始化游戏数据
        musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music_Key") as MusicData;
        //第一次进入游戏的默认值
        if (!musicData.notFirst)
        {
   
   
            musicData.notFirst = true;
            musicData.isOpenBK = true;
            musicData.isOpenSound = true;
            musicData.bkValue = 1;
            musicData.soundValue = 1;
            PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key");
        }

        //初始化读取排行榜数据
        rankData = PlayerPrefsDataMgr.Instance.LoadData(typeof(RankList),"Rank_key") as RankList;
    }

    //提供一个添加数据到排行榜中的方法
    public void AddRankInfo(string name,int score,float time)
    {
   
   
        rankData.list.Add(new RankInfo(name,score,time));
        //排序
        rankData.list.Sort((a, b) => a.time < b.time ? -1 : 1);
        //移除第10条之后的数据
        for (int i = rankData.list.Count-1; i >= 10; i--)
        {
   
   
            rankData.list.RemoveAt(i);
        }
        //存储
        PlayerPrefsDataMgr.Instance.SaveData(rankData, "Rank_key");
    }

    public void OpenOrCloseBKMusic(bool isOpen)
    {
   
   
        musicData.isOpenBK = isOpen; //改变是否开启状态
        //控制开关
        BKMusic.Instance.ChangeOpen(isOpen);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key"); //存储
    }
    public void OpenOrCloseSound(bool isOpen)
    {
   
   
        musicData.isOpenSound = isOpen; //改变
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key"); //存储
    }
    public void ChangeBKValue(float value)
    {
   
   
        musicData.bkValue = value;
        BKMusic.Instance.ChangeValue(value);
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key");
    }
    public void ChangeSoundValue(float value)
    {
   
   
        musicData.soundValue = value;
        PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music_Key");
    }
}

SettingPanel

using UnityEngine;
using UnityEngine.SceneManagement;

public class SettingPanel : BasePanel<SettingPanel>
{
   
   
    //声明成员变量 关联控件
    public CustomGUISlider sliderMusic;
    public CustomGUISlider sliderSound;

    public CustomGUIToggle togMusic;
    public CustomGUIToggle togSound;

    public CustomGUIButton btnClose;

    void Start()
    {
   
   
        //监听对应的事件,处理逻辑
        sliderMusic.changeValue += (value) => GameDataMgr.Instance.ChangeBKValue(value);
        sliderSound.changeValue += (value) => GameDataMgr.Instance.ChangeSoundValue(value);
        togMusic.changeValue += (value) => GameDataMgr.Instance.OpenOrCloseBKMusic(value);
        togSound.changeValue += (value) => GameDataMgr.Instance.OpenOrCloseSound(value);

        btnClose.clickEvent += () =>
        {
   
   
            HideMe();
            //判断当前所在场景
            if(SceneManager.GetActiveScene().name == "BeginScene")
                //把隐藏的开始界面重新显示
                BeginPanel.Instance.ShowMe();
        };
        HideMe();
        //this.gameObject.SetActive(false);
    }
    public void UpdatePanelInfo()
    {
   
   
        //更新设置信息
        MusicData data = GameDataMgr.Instance.musicData;
        sliderMusic.nowValue = data.bkValue;
        sliderSound.nowValue = data.soundValue;
        togMusic.isSel = data.isOpenBK;
        togSound.isSel = data.isOpenSound;
    }
    public override void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值