Unity 读取Cocos本地化数据 -- 基于IOS

简介: 使用Unity读取Cocos存储的数据的尝试过程和具体实现。

一,需求描述

单机游戏(用户数据存到本地):之前使用Cocos开发的,现在使用Unity开发了。所以需要实现有一个数据(用户资产)继承的需求。


二,尝试实现

读取Unity的PlayerPrefs类在本地的存储文件
(因为Cocos不熟悉,我认为读取到Unity的存储数据和Cocos的数据差不多)

实现步骤:

  1. 在手机上使用PlayerPrefs.Set.. 存储数据;(以“Gold”字段为例)
  2. 在Xcode编写代码如下:

参考文章:Cocos creator 如何读取Unity本地存储(PlayerPrefs)的数据文件

// 获取路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
// 返回,例:"/var/mobile/Containers/data/Application/B9B904d-EA23-4D23-A3TD-KLH54G54/Library"
NSString *libraryDirectoryPath = [paths objectAtIndex:0];
NSLog(@"读取到的library 路径 %@", libraryDirectoryPath);
// 组合字符串 libraryDirectoryPath + "/Preferences/【bundle identifier】.plist"
NSString *plistPath = [libraryDirectoryPath stringByAppendingString:@"/Preferences/com.czygame.test.plist"];
    
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
NSLog(@"读取到的内容%@", data);

测试结果:
2.1.1

  1. 预处理字符串:

    得到字符串之后的处理:可以直接在Xcode中处理,然后回调到Unity中;也可以直接把字符串传给Unity,在Unity中进行处理。
    

    由于我测试的包名和之前Cocos的 bundle identifier 的是一致的。在得到的字符串中发现的了 Cocos 中保存的字段和 UnityPlayerPrefs.Set..同时出现。:|

    这不就印证了我在本段开始时的猜测吗?(我认为读取到Unity的存储数据和Cocos的数据差不多)

    此时我并没有直接去解析字符串处理(因为我发现它并不是一个标准的Json,应该是打印日志显示不全的问题)

  1. 发现惊喜:
    然后我突然想到了一个假设:

    两边存的数据都以 key:value 的形式出现在 .plist 中,那么可不可以认为它们的存储方式是一致的?
    于是,我直接在Unity中写下代码:

`
// "CocosKey" -- 一个确定在Cocos中存储时间的Key(在Unity中没存过)
Debug.Log(PlayerPrefs.HasKey("CocosKey"));
`
重新打包到手机上,发现得到的日志是:True。


三,得到结论

使用使用Cocos存的数据,竟然和Unity的PlayerPrefs类可以通用。

也就是说如果两个项目的存储数据的字段名和字段意义都一样的话,就不需要做任何的改动。

如:Cocos 使用“gold” 字符串保存用户持有金币数
在Unity中可以直接 PlayerPrefs.GetInt("gold"); 获取到此用户当前持有金币数

==有两个需要注意的点:==

  1. 两个bundle identifier必须一致
  2. 转换类型需要正确 (如:上例中的用户金币数存的是int类型,取的时候就需要使用 GetInt(); )

由于我没有Cocos的Android包,所以上述结论我只验证了在IOS端是成立的。
若你有Cocos的Android可以尝试一下是否是同一结论【测试过了,别忘了评论告诉我奥】。
小提示:在AndRoid端测试时,需要保证包名和签名都一致噢。

【原来小丑竟是我自己】
由于不知道两者可以通用,进行了上述的尝试过程,不过还好最后发现了这结论。记录分享,希望此文可以帮助到你,若有什么其他见解或疑问都欢迎评论交流

相关文章
|
2月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
221 4
|
5月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
5月前
|
iOS开发 开发者
iOS平台RTMP|RTSP播放器如何实时回调YUV数据
我们在做RTMP、RTSP播放器的时候,有开发者需要自己处理拉取到的YUV数据,做二次分析之用,为此,我们做了以下的设计:InitPlayer之后,再调用SmartPlayerStart()接口之前,设置yuv数据回调即可。
|
5月前
|
图形学 Android开发 iOS开发
穿越数字洪流,揭秘Unity3d中的视频魔法!Windows、Android和iOS如何征服RTSP与RTMP的终极指南!
【8月更文挑战第15天】在数字媒体的海洋中,实时视频流是连接世界的桥梁。对于那些渴望在Unity3d中搭建这座桥梁的开发者来说,本文将揭示如何在Windows、Android和iOS平台上征服RTSP与RTMP的秘密。我们将深入探讨这两种协议的特性,以及在不同平台上实现流畅播放的技巧。无论你是追求稳定性的RTSP拥趸,还是低延迟的RTMP忠实粉丝,这里都有你需要的答案。让我们一起穿越数字洪流,探索Unity3d中视频魔法的世界吧!
87 2
|
5月前
|
语音技术 开发工具 图形学
Unity与IOS⭐二、Unity接入IOS版百度语音:语音唤醒
Unity与IOS⭐二、Unity接入IOS版百度语音:语音唤醒
Unity与IOS⭐二、Unity接入IOS版百度语音:语音唤醒
|
4月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
171 0
|
5月前
|
图形学 iOS开发
Unity与IOS⭐最基础的交互演示
Unity与IOS⭐最基础的交互演示
|
5月前
|
开发工具 图形学 iOS开发
Unity与IOS⭐Unity接入IOS SDK的流程图
Unity与IOS⭐Unity接入IOS SDK的流程图
|
5月前
|
图形学 数据安全/隐私保护 iOS开发
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
|
7月前
|
存储 JSON 关系型数据库
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
205 2