当前位置: 首页 > article >正文

Unity类银河战士恶魔城学习总结(P148 Main Menu主菜单)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/

开始了新的章节,主菜单的制作

UI_MainMenu.cs

负责实现游戏主菜单的逻辑,包括新游戏继续游戏退出游戏三个功能。

Start 方法

  • 触发时机:在游戏运行时初始化,通常用来设置初始状态。
  • 核心逻辑
    1. 检查存档:通过 SaveManager.instance.HasSavedData() 检查是否有存档。
    2. 动态调整 UI:如果没有存档,则隐藏继续游戏按钮(通过 SetActive(false) 控制其不可见)。
  • 依赖性
    • 依赖 SaveManager 单例,假设 SaveManager 提供了 HasSavedData() 方法来判断存档存在

ContinueGame 方法

  • 触发时机:点击“继续游戏”按钮时调用。
  • 核心逻辑
    1. 加载场景:使用 SceneManager.LoadScene 切换到指定的游戏场景(sceneName)。
    2. 前提条件:只有当 continueButton 显示时(即有存档)才会触发该方法。

NewGame 方法

  • 触发时机:点击“新游戏”按钮时调用。
  • 核心逻辑
    1. 删除存档:调用 SaveManager.instance.DeleteSaveData() 清除现有的游戏存档。
    2. 加载场景:重置游戏状态并加载目标场景(sceneName)。
  • 目的:确保新游戏从初始状态开始。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;


//2024.11.27到冬天了
public class UI_MainMenu : MonoBehaviour
{
    [SerializeField] private string sceneName = "MainScene";
    [SerializeField] private GameObject continueButton;

    private void Start()
    {
        if (SaveManager.instance.HasSavedData() == false) //如果没有存档
            continueButton.SetActive(false);//不显示继续游戏按钮
    }


    public void ContinueGame()
    {
        SceneManager.LoadScene(sceneName);
    }

    public void NewGame()
    {
        SaveManager.instance.DeleteSaveData();
        SceneManager.LoadScene(sceneName);
    }

    public void ExitGame()
    {
        Debug.Log("退出游戏");
    }
}

SaveManager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;



//2024.11.25
public class SaveManager : MonoBehaviour
{
    public static SaveManager instance;

    [SerializeField] private string fileName;
    [SerializeField] private bool encryptData;

    private GameData gameData;
    private List<ISaveManager> saveManagers = new List<ISaveManager>();
    private FileDataHandler dataHandler;


    [ContextMenu("Delete save file")]
    public void DeleteSaveData()
    {
        dataHandler = new FileDataHandler(Application.persistentDataPath, fileName, encryptData);
        dataHandler.Delete();
    }

    private void Awake()
    {
        if (instance != null)
            Destroy(instance.gameObject);
        else
            instance = this;
    }

    private void Start()
    {
        dataHandler = new FileDataHandler(Application.persistentDataPath, fileName, encryptData);
        saveManagers = FindAllSaveManagers();

        LoadGame();
    }


    public void NewGame()
    {
        gameData = new GameData();
    }


    public void LoadGame()
    {
        gameData = dataHandler.Load();

        if (this.gameData == null)
        {
            Debug.Log("没有找到存档");
            NewGame();
        }

        foreach (ISaveManager saveManager in saveManagers)
        {
            saveManager.LoadData(gameData);
        }


    }


    public void SaveGame()
    {
        foreach (ISaveManager saveManager in saveManagers)
        {
            saveManager.SaveData(ref gameData);
        }

        dataHandler.Save(gameData);
    }


    private void OnApplicationQuit()
    {
        SaveGame();
    }


    private List<ISaveManager> FindAllSaveManagers()
    {
        IEnumerable<ISaveManager> saveManagers = FindObjectsOfType<MonoBehaviour>(true).OfType<ISaveManager>();

        return new List<ISaveManager>(saveManagers);
    }

    public bool HasSavedData()
    {
        if (dataHandler.Load() != null)
        {
            return true;
        }
        
        return false;
    }
}


http://www.kler.cn/a/419237.html

相关文章:

  • model.zero_grad() 和 self.optimizer.zero_grad() 区别
  • 支持向量机算法:原理、实现与应用
  • Fortran mpi在Linux的安装
  • 多点DMALL启动招股:将在港交所上市,聚焦数字零售服务
  • 【工具推荐】dnsx——一个快速、多用途的 DNS 查询工具
  • 监控视频汇聚平台:Liveweb视频监控管理平台方案详细介绍
  • 力扣112. 路径总和
  • 基于 SpringBoot 的致远汽车租赁系统
  • nuxt2 如何限制移动端手动缩放 safari meta失效解决方案
  • pytorch中的.clone() 和 .detach()
  • 解决docker 拉取镜像报错问题
  • Ubuntu20.04运行R-VIO2
  • ARIMA-神经网络混合模型在时间序列预测中的应用
  • (SAST检测规则-1)Android - 权限管理漏洞
  • 【MySQL — 数据库基础】MySQL的安装与配置 & 数据库简单介绍
  • IntelliJ+SpringBoot项目实战(十八)--在SpringBoot中整合SpringSecurity和JWT(下C)
  • ChatGPT/AI辅助网络安全运营之-数据解压缩
  • uniapp如何发起网络请求uni.request
  • 选择排序之大根堆
  • ubuntu20.04更换安装高版本CUDA以及多个CUDA版本管理
  • 【Java基础面试题003】Java的JIT | AOT是什么?
  • 【数据可视化入门】Python散点图全攻略:Matplotlib、Seaborn、Pyecharts实战代码大公开!
  • leetcode 3232. 判断是否可以赢得数字游戏 简单
  • 计算机网络安全 —— 非对称加密算法 RSA 和数字签名
  • springboot363高校竞赛管理系统(论文+源码)_kaic
  • 服务熔断-熔断器设计