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

2024-09-23
148看过
编写存档系统,存储角色transform,Vector3和字节之间的转换。
SavingSystem_X



  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. using UnityEngine;
  7. namespace RPG.Saving
  8. {
  9.     //
  10.     public class SavingSystem_X : MonoBehaviour
  11.     {
  12.         public void save(string saveFile)//// 保存游戏状态到指定文件
  13.         {
  14.             string path = GetPathFromSaveFile(saveFile);// 获取保存文件的完整路径
  15.             print("存档"+path);
  16.             // 使用 FileStream 创建或覆盖文件
  17.             using (FileStream stream = File.Open(path, FileMode.Create)) // 使用 using 确保文件在使用完后自动关闭,避免异常
  18.             {
  19.                 Transform playerTransform = GetPlayerTransform();// 获取玩家的 Transform
  20.                 byte[] buffer = SerializeVector(playerTransform.position);// 将玩家位置序列化为字节数组
  21.                 stream.Write(buffer, 0, buffer.Length); // 将字节数组写入文件
  22.             }
  23.         }
  24.         public void Load(string saveFile)//// 从指定文件加载游戏状态
  25.         {
  26.             string path = GetPathFromSaveFile(saveFile);// 获取保存文件的完整路径
  27.             print("加载" + path);
  28.             using (FileStream stream = File.Open(path, FileMode.Open))// 使用 FileStream 打开文件以读取
  29.             {
  30.                 byte[] buffer = new byte[stream.Length];// 创建一个字节数组以存储文件内容
  31.                 stream.Read(buffer,0, buffer.Length); // 读取文件内容到字节数组中
  32.                 Transform playerTransform = GetPlayerTransform(); // 获取玩家的 Transform
  33.                 playerTransform.position = DeserializeVector(buffer);// 反序列化位置并赋值给玩家
  34.             }
  35.         }
  36.         private Transform GetPlayerTransform()// 获取玩家的 Transform 组件
  37.         {
  38.             return GameObject.FindWithTag("Player").transform;// 根据标签查找玩家对象并返回其 Transform
  39.         }
  40.         private byte[] SerializeVector(Vector3 vector)// 将 Vector3 序列化为字节数组
  41.         {
  42.             byte[] vectorBytes = new byte[3 * 4];
  43.             BitConverter.GetBytes(vector.x).CopyTo(vectorBytes,0);
  44.             BitConverter.GetBytes(vector.y).CopyTo(vectorBytes, 4);
  45.             BitConverter.GetBytes(vector.z).CopyTo(vectorBytes, 8);
  46.             return vectorBytes;
  47.         }
  48.         private Vector3 DeserializeVector(byte[] buffer)   // 从字节数组反序列化为 Vector3
  49.         {
  50.             Vector3 result = new Vector3();
  51.             result.x = BitConverter.ToSingle(buffer, 0);
  52.             result.y = BitConverter.ToSingle(buffer, 4);
  53.             result.z = BitConverter.ToSingle(buffer, 8);
  54.             return result;
  55.         }
  56.         private string GetPathFromSaveFile(string saveFile) // 用于构造保存文件的完整路径
  57.         {
  58.             return Path.Combine(Application.persistentDataPath,saveFile+".sav");  // 结合持久数据路径与给定的保存文件名,并添加 ".sav" 扩展名
  59.         }
  60.     }
  61. }
复制代码




回复

举报

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

本版积分规则

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