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

2024-09-16
140看过
新建保存类,挂载到角色身上,并在Move类中添加接口ISaveable,添加接口对应的方法,便可以在游戏中测试保存加载玩家的坐标位置
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.         const string defaultSaveFile = "Save";// 默认的保存文件名
  13.         private void Update()
  14.         {
  15.             if(Input.GetKeyDown(KeyCode.L))
  16.             {
  17.                 Load();
  18.             }
  19.             if(Input.GetKeyDown(KeyCode.S))
  20.             {
  21.                 Save();
  22.             }
  23.         }
  24.         private void Save() // 保存当前游戏状态
  25.         {
  26.             // 获取 SavingSystem 组件,并调用其 Save 方法,传入默认的保存文件名
  27.             GetComponent<SavingSystem>().Save(defaultSaveFile);
  28.         }
  29.         private void Load()// 加载保存的游戏状态
  30.         {
  31.             // 获取 SavingSystem 组件,并调用其 Load 方法,传入默认的保存文件名
  32.             GetComponent<SavingSystem>().Load(defaultSaveFile);
  33.         }
  34.     }
  35. }
复制代码
Mover:
  1. // 捕获游戏对象的状态
  2. public object CaptureState()
  3. {
  4.     // 返回当前游戏对象的位置作为 SerializableVector3 对象
  5.     return new SerializableVector3( transform.position);
  6. }
  7. // 恢复游戏对象的状态
  8. public void RestoreState(object state)
  9. {
  10.     // 将状态对象转换为 SerializableVector3
  11.     SerializableVector3 position = (SerializableVector3)state;
  12.     // 禁用 NavMeshAgent 组件,以避免在设置位置时发生冲突
  13.     GetComponent<NavMeshAgent>().enabled = false;
  14.     // 将游戏对象的位置设置为恢复的坐标
  15.     transform.position = position.ToVector();
  16.     // 重新启用 NavMeshAgent 组件
  17.     GetComponent<NavMeshAgent>().enabled = true;
  18. }
复制代码


回复

举报

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

本版积分规则

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