Unity 二进制存储方法

本文介绍了如何在Unity3d环境中利用Manager类将文件高效地存储到StreamingAssets文件夹,探讨了二进制存储的方法和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Manager类中


将文件存放在StreamingFile文件中



 

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;


[System.Serializable]
public struct Save
{


}


public void SaveGame()
{
saveByBin();
}




private void SaveByBin()
{
//序列化过程(将save转化为字节流)
//创建Save对象并保存当前游戏状态
Save save = CreateSaveGO();
//创建一个二进制格式化程序
BinaryFormatter bf = new BinaryFormatter();
//创建一个文件流
FileStream fileStream = File.Create(Application.dataPath + "/StreamingFile" + "/byBin.txt");
//用二进制格式化程序的序列化方法来序列化Save对象,参数:创建的文件流和需要序列化的对象
bf.Serialize(fileStream,save);
//关闭流
fileStream.Close;

if(File.Exists(Application.dataPath + "/StreamingFile" + "/byBin.txt")){
//若保存文件存在则执行
}
}


public void LoadGame()
{
LoadByBin();
}


private void LoadByBin()
{


if(!File.Exists(Application.dataPath + "/StreamingFile" + "/byBin.txt")){
return;
}
//反序列化过程
//创建一个二进制格式化程序
BinaryFormatter bf = new BinaryFormatter();
//打开一个文件流
FileStream fileStream = File.Open(Application.da
Unity中实现二进制数据的存储和管理通常涉及多个方面,包括资源加载、序列化与反序列化、以及资源的更新与缓存。以下是一些关键的实现方法和注意事项。 ### 资源加载与管理 Unity中的资源管理主要依赖于`AssetBundle`系统。`AssetBundle`是一种存档格式,允许Unity以索引和序列化的方式存储一个或多个文件。通过使用`AssetBundle`,开发人员可以提交较小的应用程序包,最小化运行时内存压力,并有选择地加载针对最终用户设备优化的内容[^2]。 为了减少加载时间和管理应用程序的内存占用,理解`UnityEngine.Objects`的资源生命周期是非常重要的。对象会在特定和定义的时间点加载到内存中或从内存中卸载[^1]。例如,当不再需要某个资源时,可以通过调用`Resources.UnloadAsset`来释放资源占用的内存。 ### 二进制数据的序列化与反序列化 在Unity中,二进制数据可以通过`BinaryFormatter`类进行序列化和反序列化。尽管`BinaryFormatter`在现代Unity版本中已经被标记为过时,但仍然可以通过以下方式使用: ```csharp using System.IO; using System.Runtime.Serialization.Formatters.Binary; public class BinaryDataHandler { public static void SaveData(string path, object data) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(path, FileMode.Create)) { formatter.Serialize(stream, data); } } public static object LoadData(string path) { if (File.Exists(path)) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(path, FileMode.Open)) { return formatter.Deserialize(stream); } } return null; } } ``` ### 资源的更新与缓存 Unity提供了`UnityWebRequest`和`WWW.LoadFromCacheOrDownload`两种方式来更新和缓存资源。这些方法允许开发人员快速方便地更新经常变化的资源[^3]。例如,使用`UnityWebRequest`可以从服务器下载最新的资源并缓存到本地: ```csharp using UnityEngine; using UnityEngine.Networking; public class ResourceUpdater : MonoBehaviour { public string url = "http://example.com/assetbundle"; public IEnumerator DownloadAndCache() { UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError(request.error); } else { AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request); // 使用bundle加载资源 } } } ``` ### 相关问题 1. 如何在Unity中使用ScriptableObject进行数据存储? 2. Unity中的资源加载有哪些最佳实践? 3. 如何在Unity中实现高效的资源缓存机制? 4. Unity中有哪些替代BinaryFormatter的方法来进行数据序列化? 5. 如何通过AssetBundle系统优化移动设备上的资源加载性能?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值