Untiy数据持久化,用户信息保存,关卡保存,数据同步

您所在的位置:网站首页 unity用户登录 Untiy数据持久化,用户信息保存,关卡保存,数据同步

Untiy数据持久化,用户信息保存,关卡保存,数据同步

2024-07-11 03:27| 来源: 网络整理| 查看: 265

场景加载

Unity存在4中加载场景的办法:LoadLevel和LoadLevelAsync,在加载完成后之后将会立刻销毁原先场景中的物体,而LoadLevelAdditive和LoadLevelAdditiveAsync加载后将会保留原先的场景中的物体,这种方式可以实现无缝融合的场景,只需要你在适当的位置加载后面的场景,不过你还是要考虑资源的释放问题。 异步加载能够获得加载过程的进度和是否加载完成,通过这种方式你可以在切换中增减进度条或者其他表现,这种方式一般通过协程完成:一般需要一个中间过渡场景(一般通过视频/GUI/图片等显示进度条)

场景的异步加载

private AsyncOperation operation; void Start (){ StartCoroutine(AsyncLoading());//开始异步加载 } void Update (){ if (准备好场景跳转) operation.allowSceneActivation = true;//allowSceneActivation:Allow Scenes to be activated as soon as it is ready } IEnumerator AsyncLoading(){ operation = SceneManager.LoadSceneAsync(Globe.nextSceneName); operation.allowSceneActivation = false;//阻止当加载完成自动切换 yield return operation; }

Additive Scene Manager场景管理插件($25):

- Easy loading, unloading, and reloading in Unity 5.

- Add scenes that will be loaded when the game starts.

- Add ‘persistent’ scenes that will not be unloaded by SceneController’s Unload functions.

- View all scenes which are currently loaded by Unity’s SceneManager class.

- View what loading stage each scene is at.

- Set the allowSceneActivation boolean via toggle.

- Load new scenes into the editor or at runtime.

- Bake lighting on multiple scenes simultaneously via the Lightmapping.BakeMultipleScenes API function.

2.场景信息共享

Prefab、DontDestroyOnLoad(注意手动销毁)、类属性——static变量

3.文件存取

Build相关文件夹:

Resources:

是作为一个Unity3D的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打到发布包中。它的特点简单总结一下就是:

只读,即不能动态修改。所以想要动态更新的资源不要放在这里。会将文件夹内的资源打包集成到.asset文件里面。因此建议可以放一些Prefab,因为Prefab在打包时会自动过滤掉不需要的资源,有利于减小资源包的大小。主线程加载。资源读取使用Resources.Load()。推荐将important的资源放在这里,包括某些材质、shader等

StreamingAssets:

同样作为一个只读的Unity3D的保留文件夹出现。不过两者也有很大的区别,那就是Resources文件夹中的内容在打包时会被压缩和加密。而StreamingAsset文件夹中的内容则会原封不动的打入包中,因此 StreamingAssets主要用来存放一些二进制文件。下面也同样做一个简单的总结:

主要用来存放二进制文件。只能用过WWW类来读取。

WWW类—— www就是网络工具类,Unity用于从网络上下载需要的文件,包括音频,视频,图片等文件的工具类. 一般作为游戏的CG动画,和游戏中的广告植入等

GET 获取服务器数据

POST 上传数据到服务器

PUT 修改数据

DELETE 删除数据

www路径:

http://网址 (网络请求,网络传输协议)

https://网址 (网络请求,网络传输协议) file://本地文件地址 (本地请求,本地文件传输协议)

AssetBundle

AssetBundle是一种使用LZMA压缩方式压缩的资源文件。它里面包含了资源的哈希码、Assets资源的路径,和依赖。AssetBundle打包的时候,你可以指定一个mainAsset,那么加载完之后就可以通过AssetBundle.mainAsset来获取到了。

 

4.进度/用户信息存取 Player Prefs——简单保存某些设置如玩家的图形设置、登录信息(比如 Facebook 或者 Twitter 的 token),以及需要保存的玩家其它设置。但是,PlayerPrefs 不是为了游戏存档而设计的。示例 if (!PlayerPrefs.HasKey("music")) { PlayerPrefs.SetInt("music", 1); PlayerPrefs.Save (); } 游戏存档

第一步:创建一个游戏存档文件的第一步是创建一个存档文件类。新建一个 Save 类,取消 MonoBehaviour 继承。删掉默认的 Start() 方法和 Update() 方法,记录所有需要保存的信息。

在类声明之上,添加:

[System.Serializable]

第二步:在游戏退出时,创建一个Save对象,记录所有最新的进度,流化处理并写入磁盘

public void SaveGame() { BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Create(Application.persistentDataPath + "/gamesave.save");//后缀名无所谓 bf.Serialize(file, save); file.Close(); //重置游戏,以便玩家保存后所有东西都处于默认状态 resetAllInfo(); }

第三步:重新加载游戏,读取磁盘,根据流数据反创建Save对象,根据Save对象中的信息更新场景

if (File.Exists(Application.persistentDataPath + "/gamesave.save")){ BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/gamesave.save", FileMode.Open); Save save = (Save)bf.Deserialize(file); file.Close(); UpdateSceneBySave(); }else{Debug.Log("No game saved!");} 通过JSON实现进度的网络同步

通过JsonUtility实现Object的流处理和解析,通过JsonMapper实现网络端json数据的读取

string json = JsonUtility.ToJson(save); //存 Save save = JsonUtility.FromJson(json); //取 WWWForm form = new WWWForm(); WWW w = new WWW("http://www.tuling123.com/openapi/api", form); while (!w.isDone) { yield return new WaitForEndOfFrame(); } JsonData jd = JsonMapper.ToObject(w.text);

Json序列化插件FullSerializer、LitJson

5.外部数据库存取

根据不同的数据库提供的SDK编写代码,同时注意设置动态链接库



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3