Udemy-Unity制作类暗黑破坏神游戏记录-P82

2024-09-19
141看过
P83 教程部分使用savingSystem.LoadLastScene的方法,教程中是直接将Start作为协程来使用,随后将逻辑调用全都写在了start中,虽然只是一个测试功能,
这里其实不太建议直接写在Start中,最好自己写一个方法用来验证即可。

SavingWrapper:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Unity.VisualScripting;
  4. using UnityEngine;
  5. using RPG.Saving;
  6. using System;
  7. namespace RPG.SceneMangement
  8. {
  9.     //这个类负责处理游戏状态的保存和加载
  10.     public class SavingWrapper : MonoBehaviour
  11.     {
  12.         float fadeInTime = 0.5f;
  13.         private bool hasLoaded = false;
  14.         const string defaultSaveFile = "Save";// 默认的保存文件名
  15.         SavingSystem savingSystem;
  16.         
  17.         private void Awake()
  18.         {
  19.             savingSystem = GetComponent<SavingSystem>();
  20.             
  21.             print("找到组件!");
  22.         }
  23.         IEnumerator LoadLastScene()
  24.         {
  25.             Debug.Log("开始加载场景");
  26.             if (hasLoaded)
  27.             {
  28.                 print("已经加载过场景-跳出");
  29.                 yield break; // 检查是否已经加载过
  30.             }
  31.             hasLoaded = true; // 标记为已加载
  32.             FindObjectOfType<Fader>().FadeOutImmediate();//找到该物体
  33.             print("开始淡入");
  34.             yield return FindObjectOfType<Fader>().FadeIn(fadeInTime);
  35.            
  36.             yield return savingSystem.LoadLastScene(defaultSaveFile);//异步加载上一次存档的场景
  37.             
  38.            
  39.         }
  40.         private void Update()
  41.         {
  42.             if (Input.GetKeyDown(KeyCode.L))
  43.             {
  44.                 Load();
  45.             }
  46.             if (Input.GetKeyDown(KeyCode.S))
  47.             {
  48.                 Save();
  49.             }
  50.             if (Input.GetKeyDown(KeyCode.D))
  51.             {
  52.                
  53.                 StartCoroutine(LoadLastScene());
  54.                
  55.             }
  56.         }
  57.         public void Save() // 保存当前游戏状态
  58.         {
  59.             // 获取 SavingSystem 组件,并调用其 Save 方法,传入默认的保存文件名
  60.             savingSystem.Save(defaultSaveFile);
  61.         }
  62.         public void Load()// 加载保存的游戏状态
  63.         {
  64.             // 获取 SavingSystem 组件,并调用其 Load 方法,传入默认的保存文件名
  65.             savingSystem.Load(defaultSaveFile);
  66.         }
  67.     }
  68. }
复制代码
Fader:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Unity.VisualScripting;
  4. using UnityEngine;
  5. namespace RPG.SceneMangement
  6. {
  7.     // Fader 类用于在场景加载时实现淡入淡出效果
  8.     public class Fader : MonoBehaviour
  9.     {
  10.         CanvasGroup canvasGroup; // 用于控制画布的透明度
  11.         private void Start()
  12.         {
  13.             canvasGroup = GetComponent<CanvasGroup>();
  14.            
  15.         }
  16.         public void FadeOutImmediate()//立即淡出
  17.         {
  18.             canvasGroup.alpha = 1.0f;
  19.         }
  20.         
  21.         public IEnumerator FadeOut(float time) // 公共协程方法:实现淡出效果
  22.         {
  23.             while(canvasGroup.alpha <1)
  24.             {
  25.                 canvasGroup.alpha += Time.deltaTime / time;// 逐渐增加透明度
  26.                 yield return null;// 等待一帧
  27.             }
  28.         }
  29.         public IEnumerator FadeIn(float time)// 公共协程方法:实现淡入效果
  30.         {
  31.             while (canvasGroup.alpha > 0) // 当透明度大于 0 时持续减少透明度
  32.             {
  33.                 canvasGroup.alpha -= Time.deltaTime / time;// 逐渐减少透明度
  34.                 yield return null;// 等待一帧
  35.             }
  36.         }
  37.     }
  38. }
复制代码


回复

举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表