P83 教程部分使用savingSystem.LoadLastScene的方法,教程中是直接将Start作为协程来使用,随后将逻辑调用全都写在了start中,虽然只是一个测试功能,
这里其实不太建议直接写在Start中,最好自己写一个方法用来验证即可。
SavingWrapper:
- using System.Collections;
- using System.Collections.Generic;
- using Unity.VisualScripting;
- using UnityEngine;
- using RPG.Saving;
- using System;
-
- namespace RPG.SceneMangement
- {
- //这个类负责处理游戏状态的保存和加载
- public class SavingWrapper : MonoBehaviour
- {
- float fadeInTime = 0.5f;
- private bool hasLoaded = false;
- const string defaultSaveFile = "Save";// 默认的保存文件名
- SavingSystem savingSystem;
-
-
- private void Awake()
- {
- savingSystem = GetComponent<SavingSystem>();
-
- print("找到组件!");
- }
-
- IEnumerator LoadLastScene()
- {
- Debug.Log("开始加载场景");
- if (hasLoaded)
- {
- print("已经加载过场景-跳出");
- yield break; // 检查是否已经加载过
- }
- hasLoaded = true; // 标记为已加载
-
- FindObjectOfType<Fader>().FadeOutImmediate();//找到该物体
- print("开始淡入");
- yield return FindObjectOfType<Fader>().FadeIn(fadeInTime);
-
- yield return savingSystem.LoadLastScene(defaultSaveFile);//异步加载上一次存档的场景
-
-
- }
-
- private void Update()
- {
- if (Input.GetKeyDown(KeyCode.L))
- {
- Load();
- }
- if (Input.GetKeyDown(KeyCode.S))
- {
- Save();
- }
- if (Input.GetKeyDown(KeyCode.D))
- {
-
- StartCoroutine(LoadLastScene());
-
- }
- }
-
- public void Save() // 保存当前游戏状态
- {
- // 获取 SavingSystem 组件,并调用其 Save 方法,传入默认的保存文件名
- savingSystem.Save(defaultSaveFile);
- }
-
- public void Load()// 加载保存的游戏状态
- {
- // 获取 SavingSystem 组件,并调用其 Load 方法,传入默认的保存文件名
- savingSystem.Load(defaultSaveFile);
- }
- }
- }
-
复制代码
Fader:
- using System.Collections;
- using System.Collections.Generic;
- using Unity.VisualScripting;
- using UnityEngine;
-
- namespace RPG.SceneMangement
- {
- // Fader 类用于在场景加载时实现淡入淡出效果
- public class Fader : MonoBehaviour
- {
- CanvasGroup canvasGroup; // 用于控制画布的透明度
-
- private void Start()
- {
- canvasGroup = GetComponent<CanvasGroup>();
-
- }
-
- public void FadeOutImmediate()//立即淡出
- {
- canvasGroup.alpha = 1.0f;
- }
-
- public IEnumerator FadeOut(float time) // 公共协程方法:实现淡出效果
- {
- while(canvasGroup.alpha <1)
- {
- canvasGroup.alpha += Time.deltaTime / time;// 逐渐增加透明度
- yield return null;// 等待一帧
- }
- }
-
- public IEnumerator FadeIn(float time)// 公共协程方法:实现淡入效果
- {
- while (canvasGroup.alpha > 0) // 当透明度大于 0 时持续减少透明度
- {
- canvasGroup.alpha -= Time.deltaTime / time;// 逐渐减少透明度
- yield return null;// 等待一帧
- }
- }
- }
- }
-
复制代码
|