新建保存类,挂载到角色身上,并在Move类中添加接口ISaveable,添加接口对应的方法,便可以在游戏中测试保存加载玩家的坐标位置
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
- {
- const string defaultSaveFile = "Save";// 默认的保存文件名
-
- private void Update()
- {
- if(Input.GetKeyDown(KeyCode.L))
- {
- Load();
- }
- if(Input.GetKeyDown(KeyCode.S))
- {
- Save();
- }
- }
-
- private void Save() // 保存当前游戏状态
- {
- // 获取 SavingSystem 组件,并调用其 Save 方法,传入默认的保存文件名
- GetComponent<SavingSystem>().Save(defaultSaveFile);
- }
-
- private void Load()// 加载保存的游戏状态
- {
- // 获取 SavingSystem 组件,并调用其 Load 方法,传入默认的保存文件名
- GetComponent<SavingSystem>().Load(defaultSaveFile);
- }
- }
- }
-
复制代码
Mover:
- // 捕获游戏对象的状态
- public object CaptureState()
- {
- // 返回当前游戏对象的位置作为 SerializableVector3 对象
- return new SerializableVector3( transform.position);
- }
-
- // 恢复游戏对象的状态
- public void RestoreState(object state)
- {
- // 将状态对象转换为 SerializableVector3
- SerializableVector3 position = (SerializableVector3)state;
- // 禁用 NavMeshAgent 组件,以避免在设置位置时发生冲突
- GetComponent<NavMeshAgent>().enabled = false;
- // 将游戏对象的位置设置为恢复的坐标
- transform.position = position.ToVector();
- // 重新启用 NavMeshAgent 组件
- GetComponent<NavMeshAgent>().enabled = true;
- }
复制代码
|